Crea automaticamente pipeline CI/CD e ECS cluster Amazon per microservizi utilizzando 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à.

Crea automaticamente pipeline CI/CD e ECS cluster Amazon per microservizi utilizzando AWS CDK

Creato da Varsha Raju () AWS

Ambiente: PoC o pilota

Tecnologie: DevOps; Contenitori e microservizi; Modernizzazione; Infrastruttura

AWSservizi: AWS CodeBuild; AWS CodeCommit; AWS CodePipeline; AmazonECS; AWS CDK

Riepilogo

Questo modello descrive come creare automaticamente le pipeline di integrazione e distribuzione continua (CI/CD) e l'infrastruttura sottostante per la creazione e la distribuzione di microservizi su Amazon Elastic Container Service (Amazon). ECS Puoi utilizzare questo approccio se desideri configurare pipeline CI/CD per mostrare alla tua organizzazione i vantaggi di proof-of-concept CI/CD, microservizi e. DevOps È inoltre possibile utilizzare questo approccio per creare pipeline CI/CD iniziali da personalizzare o modificare in base ai requisiti dell'organizzazione. 

L'approccio del pattern crea un ambiente di produzione e un ambiente non di produzione ciascuno con un cloud privato virtuale (VPC) e un ECS cluster Amazon configurato per l'esecuzione in due zone di disponibilità. Questi ambienti sono condivisi da tutti i tuoi microservizi e quindi crei una pipeline CI/CD per ogni microservizio. Queste pipeline CI/CD recuperano le modifiche da un repository di origine AWS CodeCommit, le creano automaticamente e quindi le distribuiscono negli ambienti di produzione e non di produzione. Quando una pipeline completa con successo tutte le sue fasi, è possibile utilizzarla URLs per accedere al microservizio negli ambienti di produzione e non di produzione.

Prerequisiti e limitazioni

Prerequisiti

  • Un account Amazon Web Services (AWS) attivo.

  • Un bucket Amazon Simple Storage Service (Amazon S3) esistente che contiene starter-code.zip il file (allegato).

  • AWSCloud Development Kit (AWSCDK), installato e configurato nel tuo account. Per ulteriori informazioni su questo argomento, consulta la AWS CDK sezione Guida introduttiva alla AWS CDK documentazione.

  • Python 3 epip, installato e configurato. Per ulteriori informazioni su questo argomento, consulta la documentazione di Python.

  • Familiarità con AWSCDK,, AWS CodePipeline, AWS CodeBuild CodeCommit, Amazon Elastic Container Registry (AmazonECR)ECS, Amazon e AWS Fargate.

  • Familiarità con Docker.

  • Comprensione di CI/CD e. DevOps

Limitazioni

  • Si applicano i limiti generali AWS dell'account. Per ulteriori informazioni in merito, consulta le quote di AWS servizio nella documentazione di riferimento AWS generale.

Versioni del prodotto

  • Il codice è stato testato utilizzando la versione 16.13.0 e AWS CDK la versione 1.132.0 di Node.js.

Architettura

Cloud AWS architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.

Il diagramma mostra il flusso di lavoro seguente:

  1. Uno sviluppatore di applicazioni inserisce il codice in un repository. CodeCommit

  2. Viene avviata una pipeline.

  3. CodeBuild crea e invia l'immagine Docker a un repository Amazon ECR

  4. CodePipeline distribuisce una nuova immagine su un servizio Fargate esistente in un cluster Amazon non di produzione. ECS

  5. Amazon ECS inserisce l'immagine dal ECR repository Amazon in un servizio Fargate non di produzione.

  6. I test vengono eseguiti utilizzando un prodotto non di produzione. URL

  7. Il release manager approva la distribuzione di produzione.

  8. CodePipeline distribuisce la nuova immagine su un servizio Fargate esistente in un cluster Amazon di produzione ECS

  9. Amazon ECS inserisce l'immagine dal ECR repository Amazon nel servizio Fargate di produzione.

  10. Gli utenti di produzione accedono alla funzionalità utilizzando una versione di produzione. URL

Stack tecnologico

  • AWS CDK

  • CodeBuild

  • CodeCommit 

  • CodePipeline

  • Amazon ECR 

  • Amazon ECS 

  • Amazon VPC

Automazione e scalabilità

È possibile utilizzare l'approccio di questo modello per creare pipeline per microservizi distribuiti in uno stack condiviso. AWS CloudFormation L'automazione può creare più di un ECS cluster Amazon in ciascuno VPC e anche creare pipeline per microservizi distribuiti in un cluster Amazon condiviso. ECS Tuttavia, ciò richiede che tu fornisca nuove informazioni sulle risorse come input per lo stack della pipeline.

Strumenti

  • AWSCDK— AWS Cloud Development Kit (AWSCDK) è un framework di sviluppo software per definire l'infrastruttura cloud in codice e fornirla tramite AWS CloudFormation.

  • AWS CodeBuild— AWS CodeBuild è un servizio di compilazione completamente gestito nel cloud. CodeBuild compila il codice sorgente, esegue test unitari e produce artefatti pronti per l'implementazione.

  • AWS CodeCommit— AWS CodeCommit è un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato gli archivi Git nel AWS Cloud. CodeCommit elimina la necessità di gestire il proprio sistema di controllo del codice sorgente o di preoccuparsi della scalabilità della sua infrastruttura.

  • AWS CodePipeline— AWS CodePipeline è un servizio di distribuzione continua che puoi utilizzare per modellare, visualizzare e automatizzare i passaggi necessari per il rilascio del software. È possibile modellare e configurare rapidamente le diverse fasi di un processo di rilascio del software. CodePipeline automatizza i passaggi necessari per rilasciare continuamente le modifiche al software.

  • Amazon ECS — Amazon Elastic Container Service (AmazonECS) è un servizio di gestione dei container veloce e altamente scalabile che viene utilizzato per l'esecuzione, l'arresto e la gestione dei container su un cluster. Puoi eseguire le tue attività e i tuoi servizi su un'infrastruttura serverless gestita da AWS Fargate. In alternativa, per un maggiore controllo sulla tua infrastruttura, puoi eseguire attività e servizi su un cluster di istanze Amazon Elastic Compute Cloud (AmazonEC2) che gestisci.

  • Docker: Docker aiuta gli sviluppatori a imballare, spedire ed eseguire qualsiasi applicazione come contenitore leggero, portatile e autosufficiente.

Codice

Il codice per questo pattern è disponibile nei starter-code.zip file cicdstarter.zip and (allegati).

Epiche

AttivitàDescrizioneCompetenze richieste
Configura la directory di lavoro per AWSCDK.
  1. Crea una directory denominata cicdproject sul tuo computer locale.

  2. Scaricate il cicdstarter.zip file (allegato) nella cicdproject cartella e decomprimetelo. In questo modo viene creata una cartella denominatacicdstarter.

  3. Esegui il comando cd <user-home>/cicdproject/cicdstarter

  4. Configura l'ambiente virtuale Python eseguendo il python3 -m venv .venv comando.

  5. Esegui il comando source ./.venv/bin/activate.

  6. Configura il tuo AWS ambiente eseguendo il aws configure comando o utilizzando le seguenti variabili di ambiente: 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, Infrastruttura cloud
AttivitàDescrizioneCompetenze richieste
Crea l'infrastruttura condivisa.
  1. Nella tua directory di lavoro, esegui il cd cicdvpcecs comando. 

  2. Esegui il pip3 install -r requirements.txt comando per installare tutte le dipendenze Python richieste

  3. Esegui cdk bootstrap command per impostare l'AWSambiente per. AWS CDK 

  4. Esegui il comando cdk synth --context aws_account=<aws_account_ID> --context aws_region=<aws-region>

  5. Esegui il comando cdk deploy --context aws_account=<aws_account_ID> --context aws_region=<aws-region>.

  6. Lo AWS CloudFormation stack crea la seguente infrastruttura:

    • Una non produzione denominata VPC cicd-vpc-ecs/cicd-vpc-nonprod

    • Una produzione VPC denominata cicd-vpc-ecs/cicd-vpc-prod

    • Un ECS cluster Amazon non di produzione denominato cicd-ecs-nonprod

    • Un ECS cluster Amazon di produzione denominato cicd-ecs-prod

AWS DevOps, Infrastruttura cloud
Monitora lo AWS CloudFormation stack.
  1. Accedi alla console di AWS gestione, apri la AWS CloudFormation console e scegli lo cicd-vpc-ecs stack dall'elenco. 

  2. Nel riquadro dei dettagli dello stack, scegli la scheda Eventi e monitora l'avanzamento della creazione dello stack.

AWS DevOps, Infrastruttura cloud
Prova lo AWS CloudFormation stack.
  1. Dopo aver creato lo cicd-vpc-ecs AWS CloudFormation stack, assicuratevi che gli cicd-vpc-ecs/cicd-vpc-nonprod e cicd-vpc-ecs/cicd-vpc-prod VPCs siano stati creati. 

  2. Assicurati che i ECS cluster cicd-ecs-nonprod e cicd-ecs-prod Amazon siano creati.

Importante: assicurati di registrare il IDs per i due gruppi di sicurezza VPCs e il gruppo di sicurezza IDs per i gruppi di sicurezza predefiniti in entrambiVPCs.

AWS DevOps, Infrastruttura cloud
AttivitàDescrizioneCompetenze richieste
Crea l'infrastruttura per il microservizio.
  1. Assegna un nome al tuo microservizio. Ad esempio, questo modello utilizza myservice1 come nome del microservizio.

  2. Nella tua directory di lavoro esegui il cd <working-directory>/cdkpipeline comando.

  3. Esegui il comando pip3 install -r requirements.txt.

  4. Esegui il cdk synth comando completo disponibile nella sezione Informazioni aggiuntive di questo modello.

  5. Esegui il cdk deploy comando completo disponibile nella sezione Informazioni aggiuntive di questo modello.

Nota: è inoltre possibile fornire i valori per entrambi i comandi utilizzando il cdk.json file nella directory.

AWS DevOps, Infrastruttura cloud
Monitora lo AWS CloudFormation stack.

Apri la AWS CloudFormation console e monitora l'avanzamento dello myservice1-cicd-stack stack. Alla fine, lo stato cambia in. CREATE_COMPLETE

AWS DevOps, Infrastruttura cloud
Prova lo AWS CloudFormation stack.
  1. Sulla AWS CodeCommit console, verifica che myservice1 esista un repository denominato e contenga il codice di avvio.

  2. Sulla AWS CodeBuild console, verifica che esista un progetto di build denominatomyservice1.

  3. Sulla ECR console Amazon, verifica che myservice1 esista un ECR repository Amazon denominato.

  4. Sulla ECS console Amazon, verifica che un servizio Fargate denominato myservice1 esista sia in un cluster Amazon non di produzione che in uno di produzione. ECS

  5. Sulla console Amazon Elastic Compute Cloud (AmazonEC2), verifica che vengano creati gli Application Load Balancer non di produzione e di produzione. Registra i nomi diDNS. ALBs

  6. Sulla AWS CodePipeline console, verifica che myservice1 esista una pipeline denominata. Deve avereSource, BuildDeploy-NonProd, e Deploy-Prod fasi. La pipeline dovrebbe inoltre avere uno in progress status.

  7. Monitora la pipeline fino al completamento di tutte le fasi. 

  8. Approvala manualmente per la produzione.

  9. In una finestra del browser, inserisci i DNS nomi diALBs.

  10. L'applicazione dovrebbe essere visualizzata Hello World nelle aree di non produzione e produzioneURLs.

Usa la pipeline.
  1. Apri il CodeCommit repository che hai creato in precedenza e apri il index.js file. 

  2. Sostituisci Hello World con Hello CI/CD.

  3. Salva e conferma le modifiche nel ramo principale.

  4. Verificate che la pipeline abbia inizio e che la modifica attraversi le Build fasi Deploy-NonProd e eDeploy-Prod 

  5. Approvate manualmente la produzione.

  6. Ora URLs dovrebbero essere visualizzate sia la produzione che la non produzione. Hello CICD

AWS DevOps, Infrastruttura cloud
Ripeti questa epopea per ogni microservizio.

Ripeti le attività di questa epopea per creare una pipeline CI/CD per ciascuno dei tuoi microservizi.

AWS DevOps, Infrastruttura cloud

Risorse correlate

Informazioni aggiuntive

Comando cdk synth

cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

cdk deploy command

cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

Allegati

Per accedere al contenuto aggiuntivo associato a questo documento, decomprimete il seguente file: attachment.zip