Configura una pipeline CI/CD utilizzando AWS e CodePipeline AWS CDK - 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à.

Configura una pipeline CI/CD utilizzando AWS e CodePipeline AWS CDK

Creato da Konstantin Zarudaev (AWS), Cizer Pereira (AWS), Lars Kinder (AWS) e Yasha Dabas (AWS)

Repository di codice: AWS CodePipeline con CI/CD

Ambiente: PoC o pilota

Tecnologie: DevOps

Carico di lavoro: open source

Servizi AWS: AWS CodePipeline

Home

L'automazione del processo di creazione e rilascio del software con integrazione e distribuzione continue (CI/CD) supporta build ripetibili e la distribuzione rapida di nuove funzionalità agli utenti. È possibile testare rapidamente e facilmente ogni modifica al codice e rilevare e correggere i bug prima di rilasciare il software. Eseguendo ogni modifica durante il processo di staging e rilascio, è possibile verificare la qualità dell'applicazione o del codice dell'infrastruttura. CI/CD incarna una cultura, una serie di principi operativi e una raccolta di pratiche che aiutano i team di sviluppo delle applicazioni a apportare modifiche al codice con maggiore frequenza e affidabilità. L'implementazione è anche nota come pipeline CI/CD.

Questo modello definisce una pipeline riutilizzabile di integrazione continua e distribuzione continua (CI/CD) su Amazon Web Services (AWS). La CodePipeline pipeline AWS è scritta utilizzando AWS Cloud Development Kit (AWS CDK) v2.

Utilizzando CodePipeline, puoi modellare le diverse fasi del processo di rilascio del software tramite l'interfaccia della Console di gestione AWS, l'AWS Command Line Interface (AWS CLI), AWS o gli CloudFormation SDK AWS. Questo modello dimostra l'implementazione CodePipeline e i relativi componenti utilizzando AWS CDK. Oltre alle librerie di costruzione, AWS CDK include un toolkit (il comando CLIcdk), che è lo strumento principale per interagire con l'app AWS CDK. Tra le altre funzioni, il toolkit offre la possibilità di convertire uno o più stack in CloudFormation modelli e distribuirli su un account AWS.

La pipeline include test per convalidare la sicurezza delle librerie di terze parti e aiuta a garantire un rilascio rapido e automatico negli ambienti specificati. È possibile aumentare la sicurezza complessiva delle applicazioni sottoponendole a un processo di convalida.

L'intento di questo modello è accelerare l'uso delle pipeline CI/CD per distribuire il codice, garantendo al contempo che le risorse distribuite aderiscano alle migliori pratiche. DevOps Dopo aver implementato il codice di esempio, avrai un AWS CodePipeline con processi di linting, test, controllo di sicurezza, implementazione e post-distribuzione. Questo modello include anche i passaggi per Makefile. Utilizzando un Makefile, gli sviluppatori possono riprodurre i passaggi CI/CD localmente e aumentare la velocità del processo di sviluppo.

Prerequisiti e limitazioni

Prerequisiti

  • Un account AWS attivo

  • Una conoscenza di base di quanto segue:

    • AWS CDK

    • AWS CloudFormation

    • AWS CodePipeline

    • TypeScript

Limitazioni

Questo modello utilizza AWS CDK TypeScript solo per. Non copre altre lingue supportate da AWS CDK.

Versioni del prodotto

Utilizza le versioni più recenti dei seguenti strumenti:

  • Interfaccia a riga di comando di AWS (CLI AWS)

  • cfn_nag

  • git-remote-codecommit

  • Node.js

Architettura

Stack tecnologico Target

  • AWS CDK

  • AWS CloudFormation

  • AWS CodeCommit

  • AWS CodePipeline

Architettura Target

La pipeline viene attivata da una modifica nel CodeCommit repository AWS (). SampleRepository All'inizio, CodePipeline crea artefatti, si aggiorna da solo e avvia il processo di distribuzione. La pipeline risultante implementa una soluzione in tre ambienti indipendenti:

  • Dev: controllo del codice in tre fasi nell'ambiente di sviluppo attivo

  • Test: ambiente di test di integrazione e regressione

  • Prod — Ambiente di produzione

I tre passaggi inclusi nella fase di sviluppo sono il linting, la sicurezza e i test unitari. Questi passaggi vengono eseguiti in parallelo per accelerare il processo. Per garantire che la pipeline fornisca solo artefatti funzionanti, verrà interrotta ogni volta che una fase del processo fallisce. Dopo una fase di implementazione in fase di sviluppo, la pipeline esegue test di convalida per verificare i risultati. In caso di successo, la pipeline distribuirà quindi gli artefatti nell'ambiente di test, che contiene la convalida post-implementazione. Il passaggio finale consiste nel distribuire gli artefatti nell'ambiente Prod.

Il diagramma seguente mostra il flusso di lavoro dal CodeCommit repository ai processi di compilazione e aggiornamento eseguiti da CodePipeline, le tre fasi dell'ambiente di sviluppo e la successiva implementazione e convalida in ciascuno dei tre ambienti.

L'ambiente di sviluppo include linting, sicurezza e unit testing, tutti con implementazione e convalida.

Strumenti

Servizi AWS

  • AWS Cloud Development Kit (AWS CDK) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.

  • AWS ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS. In questo modello CloudFormation i modelli possono essere utilizzati per creare un CodeCommit repository e una CodePipeline pipeline CI/CD.

  • AWS CodeCommit è un servizio di controllo delle versioni che ti aiuta ad archiviare e gestire in modo privato gli archivi Git, senza dover gestire il tuo sistema di controllo del codice sorgente.

  • AWS CodePipeline è un servizio CI/CD che ti aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

Altri strumenti

  • cfn_nag è uno strumento open source che cerca modelli nei CloudFormation modelli per identificare potenziali problemi di sicurezza.

  • git-remote-codecommitè un'utilità per inviare ed estrarre codice dai CodeCommit repository estendendo Git.

  • Node.js è un ambiente di JavaScript runtime basato sugli eventi progettato per la creazione di applicazioni di rete scalabili.

Codice

Il codice per questo modello è disponibile nel repository di pratiche GitHub AWS CodePipeline with CI/CD.

Best practice

Esamina le risorse, come le policy di AWS Identity and Access Management (IAM), per confermare che siano in linea con le best practice della tua organizzazione.

Epiche

AttivitàDescrizioneCompetenze richieste

Installa strumenti su macOS o Linux.

Se utilizzi macOS o Linux, puoi installare gli strumenti eseguendo il seguente comando nel tuo terminale preferito o usando Homebrew per Linux.

brew install brew install git-remote-codecommit brew install ruby brew-gem brew-gem install cfn-nag
DevOps ingegnere

Installa strumenti utilizzando AWS Cloud9.

Se utilizzi AWS Cloud9, installa gli strumenti eseguendo il comando seguente.

gem install cfn-nag

Nota: AWS Cloud9 dovrebbe avere Node.js e npm installati. Per verificare l'installazione o la versione, esegui il comando seguente.

node -v npm -v
DevOps ingegnere

Configura AWS CLI.

Per configurare AWS CLI, usa le istruzioni per il tuo sistema operativo:

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Scarica o clona il codice.

Per ottenere il codice utilizzato da questo pattern, effettuate una delle seguenti operazioni:

  • Scaricate il codice sorgente più recente dalle versioni del GitHub repository e decomprimete il file scaricato in una cartella.

  • Clona il progetto eseguendo il seguente comando.

git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git

Rimuovi la .git directory dal repository clonato.

cd ./aws-codepipeline-cicd rm -rf ./.git

Successivamente, utilizzerai un CodeCommit repository AWS appena creato come origine remota.

DevOps ingegnere

Connect all'account AWS.

Puoi connetterti utilizzando un token di sicurezza temporaneo o l'autenticazione delle landing zone. Per confermare che stai utilizzando l'account e la regione AWS corretti, esegui i seguenti comandi.

AWS_REGION="eu-west-1" ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text) echo "${ACCOUNT_NUMBER}"
DevOps ingegnere

Avvia l'ambiente.

Per avviare un ambiente AWS CDK, esegui i seguenti comandi.

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

Dopo aver avviato correttamente l'ambiente, dovrebbe essere visualizzato il seguente output.

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped

Per ulteriori informazioni sul bootstrap di AWS CDK, consulta la documentazione di AWS CDK.

DevOps ingegnere

Sintetizza un modello.

Per sintetizzare un'app AWS CDK, usa il comando. cdk synth

npm run cdk synth

Vedrai il seguente output.

Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out Supply a stack id (CodePipeline, Dev-MainStack) to display its template.
DevOps ingegnere

Distribuisci lo CodePipeline stack.

Ora che hai avviato e sintetizzato il CloudFormation modello, puoi distribuirlo. La distribuzione creerà la CodePipeline pipeline e un CodeCommit repository, che saranno l'origine e il trigger della pipeline.

npm run cdk -- deploy CodePipeline --require-approval never

Dopo aver eseguito il comando, dovresti vedere una corretta distribuzione dello CodePipeline stack e delle informazioni di output. ti CodePipeline.RepositoryName dà il nome del CodeCommit repository nell'account AWS.

CodePipeline: deploying... CodePipeline: creating CloudFormation changeset... ✅ CodePipeline Outputs: CodePipeline.RepositoryName = SampleRepository Stack ARN: arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID
DevOps ingegnere

Configura l' CodeCommit archivio e la filiale remoti.

Dopo una distribuzione di successo, CodePipeline avvierà la prima esecuzione della pipeline, che puoi trovare nella console CodePipeline AWS. Poiché AWS CDK e io CodeCommit non avviamo un ramo predefinito, questa esecuzione iniziale della pipeline fallirà e restituirà il seguente messaggio di errore.

The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null

Per correggere questo errore, configura un'origine remota come SampleRepository e crea il ramo richiesto. main

RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text) echo "${RepoName}" # git init git branch -m master main git remote add origin codecommit://${RepoName} git add . git commit -m "Initial commit" git push -u origin main
DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Apporta una modifica per attivare la pipeline.

Dopo una corretta implementazione iniziale, è necessario disporre di una pipeline CI/CD completa con un main ramo SampleRepository come ramo di origine. Non appena apporti modifiche al main ramo, la pipeline avvierà ed eseguirà la seguente sequenza di azioni:

  1. Recupera il codice dal repository. CodeCommit

  2. Crea il tuo codice.

  3. Aggiorna la pipeline stessa (UpdatePipeline).

  4. Esegui tre job paralleli per i controlli di linting, sicurezza e unit test.

  5. In caso di successo, la pipeline distribuirà lo Main stack dall'./lib/main-stack.tsambiente Dev.

  6. Esegui un controllo post-implementazione per le risorse distribuite. Puoi seguire tutti i CodePipeline passaggi e i risultati nella CodePipeline console.

  7. In caso di successo, la pipeline ripeterà l'implementazione e la convalida per gli ambienti Test e Prod.

DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Esegui il processo di sviluppo utilizzando un Makefile.

È possibile eseguire l'intera pipeline localmente utilizzando il make comando oppure eseguire un singolo passaggio (ad esempio,make linting).

Per testare l'utilizzomake, effettuate le seguenti azioni:

  • Implementa la pipeline locale: make

  • Esegui solo test unitari: make unittest

  • Esegui la distribuzione sull'account corrente: make deploy

  • Pulisci l'ambiente: make clean

Sviluppatore di app, DevOps ingegnere
AttivitàDescrizioneCompetenze richieste

Elimina le risorse dell'app AWS CDK.

Per pulire l'app AWS CDK, esegui il comando seguente.

cdk destroy --all

Tieni presente che i bucket Amazon Simple Storage Service (Amazon S3) creati durante il bootstrap non vengono eliminati automaticamente. Hanno bisogno di una policy di conservazione che consenta l'eliminazione, oppure devi eliminarli manualmente nel tuo account AWS.

DevOps ingegnere

Risoluzione dei problemi

ProblemaSoluzione

Il modello non funziona come previsto.

Se qualcosa va storto e il modello non funziona, assicurati di avere quanto segue:

  • Le versioni corrette degli strumenti.

  • Accesso all'account AWS di destinazione (connettività di rete).

  • Autorizzazioni sufficienti per l'account AWS di destinazione.

Risorse correlate