Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.
Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".
Personalizza le tue preferenze relative ai cookie
Utilizziamo cookie e strumenti simili (collettivamente, "cookie") per le seguenti finalità.
Essenziali
I cookie essenziali sono necessari per fornire il nostro sito e i nostri servizi e non possono essere disattivati. In genere vengono impostati in risposta alle tue azioni sul sito, come l'impostazione delle tue preferenze sulla privacy, l'accesso o la compilazione di moduli.
Prestazione
I cookie di prestazione forniscono statistiche anonime sul modo in cui i clienti navigano nel nostro sito in modo da migliorare l'esperienza e le prestazioni del sito. Le terze parti approvate possono eseguire analisi per conto nostro, ma non possono utilizzare i dati per le proprie finalità.
Consentiti
Funzionali
I cookie funzionali ci aiutano a fornire funzionalità utili del sito, a ricordare le tue preferenze e a mostrare contenuti pertinenti. Le terze parti approvate possono impostare questi cookie per fornire determinate funzionalità del sito. Se non permetti l'installazione di questi cookie, alcuni o tutti questi servizi potrebbero non funzionare correttamente.
Consentiti
Pubblicitari
I cookie pubblicitari possono essere impostati tramite il nostro sito da noi o dai nostri partner pubblicitari e ci aiutano a distribuire contenuti di marketing personalizzati. Se non permetti l'installazione di questi cookie, visualizzerai pubblicità meno pertinenti.
Consentiti
Il blocco di alcuni tipi di cookie può influire sulla tua esperienza dei nostri siti. Puoi modificare le tue preferenze relative ai cookie in qualsiasi momento facendo clic su Preferenze cookie, nel piè di pagina di questo sito. Per ulteriori informazioni su come noi e le terze parti approvate utilizziamo i cookie sui nostri siti, leggi la nostra Informativa sui cookie di AWS.
Impossibile salvare le preferenze dei cookie
Al momento archivieremo solo i cookie essenziali, perché non siamo stati in grado di salvare le tue preferenze relative ai cookie.
Se desideri modificare le preferenze dei cookie, riprova più tardi utilizzando il link nel piè di pagina della Console AWS oppure contatta il supporto se il problema persiste.
Gestisci le distribuzioni blu/green di microservizi su più account e regioni utilizzando i servizi di codice AWS e le chiavi multiregionali AWS KMS - 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à.
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à.
Gestisci le distribuzioni blu/green di microservizi su più account e regioni utilizzando i servizi di codice AWS e le chiavi multiregionali AWS KMS
AWS CodeCommit Avviso: non è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. Ulteriori informazioni
Questo modello descrive come distribuire un'applicazione globale di microservizi da un account AWS centrale a più account di carico di lavoro e regioni secondo una strategia di distribuzione blu/verde. Il pattern supporta quanto segue:
Il software è sviluppato in un account centrale, mentre i carichi di lavoro e le applicazioni sono distribuiti su più account e regioni AWS.
Una singola chiave multiregionale AWS Key Management System (AWS KMS) viene utilizzata per la crittografia e la decrittografia per coprire il disaster recovery.
La chiave KMS è specifica della regione e deve essere gestita o creata in tre diverse regioni per gli artefatti della pipeline. Una chiave multiregionale KMS aiuta a mantenere lo stesso ID chiave in tutte le regioni.
Il modello di ramificazione del flusso di lavoro Git è implementato con due rami (development e main) e il codice viene unito utilizzando pull request (PRs). La funzione AWS Lambda distribuita da questo stack crea un PR dal ramo di sviluppo al ramo principale. L'unione delle pubbliche relazioni con la filiale principale avvia una CodePipeline pipeline AWS, che orchestra il flusso di integrazione continua e distribuzione continua (CI/CD) e distribuisce gli stack tra gli account.
Questo modello fornisce un esempio di configurazione dell'infrastruttura come codice (IaC) tramite gli CloudFormation stack AWS per dimostrare questo caso d'uso. La distribuzione blu/verde dei microservizi viene implementata utilizzando AWS. CodeDeploy
Prerequisiti e limitazioni
Prerequisiti
Quattro account AWS attivi:
Un account di strumenti per gestire la pipeline di codice e mantenere il CodeCommit repository AWS.
Tre account di carico di lavoro (test) per la distribuzione del carico di lavoro dei microservizi.
Questo modello utilizza le seguenti regioni. Se desideri utilizzare altre regioni, devi apportare le modifiche appropriate agli stack multiregione AWS CodeDeploy e AWS KMS.
Account Tools (AWS CodeCommit): ap-south-1
Account Workload (test) 1: ap-south-1
Account per il carico di lavoro (test) 2: eu-central-1
Account per il carico di lavoro (test) 3: us-east-1
Tre bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) per le regioni di distribuzione in ogni account di carico di lavoro. (Queste vengono chiamate S3BUCKETNAMETESTACCOUNT1S3BUCKETNAMETESTACCOUNT2 e S3BUCKETNAMETESTACCOUNT3 più avanti in questo schema).
Ad esempio, puoi creare questi bucket in account e regioni specifici con nomi di bucket univoci come segue (sostituisci xxxx con un numero casuale):
##In Test Account 1aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1##In Test Account 2aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1##In Test Account 3aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1#Example##In Test Account 1aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1##In Test Account 2aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1##In Test Account 3aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
Limitazioni
Il modello utilizza AWS CodeBuild e altri file di configurazione per distribuire un microservizio di esempio. Se hai un tipo di carico di lavoro diverso (ad esempio, serverless), devi aggiornare tutte le configurazioni pertinenti.
Architettura
Stack tecnologico Target
AWS CloudFormation
AWS CodeCommit
AWS CodeBuild
AWS CodeDeploy
AWS CodePipeline
Architettura Target
Automazione e scalabilità
La configurazione è automatizzata utilizzando i modelli di CloudFormation stack AWS (IaC). Può essere facilmente scalato per più ambienti e account.
Strumenti
Servizi AWS
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.
AWS CodeBuild è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
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 CodeDeploy automatizza le distribuzioni su Amazon Elastic Compute Cloud (Amazon EC2) o istanze locali, funzioni AWS Lambda o servizi Amazon Elastic Container Service (Amazon ECS).
AWS ti CodePipeline 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.
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
Strumenti aggiuntivi
Git è un sistema di controllo delle versioni distribuito e open source che funziona con il CodeCommit repository AWS.
Docker è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container. Questo modello utilizza Docker per creare e testare le immagini dei container localmente.
cfn-lint e cfn-nag sono strumenti open source che ti aiutano a esaminare CloudFormation gli stack per eventuali errori e problemi di sicurezza.
##In work location
git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
AWS DevOps
Package delle risorse di Cloudformation.
In questo passaggio, impacchetterai gli artefatti locali a cui i CloudFormation modelli fanno riferimento per creare le risorse di infrastruttura necessarie per servizi come Amazon Virtual Private Cloud (Amazon VPC) e Application Load Balancer.
I modelli sono disponibili nella Infra cartella del repository del codice.
##In work location
git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
AWS DevOps
Package delle risorse di Cloudformation.
In questo passaggio, impacchetterai gli artefatti locali a cui i CloudFormation modelli fanno riferimento per creare le risorse di infrastruttura necessarie per servizi come Amazon Virtual Private Cloud (Amazon VPC) e Application Load Balancer.
I modelli sono disponibili nella Infra cartella del repository del codice.
Invia un'immagine di esempio al repository Amazon ECR.
Invia un'immagine di esempio (NGINX) al repository Amazon Elastic Container Registry (Amazon ECR) web denominato (come impostato nei parametri). Puoi personalizzare l'immagine in base alle tue esigenze.
Per accedere e impostare le credenziali per inviare un'immagine ad Amazon ECR, segui le istruzioni nella documentazione di Amazon ECR.
dove Poc-Service si riferisce alla tua applicazione di esempio.
Verifica che i servizi siano accessibili da Application Load Balancer utilizzando un nome di dominio completo (FQDN) o DNS da un browser o utilizzando il comando curl.
AWS DevOps
Invia un'immagine di esempio e ridimensiona Amazon ECS
Attività
Descrizione
Competenze richieste
Invia un'immagine di esempio al repository Amazon ECR.
Invia un'immagine di esempio (NGINX) al repository Amazon Elastic Container Registry (Amazon ECR) web denominato (come impostato nei parametri). Puoi personalizzare l'immagine in base alle tue esigenze.
Per accedere e impostare le credenziali per inviare un'immagine ad Amazon ECR, segui le istruzioni nella documentazione di Amazon ECR.
dove Poc-Service si riferisce alla tua applicazione di esempio.
Verifica che i servizi siano accessibili da Application Load Balancer utilizzando un nome di dominio completo (FQDN) o DNS da un browser o utilizzando il comando curl.
AWS DevOps
Attività
Descrizione
Competenze richieste
Crea un CodeCommit repository nell'account degli strumenti.
Crea un CodeCommit repository nell'account degli strumenti utilizzando il codecommit.yaml modello, che si trova nella code cartella del GitHub repository. È necessario creare questo repository solo nella singola regione in cui si prevede di sviluppare il codice.
Crea un bucket S3 per gestire gli artefatti generati da. CodePipeline
Crea un bucket S3 per gestire gli artefatti generati CodePipeline utilizzando il pre-reqs-bucket.yaml modello, che si trova nella cartella del repository. code GitHub Gli stack devono essere distribuiti in tutti e tre gli account e le regioni per carichi di lavoro (test) e strumenti.
Crea una chiave KMS multiregionale con chiavi primarie e di replica che utilizzerai. CodePipeline Nel nostro esempio, ToolsAccount1region - ap-south-1 sarà la regione principale.
Imposta le variabili CMKARN da passare ai CodeBuild progetti. I valori sono disponibili nell'output dello stack di modelli ecs-codepipeline-pre-reqs -KMS (l'ID della chiave sarà lo stesso in tutte le regioni e inizia con). mrk- In alternativa, puoi ottenere i valori CMKARN dall'account degli strumenti. Esportali in tutte le sessioni dell'account:
Configura il CodeBuild progetto nell'account degli strumenti.
Utilizza il codebuild_IAM.yaml modello dalla code cartella del GitHub repository per configurare AWS Identity and Access Management (IAM) per AWS CodeBuild in una singola regione nell'account degli strumenti:
Configurazione CodeDeploy negli account di carico di lavoro.
Utilizza il codedeploy.yaml modello nella code cartella del GitHub repository per eseguire la configurazione CodeDeploy in tutti e tre gli account di carico di lavoro. L'output di mainInfraStack include Amazon Resource Names (ARNs) del cluster Amazon ECS e il listener Application Load Balancer.
Nota
I valori degli stack di infrastruttura vengono già esportati, quindi vengono importati dai modelli di stack. CodeDeploy
Crea un CodeCommit repository nell'account degli strumenti.
Crea un CodeCommit repository nell'account degli strumenti utilizzando il codecommit.yaml modello, che si trova nella code cartella del GitHub repository. È necessario creare questo repository solo nella singola regione in cui si prevede di sviluppare il codice.
Crea un bucket S3 per gestire gli artefatti generati da. CodePipeline
Crea un bucket S3 per gestire gli artefatti generati CodePipeline utilizzando il pre-reqs-bucket.yaml modello, che si trova nella cartella del repository. code GitHub Gli stack devono essere distribuiti in tutti e tre gli account e le regioni per carichi di lavoro (test) e strumenti.
Crea una chiave KMS multiregionale con chiavi primarie e di replica che utilizzerai. CodePipeline Nel nostro esempio, ToolsAccount1region - ap-south-1 sarà la regione principale.
Imposta le variabili CMKARN da passare ai CodeBuild progetti. I valori sono disponibili nell'output dello stack di modelli ecs-codepipeline-pre-reqs -KMS (l'ID della chiave sarà lo stesso in tutte le regioni e inizia con). mrk- In alternativa, puoi ottenere i valori CMKARN dall'account degli strumenti. Esportali in tutte le sessioni dell'account:
Configura il CodeBuild progetto nell'account degli strumenti.
Utilizza il codebuild_IAM.yaml modello dalla code cartella del GitHub repository per configurare AWS Identity and Access Management (IAM) per AWS CodeBuild in una singola regione nell'account degli strumenti:
Configurazione CodeDeploy negli account di carico di lavoro.
Utilizza il codedeploy.yaml modello nella code cartella del GitHub repository per eseguire la configurazione CodeDeploy in tutti e tre gli account di carico di lavoro. L'output di mainInfraStack include Amazon Resource Names (ARNs) del cluster Amazon ECS e il listener Application Load Balancer.
Nota
I valori degli stack di infrastruttura vengono già esportati, quindi vengono importati dai modelli di stack. CodeDeploy
Clona il CodeCommit repository che è stato creato nel codecommitrepoStack by utilizzando il git clone comando, come descritto nella documentazione di CodeCommit AWS.
Aggiorna gli artefatti di input con i dettagli richiesti:
File JSON: aggiorna il file AccountID in tre punti di questo file. Rinomina i tre file per includere l'account. IDs
File YAML: aggiorna l'ARN e la versione della definizione dell'attività. Rinomina i tre file per includere l'account. IDs
Modifica il index.html file per apportare alcune modifiche minori alla home page.
Copia i seguenti file nel repository ed esegui il commit:
Avvia o riavvia la pipeline e verifica i risultati.
Accedi al servizio dall'Application Load Balancer utilizzando un FQDN o DNS e verifica che gli aggiornamenti siano stati distribuiti.
Chiama e testa la pipeline
Attività
Descrizione
Competenze richieste
Invia le modifiche al CodeCommit repository.
Clona il CodeCommit repository che è stato creato nel codecommitrepoStack by utilizzando il git clone comando, come descritto nella documentazione di CodeCommit AWS.
Aggiorna gli artefatti di input con i dettagli richiesti:
File JSON: aggiorna il file AccountID in tre punti di questo file. Rinomina i tre file per includere l'account. IDs
File YAML: aggiorna l'ARN e la versione della definizione dell'attività. Rinomina i tre file per includere l'account. IDs
Modifica il index.html file per apportare alcune modifiche minori alla home page.
Copia i seguenti file nel repository ed esegui il commit:
Elimina gli CloudFormation stack in ogni account e regione:
##In Tools Account##
aws cloudformation delete-stack --stack-name ecscodepipelinestack --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT1REGION
aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT2REGION
aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT3REGION
aws cloudformation delete-stack --stack-name ecs-codepipeline-pre-reqs-KMS --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name codecommitrepoStack --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT1REGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT2REGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT3REGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name ecs-codebuild-iam --region $TOOLSACCOUNTREGION
##NOTE: Artifact buckets will not get deleted if there are artifacts so it has to be emptied manually before deleting.##
##In Workload / Test Accounts####Account:1##
aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT1REGION
aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT1REGION
##Account:2##
aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT2REGION
aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT2REGION
##Account:3##
aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT3REGION
aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT3REGION
##NOTE: Amazon ECR (web) will not get deleted if the registry still includes images. It can be manually cleaned up if not required.
Risoluzione dei problemi
Problema
Soluzione
Le modifiche che hai eseguito nel repository non vengono distribuite.
Controlla la presenza di errori nei CodeBuild log nell'azione di compilazione di Docker. Per ulteriori informazioni, consulta la documentazione relativa ad CodeBuild .
Controlla la CodeDeploy distribuzione per eventuali problemi di distribuzione di Amazon ECS.