Crea richieste pull automatizzate per l' AWS infrastruttura gestita da Terraform utilizzando Actions GitHub - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea richieste pull automatizzate per l' AWS infrastruttura gestita da Terraform utilizzando Actions GitHub

Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay e Prafful Gupta, Amazon Web Services

Riepilogo

Questo modello presenta un'utilità di automazione progettata per eliminare il lavoro manuale e ripetitivo necessario nella gestione delle modifiche su più repository Terraform. Molte organizzazioni utilizzano i repository Terraform per gestire la propria infrastruttura come codice (IaC), spesso con centinaia di repository separati che rappresentano ambienti, servizi o team diversi. La gestione di questi repository su larga scala rappresenta una sfida operativa significativa. Le attività di routine come l'aggiornamento di un parametro, l'aggiornamento delle versioni dei moduli o l'applicazione di modifiche alla configurazione spesso richiedono la creazione e la gestione delle richieste pull (PRs) su molti repository più volte al giorno.

Anche per modifiche semplici, questo processo ripetitivo e manuale richiede molto tempo ed è soggetto a errori. Gli ingegneri devono applicare costantemente la stessa modifica a tutti gli archivi mirati e creare titoli e descrizioni PR significativi. Inoltre, spesso devono interagire con strumenti esterni come Jira per recuperare o includere riferimenti per il monitoraggio dei problemi. Queste attività, sebbene necessarie, sono un sollevamento indifferenziato di carichi pesanti che richiedono tempo prezioso di progettazione e riducono l'efficienza complessiva. La mancanza di automazione in questo flusso di lavoro crea attriti, rallenta l'erogazione e aumenta il carico cognitivo sui team incaricati di mantenere infrastrutture Terraform su larga scala.

Panoramica della soluzione

Per affrontare questa sfida, questo modello offre un'utilità interamente basata sulla configurazione, che consente agli utenti di definire le modifiche desiderate in un file di configurazione strutturato. Questo file specifica i repository, i moduli, i parametri e i valori di destinazione utilizzando uno schema chiaramente definito.

Una volta configurata, l'utilità esegue i seguenti passaggi automatici:

  1. Legge la configurazione definita dall'utente per determinare l'ambito e la natura delle modifiche

  2. Crea un nuovo ramo in ogni repository di destinazione con gli aggiornamenti richiesti applicati

  3. Genera un PR per ogni modifica, garantendo la coerenza tra tutti gli archivi

  4. Invia notifiche Slack (opzionale) per avvisare le parti interessate con link diretti al file creato PRs

Automatizzando queste attività ripetitive, l'utilità riduce in modo significativo il tempo, l'impegno e i rischi associati alla gestione degli aggiornamenti dell'infrastruttura su larga scala. Consente ai team di concentrarsi su attività ingegneristiche di maggior valore, garantendo al contempo che le modifiche vengano applicate in modo coerente e possano essere tracciate in tutti gli archivi.

Prerequisiti e limitazioni

Prerequisiti

  • Un attivo. Account AWS

  • Python versione 3.8 o successiva.

  • Un token di accesso GitHub personale (PAT). Per ulteriori informazioni, consulta Creazione di un token di accesso personale (classico) nella GitHub documentazione.

  • Il GitHub PAT può accedere ai repository di destinazione in modo che l'utilità possa eseguire operazioni come la creazione di rami e richieste pull. Per ulteriori informazioni, consultate l'archivio del GitHub codice di questo pattern.

Limitazioni

  • La complessità della configurazione rappresenta la sfida principale. L'efficacia dell'automazione è limitata dalle funzionalità del relativo file di configurazione. Sebbene il sistema gestisca le modifiche standard in modo efficiente, le modifiche complesse dell'infrastruttura potrebbero richiedere un intervento manuale e alcuni casi limite non rientrano nell'ambito della gestione automatizzata.

  • La sicurezza e l'accesso presentano considerazioni importanti, in particolare nella gestione dei token di GitHub accesso e dei limiti di velocità delle API. Le organizzazioni devono bilanciare attentamente la necessità di automazione con l'archiviazione e la gestione sicure delle credenziali, garantendo controlli di accesso adeguati e mantenendo l'efficienza operativa.

  • I vincoli di convalida rappresentano un'altra limitazione importante perché il sistema automatizzato ha una capacità limitata di convalidare la logica aziendale e i requisiti specifici dell'ambiente. Le dipendenze complesse e le interazioni tra servizi spesso richiedono la supervisione umana, poiché la convalida automatizzata non è in grado di cogliere appieno tutte le sfumature contestuali e le regole aziendali.

  • Quando si affrontano modifiche all'infrastruttura su larga scala emergono problemi di scalabilità e prestazioni. Il sistema deve funzionare entro i limiti delle GitHub API e gestire contemporaneamente numerosi repository. Le operazioni che richiedono un uso intensivo di risorse su un'infrastruttura estesa possono creare colli di bottiglia prestazionali che richiedono una gestione attenta.

  • I limiti di integrazione limitano la flessibilità del sistema perché è progettato principalmente per funzionare con strumenti specifici come e Slack. GitHub Le organizzazioni che utilizzano strumenti diversi potrebbero aver bisogno di soluzioni personalizzate e le opzioni di personalizzazione del flusso di lavoro di questo modello sono limitate ai punti di integrazione supportati.

Architecture

Il diagramma seguente mostra il flusso di lavoro e i componenti di questa soluzione.

Flusso di lavoro per creare richieste pull automatizzate utilizzando GitHub Actions.

Il flusso di lavoro consiste nei seguenti passaggi:

  1. Lo sviluppatore attiva GitHub Actions specificando il repository Terraform.

  2. L'utilità di automazione legge le configurazioni definite.

  3. L'utilità di automazione richiama anche il repository Terraform fornito.

  4. L'utilità di automazione crea un nuovo ramo e aggiorna i modelli Terraform localmente.

  5. L'utilità di automazione invia il nuovo ramo al repository e crea un nuovo PR.

  6. L'utilità di automazione utilizza le notifiche Slack che includono link PR per avvisare gli sviluppatori e abilita i modelli Terraform per la distribuzione. Cloud AWS

Tools (Strumenti)

  • GitHubè una piattaforma per sviluppatori che gli sviluppatori possono utilizzare per creare, archiviare, gestire e condividere il proprio codice.

  • GitHub Actions è una piattaforma di integrazione e distribuzione continua (CI/CD) strettamente integrata con i repository. GitHub Puoi utilizzare GitHub Actions per automatizzare la pipeline di compilazione, test e distribuzione.

  • HashiCorp Terraform è uno strumento di infrastruttura come codice (IaC) che ti aiuta a creare e gestire risorse cloud e locali.

  • Slack, un'offerta di Salesforce, è una piattaforma conversazionale basata sull'intelligenza artificiale che fornisce collaborazione tramite chat e video, automatizza i processi senza codice e supporta la condivisione delle informazioni.

Archivio di codice

Il codice per questo modello è disponibile nell'archivio GitHub Automated Terraform Infrastructure Update Workflow using GitHub Actions.

Best practice

  • Una gestione efficace delle modifiche è fondamentale per un'implementazione di successo. Le organizzazioni dovrebbero adottare una strategia di implementazione graduale per cambiamenti su larga scala. Mantieni convenzioni di denominazione delle filiali e descrizioni delle pubbliche relazioni coerenti e assicurati una documentazione completa di tutte le modifiche.

  • I controlli di sicurezza devono essere implementati in modo rigoroso, concentrandosi sui principi di accesso con privilegi minimi e sulla gestione sicura delle credenziali. Abilita le regole di protezione delle filiali per prevenire modifiche non autorizzate. Effettua controlli di sicurezza regolari per mantenere l'integrità del sistema.

  • Un protocollo di test robusto dovrebbe includere terraform plan l'esecuzione automatizzata in pipeline di integrazione continua e distribuzione continua (CI/CD). Il protocollo dovrebbe includere anche controlli di convalida prima del commit e ambienti di revisione dedicati per le modifiche critiche. Questo approccio di test a più livelli aiuta a catturare tempestivamente i problemi e garantisce la stabilità dell'infrastruttura.

  • La strategia di monitoraggio deve comprendere meccanismi di allarme completi, tracciamento dettagliato delle success/failure metriche e meccanismi di riprova automatizzati in caso di operazioni non riuscite. Questa strategia aiuta a garantire la visibilità operativa e consente una risposta rapida a qualsiasi problema che si presenti.

  • Gli standard di configurazione dovrebbero enfatizzare il controllo delle versioni per tutte le configurazioni, mantenendo la modularità per la riusabilità e la scalabilità. Una documentazione chiara dello schema e degli esempi aiuta i team a comprendere e utilizzare il sistema di automazione in modo efficace.

Epiche

OperazioneDescriptionCompetenze richieste

Configura il repository.

Per configurare il repository, esegui i seguenti comandi:

# Clone the automation tool repository git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility cd sample-terraform-pr-automation-utility # Copy example configuration cp config.example.yaml config.yaml
AWS DevOps

Installare le dipendenze.

Per installare e verificare le dipendenze di Python, esegui i seguenti comandi:

# Install Python dependencies pip3 install -r requirements.txt # Verify installation python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"
AWS DevOps

Configura il GitHub token.

Per configurare il GitHub token e quindi verificarne il funzionamento, esegui i seguenti comandi:

# Set GitHub token environment variable export GITHUB_TOKEN="your_github_token_here" # Verify token works curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user
AWS DevOps
OperazioneDescriptionCompetenze richieste

Configura il config.yaml file.

Per definire i repository di destinazione e le modifiche desiderate, modificate il file config.yam l come segue:

repositories: - owner: "your-org" repo: "your-terraform-repo" files: - path: "variables.tf" changes: variables: - app_version: default: update: - from: ["1.0.0"] to: "1.1.0" settings: pr_title_template: "Infrastructure Update - {{timestamp}}" slack: username: "Terraform Bot" icon_emoji: ":terraform:" notify_on_success: true notify_on_error: true notify_batch_summary: true
AWS DevOps
OperazioneDescriptionCompetenze richieste

Effettua i test prima del volo.

Verifica sempre la tua configurazione prima di eseguirla nei repository di produzione. Utilizza il seguente comando:

# 1. Test configuration syntax python3 -c "from main import get_config_content; get_config_content()" # 2. Run in dry-run mode first DRY_RUN=true python3 main.py # 3. Test with minimal configuration # Use a simple config.yaml with just one repository and one change
AWS DevOps

Verifica l'accesso al repository.

Per verificare che il GitHub token possa accedere al repository, esegui il seguente comando:

# Test GitHub token access curl -H "Authorization: token $GITHUB_TOKEN" \ https://api.github.com/repos/owner/repo-name # Should return repository information, not 404
AWS DevOps
OperazioneDescriptionCompetenze richieste

Esegui l'utilità di automazione utilizzando l'interfaccia utente GitHub Actions.

Per eseguire l'utilità di automazione utilizzando l'interfaccia utente GitHub Actions, procedi come segue:

  1. Accedi al tuo repository su. GitHub

  2. Scegli la scheda Azioni.

  3. Scegli il flusso di lavoro Terraform Infrastructure Update Automation.

  4. Scegli Esegui flusso di lavoro.

  5. Configura i seguenti input del flusso di lavoro:

    • Configurazione del codice sorgente:

      • Seleziona il ramo di destinazione per l'automazione.

      • Specificate il percorso del file di configurazione (config.yaml) che contiene le modifiche desiderate.

    • Controlli di anteprima:

      • Scegliete l'opzione Anteprima per rivedere le modifiche senza applicarle.

    • Gestione delle filiali:

      • Inserisci il ramo base per creare nuovi rami di funzionalità.

      • Immettete la configurazione del prefisso del ramo.

      • Seleziona la casella di controllo Chiudi automaticamente le richieste pull obsolete.

    • Configurazione delle notifiche:

      • Inserisci l'URL per l'URL del webhook di Slack per le notifiche complete (sostituisce il segreto del repository).

      • Scegli la casella di controllo Verifica l'integrazione con Slack prima dell'elaborazione (solo esecuzione a secco).

      • Inserisci le tue informazioni per un canale Slack predefinito di Override (ad esempio, #infrastructure -test).

    • Impostazioni avanzate:

      • Scegli la casella di controllo Abilita la registrazione di debug per la risoluzione dei problemi.

AWS DevOps

(Alternativa) Esegui l'utilità di automazione dalla riga di comando.

Se preferisci, puoi eseguire l'utilità di automazione dalla riga di comando anziché utilizzando l'interfaccia utente GitHub Actions. Utilizza il seguente comando:

# Run actual automation python3 main.py
AWS DevOps
OperazioneDescriptionCompetenze richieste

Rivedi le creazioni PRs e le modifiche.

Per monitorare i risultati dell'esecuzione del GitHub flusso di lavoro, procedi come segue:

AWS DevOps
OperazioneDescriptionCompetenze richieste

(Facoltativo) Pulisci PRs.

Chiusura abbandonata o non necessaria PRs.

AWS DevOps

Risorse correlate

AWS Guida prescrittiva

GitHub documentazione