

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 blue/green distribuzioni di microservizi su più account e regioni utilizzando i servizi di codice AWS e le chiavi multiregionali AWS KMS
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu e Anand Krishna Varanasi, Amazon Web Services*

## Riepilogo
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Questo modello descrive come distribuire un'applicazione globale di microservizi da un account AWS centrale a più account di carico di lavoro e regioni in base a una blue/green strategia di distribuzione. 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 blue/green distribuzione dei microservizi viene implementata utilizzando AWS CodeDeploy.

## Prerequisiti e limitazioni
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**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 `S3BUCKETNAMETESTACCOUNT1` `S3BUCKETNAMETESTACCOUNT2 ` 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 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws 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.

## Architecture
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Stack tecnologico Target**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Architettura Target**

![\[Architettura target per la distribuzione di microservizi su più account e regioni\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Automazione e scalabilità**

La configurazione è automatizzata utilizzando i modelli di CloudFormation stack AWS (IaC). Può essere facilmente scalato per più ambienti e account.

## Tools (Strumenti)
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Servizi AWS**
+ [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) è 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](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 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](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 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 Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

**Strumenti aggiuntivi**
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito e open source che funziona con il CodeCommit repository AWS.
+ [Docker](https://www.docker.com/) è 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](https://github.com/aws-cloudformation/cfn-lint) e [cfn-nag](https://github.com/stelligent/cfn_nag) sono strumenti open source che ti aiutano a esaminare CloudFormation gli stack per eventuali errori e problemi di sicurezza.

**Archivio di codici**

Il codice per questo modello è disponibile nell'archivio GitHub [Global Blue/Green deployments in multiple region and accounts](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Epiche
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

### Impostazione delle variabili di ambiente
<a name="set-up-environment-variables"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Esporta le variabili di ambiente per la distribuzione CloudFormation in stack. | Definisci le variabili di ambiente che verranno utilizzate come input per gli CloudFormation stack più avanti in questo schema.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package e distribuzione degli CloudFormation stack per l'infrastruttura
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clonare il repository. | Clona il [repository di esempio](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) in un nuovo repository nella tua sede di lavoro:<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | 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.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Convalida i modelli di pacchetto. | Convalida i modelli di pacchetto:<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Distribuisci i file del pacchetto negli account dei carichi di lavoro, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Invia un'immagine di esempio e ridimensiona Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Operazione | Description | 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 come richiesto.Per accedere e impostare le credenziali per inviare un'immagine ad Amazon ECR, segui le istruzioni nella documentazione di [Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) ECR.I comandi sono:<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Ridimensiona Amazon ECS e verifica l'accesso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Configura servizi e risorse di codice
<a name="set-up-code-services-and-resources"></a>


| Operazione | Description | 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.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| 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.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Configura una chiave KMS multiregionale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Configura il CodeBuild progetto nell'account degli strumenti. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| 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.I valori degli stack di infrastruttura vengono già esportati, quindi vengono importati dai modelli di stack. CodeDeploy <pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Configura CodePipeline nell'account degli strumenti
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una pipeline di codice nell'account degli strumenti. | Nell'account degli strumenti, esegui il comando:<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Fornisci accesso CodePipeline e CodeBuild ruoli nella policy chiave di AWS KMS e nella policy del bucket S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Chiama e testa la pipeline
<a name="call-and-test-the-pipeline"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Invia le modifiche al CodeCommit repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Pulisci tutte le risorse distribuite. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Risoluzione dei problemi
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Le modifiche che hai eseguito nel repository non vengono distribuite. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Risorse correlate
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Inviare un'immagine Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentazione Amazon ECR)
+ [Connect a un CodeCommit repository AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) ( CodeCommit documentazione AWS)
+ [Risoluzione dei problemi AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) ( CodeBuild documentazione AWS)