Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa guida verrà illustrato come usare CI/CD e Infrastructure as Code (IaC) per la distribuzione in Azure con GitHub Actions in modo automatizzato e ripetibile.
Questo articolo offre una panoramica dell'architettura e presenta una soluzione strutturata per la progettazione di un'applicazione in Azure scalabile, sicura, resiliente e a disponibilità elevata. Per visualizzare esempi più reali di architetture cloud e idee sulle soluzioni, esplorare le architetture di Azure.
Vantaggi dell'uso di IaC e automazione per le distribuzioni
Esistono molti modi per eseguire la distribuzione in Azure, tra cui il portale di Azure, l'interfaccia della riga di comando, l'API e altro ancora. Per questa guida si userà l'automazione IaC e CI/CD. I vantaggi di questo approccio includono:
Dichiarativo: quando si definisce l'infrastruttura e il processo di distribuzione nel codice, è possibile controllarne le versioni ed esaminarlo usando il ciclo di vita di sviluppo software standard. IaC consente anche di evitare eventuali deviazioni nella configurazione.
Coerenza: seguendo un processo IaC si garantisce che l'intera organizzazione segua un metodo standard e ben definito per distribuire l'infrastruttura che incorpora le procedure consigliate ed è avanzata per soddisfare le esigenze di sicurezza. Tutti i miglioramenti apportati ai modelli centrali possono essere applicati facilmente all'interno dell'organizzazione.
Sicurezza: i modelli gestiti centralmente possono essere rafforzati e approvati da un team operativo cloud o da un team di sicurezza per soddisfare gli standard interni.
Self-Service: I team possono essere autorizzati a implementare la propria infrastruttura utilizzando modelli gestiti centralmente.
Produttività migliorata: usando i modelli standard, i team possono effettuare rapidamente il provisioning di nuovi ambienti senza doversi preoccupare di tutti i dettagli di implementazione.
Altre informazioni sono disponibili nell'infrastruttura ripetibile nel Centro architetture di Azure o nell'infrastruttura come codice nel Centro risorse DevOps.
Architecture
Flusso di dati
- Creare un nuovo ramo e archiviare le modifiche del codice IaC necessarie.
- Creare una Pull Request (PR) in GitHub una volta pronti per effettuare il merge delle modifiche nel vostro ambiente.
- Un flusso di lavoro di GitHub Actions verrà attivato per garantire che il codice sia formattato correttamente, coerente internamente e produci un'infrastruttura sicura. Inoltre, un piano Terraform o un'analisi what-if di Bicep verrà eseguita per generare un'anteprima delle modifiche che verranno apportate nel tuo ambiente Azure.
- Una volta esaminata in modo appropriato, la pull request può essere integrata nel ramo principale.
- Un altro flusso di lavoro di GitHub Actions verrà attivato dal ramo principale ed eseguirà le modifiche usando il provider IaC.
- (esclusivo per Terraform) Un flusso di lavoro GitHub Action pianificato regolarmente deve essere eseguito anche per cercare eventuali deviazioni di configurazione nell'ambiente e creare un nuovo problema se vengono rilevate modifiche.
Prerequisiti
Usare Bicep
Creare ambienti GitHub
I flussi di lavoro usano ambienti GitHub e segreti per archiviare le informazioni sull'identità di Azure e configurare un processo di approvazione per le distribuzioni. Creare un ambiente denominato
productionseguendo queste istruzioni. Nell'ambienteproductionconfigurare una regola di protezione e aggiungere tutti i responsabili dell'approvazione necessari che devono approvare le distribuzioni in produzione. Puoi anche limitare l'ambiente al ramo principale. Le istruzioni dettagliate sono disponibili qui.Configurare l'identità di Azure:
È necessaria un'applicazione Azure Active Directory con autorizzazioni per la distribuzione all'interno della sottoscrizione di Azure. Creare una singola applicazione e concedere le autorizzazioni di lettura/scrittura appropriate nella sottoscrizione di Azure. Configurare quindi le credenziali federate per consentire a GitHub di usare l'identità usando OpenID Connect (OIDC). Per istruzioni dettagliate, vedere la documentazione di Azure . Sarà necessario aggiungere tre credenziali federate:
- Impostare Tipo di entità su
Environmente usare il nome dell'ambienteproduction. - Impostare Tipo di entità su
Pull Request. - Impostare Tipo di entità su
Branche usare il nome delmainramo.
- Impostare Tipo di entità su
Aggiungere segreti GitHub
Annotazioni
Anche se nessuno dei dati sulle identità di Azure contiene segreti o credenziali, i segreti di GitHub vengono comunque utilizzati come un modo pratico per parametrizzare le informazioni sull'identità per ogni ambiente.
Creare i segreti seguenti nel repository usando l'identità di Azure:
-
AZURE_CLIENT_ID: ID applicazione (client) della registrazione dell'app in Azure -
AZURE_TENANT_ID: ID tenant di Azure Active Directory in cui è definita la registrazione dell'app. -
AZURE_SUBSCRIPTION_ID: ID sottoscrizione in cui è definita la registrazione dell'app.
Le istruzioni per aggiungere i segreti al repository sono disponibili qui.
-
Utilizza Terraform
Configurare la posizione dello stato di Terraform
Terraform usa un file di stato per archiviare informazioni sullo stato corrente dell'infrastruttura gestita e sulla configurazione associata. Questo file dovrà essere salvato in modo permanente tra diverse esecuzioni del flusso di lavoro. L'approccio consigliato consiste nell'archiviare questo file in un account di archiviazione di Azure o in un altro back-end remoto simile. In genere, il provisioning di questa risorsa di archiviazione viene eseguito manualmente o tramite un flusso di lavoro separato. Il blocco back-end Terraform dovrà essere aggiornato con il percorso di archiviazione selezionato (vedere qui per la documentazione).
Creare un ambiente GitHub
I flussi di lavoro usano ambienti GitHub e segreti per archiviare le informazioni sull'identità di Azure e configurare un processo di approvazione per le distribuzioni. Creare un ambiente denominato
productionseguendo queste istruzioni. Nell'ambienteproductionconfigura una regola di protezione e aggiungi gli approvatori desiderati che devono approvare i rilasci in produzione. Puoi anche limitare l'ambiente al ramo principale. Le istruzioni dettagliate sono disponibili qui.Configurare l'identità di Azure:
È necessaria un'applicazione Azure Active Directory con autorizzazioni per la distribuzione all'interno della sottoscrizione di Azure. Creare un'applicazione separata per un account
read-onlyeread/writee concedere loro le autorizzazioni appropriate nella sottoscrizione di Azure. Inoltre, entrambi i ruoli avranno bisogno di almenoReader and Data Accessautorizzazioni per l'account di archiviazione in cui risiede lo stato di Terraform del passaggio 1. Configurare quindi le credenziali federate per consentire a GitHub di usare l'identità usando OpenID Connect (OIDC). Per istruzioni dettagliate, vedere la documentazione di Azure .Per l'identità
read/writecreare una credenziale federata come indicato di seguito:- Impostare
Entity TypeaEnvironmente utilizzare il nome del ambienteproduction.
Per l'identità
read-onlycreare due credenziali federate come indicato di seguito:- Impostare
Entity TypesuPull Request. - Configurare
Entity TypeaBranche utilizzare il nome del ramomain.
- Impostare
Aggiungere segreti GitHub
Annotazioni
Anche se nessuno dei dati sulle identità di Azure contiene segreti o credenziali, i segreti di GitHub vengono comunque utilizzati come un modo pratico per parametrizzare le informazioni sull'identità per ogni ambiente.
Creare i segreti seguenti nel repository usando l'identità
read-only:-
AZURE_CLIENT_ID: ID dell'applicazione (client) della registrazione dell'applicazione in Azure -
AZURE_TENANT_ID: ID tenant di Azure Active Directory in cui è definita la registrazione dell'app. -
AZURE_SUBSCRIPTION_ID: ID sottoscrizione in cui è definita la registrazione dell'app.
Le istruzioni per aggiungere i segreti al repository sono disponibili qui.
Creare un altro segreto nell'ambiente
productionusando l'identitàread-write:-
AZURE_CLIENT_ID: ID applicazione (client) della registrazione dell'app in Azure
Le istruzioni per aggiungere i segreti all'ambiente sono disponibili qui. Il segreto dell'ambiente sovrascriverà il segreto del repository durante la fase di distribuzione nell'ambiente
productionquando sono necessarie autorizzazioni elevate di lettura/scrittura.-
Distribuire con GitHub Actions
Usare Bicep
Nell'architettura di riferimento sono inclusi due flussi di lavoro principali:
-
Questo flusso di lavoro viene eseguito su ogni commit ed è composto da un set di unit test nel codice dell'infrastruttura. Esegue bicep build per trasformare il bicep in un modello ARM. Ciò garantisce che non siano presenti errori di formattazione. Esegue quindi una convalida per assicurarsi che il modello sia distribuibile. Infine, checkov, uno strumento di analisi del codice statico open source per IaC, verrà eseguito per rilevare i problemi di sicurezza e conformità. Se il repository usa GitHub Advanced Security (GHAS), i risultati verranno caricati in GitHub.
-
Questo flusso di lavoro viene attivato per ogni pull request e per ogni commit nel ramo principale. La fase di what-if del flusso di lavoro viene usata per comprendere l'impatto delle modifiche IaC nell'ambiente di Azure eseguendo what-if. Questo report viene quindi allegato al pull request per una facile revisione. La fase di distribuzione si svolge dopo l'analisi ipotetica quando il flusso di lavoro viene attivato da un push sul ramo principale. Questa fase applicherà il modello in Azure dopo l'approvazione di una revisione manuale.
Utilizza Terraform
Nell'architettura di riferimento sono inclusi tre flussi di lavoro principali:
-
Questo flusso di lavoro viene eseguito su ogni commit ed è composto da un set di unit test nel codice dell'infrastruttura. Esegue terraform fmt per assicurarsi che il codice sia correttamente passato al lint e segua le migliori pratiche di Terraform. Esegue quindi la convalida terraform per verificare che il codice sia sintatticamente corretto e coerente internamente. Infine, checkov, uno strumento di analisi del codice statico open source per IaC, verrà eseguito per rilevare i problemi di sicurezza e conformità. Se il repository usa GitHub Advanced Security (GHAS), i risultati verranno caricati in GitHub.
-
Questo flusso di lavoro viene attivato per ogni pull request e per ogni commit nel ramo principale. La fase di pianificazione del flusso di lavoro viene usata per comprendere l'impatto delle modifiche IaC nell'ambiente di Azure eseguendo terraform plan. Questo report viene quindi allegato al pull request per una facile revisione. La fase di applicazione viene eseguita dopo il piano quando il flusso di lavoro viene attivato da un push nel ramo principale. Questa fase prenderà il documento di piano e applicherà le modifiche dopo la firma di una revisione manuale se sono presenti modifiche in sospeso all'ambiente.
Rilevamento di deriva di Terraform
Questo flusso di lavoro viene eseguito periodicamente per analizzare l'ambiente per individuare eventuali deviazioni di configurazione o modifiche apportate all'esterno di Terraform. Se viene rilevata una deviazione, viene generato un problema di GitHub per avvisare i gestori del progetto.