

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à.

# CodeDeploy implementazioni blu/verdi per Amazon ECS
<a name="deployment-type-bluegreen"></a>

Ti consigliamo di utilizzare la blue/green distribuzione Amazon ECS. Per ulteriori informazioni, consulta [Creazione di una distribuzione Amazon ECS blue/green](deploy-blue-green-service.md).

Il tipo di distribuzione *blu/verde* utilizza il modello di blue/green distribuzione controllato da. CodeDeploy Utilizza questo tipo di implementazione per verificare una nuova implementazione di un servizio prima di inviarvi traffico di produzione. Per ulteriori informazioni, consulta [Cosa c'è CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) nella *guida per l'AWS CodeDeploy utente*. Convalida lo stato di un servizio Amazon ECS prima della distribuzione

Esistono tre modi in cui il traffico può variare durante una distribuzione: blue/green 
+ **Canary:** il traffico viene trasferito in due incrementi. Puoi scegliere tra opzioni canary predefinite che specificano la percentuale del traffico reinstradato al set di attività aggiornato nel primo incremento e l'intervallo, in minuti, prima che il traffico rimanente venga reinstradato nel secondo incremento.
+ **Lineare**: il traffico viene spostato in incrementi uguali con lo stesso intervallo di tempo, in minuti, tra ciascun incremento. Puoi scegliere tra opzioni lineari predefinite che specificano la percentuale del traffico reinstradato in ogni incremento e l'intervallo di tempo, in minuti, tra ciascun incremento.
+ **R ll-at-once** — Tutto il traffico viene spostato contemporaneamente dal set di attività originale al set di attività aggiornato.

Di seguito sono riportati CodeDeploy i componenti utilizzati da Amazon ECS quando un servizio utilizza il tipo di blue/green distribuzione:

**CodeDeploy applicazione**  
Una raccolta di CodeDeploy risorse. È costituita da uno o più gruppi di implementazione.

**CodeDeploy gruppo di distribuzione**  
Le impostazioni di implementazione. Comprendono:  
+ Cluster e servizio Amazon ECS
+ Informazioni listener e gruppo di destinazione del bilanciatore del carico
+ Strategia di rollback dell’implementazione
+ Impostazioni di reinstradamento del traffico
+ Impostazioni di terminazione della revisione originale
+ Configurazione dell’implementazione
+ CloudWatch configurazione degli allarmi che può essere impostata per interrompere le distribuzioni
+ Impostazioni SNS o CloudWatch Events per le notifiche
Per ulteriori informazioni, consultare [Working with Deployment Groups](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html) nella *Guida per l'utente di AWS CodeDeploy *.

**CodeDeploy configurazione della distribuzione**  
Speciifica in che modo CodeDeploy indirizza il traffico di produzione verso l'attività sostitutiva impostata durante una distribuzione. Sono disponibili le seguenti configurazioni predefinite di implementazione lineare e canary. È inoltre possibile creare implementazioni lineari e canary personalizzate. Per ulteriori informazioni, consultare [Working with Deployment Configurations](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) nella *Guida per l'utente di AWS CodeDeploy *.  
+ **CodeDeployDefault. ECSAllAtOnce**: sposta tutto il traffico verso il container Amazon ECS aggiornato contemporaneamente
+ **CodeDeployDefault. ECSLinear10PercentEvery1Minuti**: Sposta il 10% del traffico ogni minuto fino a quando tutto il traffico non viene spostato.
+ **CodeDeployDefault. ECSLinear10PercentEvery3 minuti**: sposta il 10 percento del traffico ogni 3 minuti fino a quando tutto il traffico non viene spostato.
+ **CodeDeployDefault. ECSCanary10Percent5Minutes**: sposta il 10% del traffico nel primo incremento. Il restante 90% viene reinstradato cinque minuti più tardi.
+ **CodeDeployDefault. ECSCanary10Percent15Minutes**: sposta il 10% del traffico nel primo incremento. Il restante 90% viene distribuito 15 minuti dopo.

**Revisione**  
Una revisione è il file delle specifiche CodeDeploy dell'applicazione (AppSpec file). Nel AppSpec file, si specifica l'ARN completo della definizione dell'attività e il contenitore e la porta del set di attività sostitutivo in cui il traffico deve essere instradato quando viene creata una nuova distribuzione. Il nome del container deve essere uno dei nomi di container cui si fa riferimento nella definizione delle attività. Se la configurazione di rete o la versione della piattaforma è stata aggiornata nella definizione del servizio, è necessario specificare anche tali dettagli nel AppSpec file. Puoi inoltre specificare le funzioni Lambda da eseguire durante gli eventi del ciclo di vita dell'implementazione. Le funzioni Lambda consentono di eseguire i test e restituire i parametri durante l'implementazione. Per ulteriori informazioni, consulta [AppSpec File Reference](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html) nella *Guida AWS CodeDeploy per l'utente*.

## Considerazioni
<a name="deployment-type-bluegreen-considerations"></a>

Quando utilizzi il tipo di blue/green distribuzione, considera quanto segue:
+ Quando viene inizialmente creato un servizio Amazon ECS che utilizza il tipo di blue/green distribuzione, viene creato un set di attività Amazon ECS.
+ Il servizio deve essere configurato per utilizzare un sistema Application Load Balancer o un Network Load Balancer. Di seguito sono elencati i requisiti del load balancer:
  + È necessario aggiungere al load balancer un listener di produzione che viene utilizzato per instradare il traffico di produzione.
  + Al load balancer può essere aggiunto un test opzionale che viene utilizzato per instradare il traffico di test. Se specifichi un listener di test, CodeDeploy indirizza il traffico di test verso l'attività sostitutiva impostata durante una distribuzione.
  + I listener di produzione e di test devono appartenere entrambi allo stesso load balancer.
  + È necessario definire un gruppo di destinazione per il bilanciatore del carico. Il gruppo di destinazione instrada il traffico verso l'attività originale impostata in un servizio attraverso il listener di produzione.
  + Quando viene utilizzato un Network Load Balancer, è supportata solo la configurazione dell'implementazione `CodeDeployDefault.ECSAllAtOnce`.
+ Per i servizi configurati per utilizzare la scalabilità automatica del servizio e il tipo di implementazione blu/verde, la scalabilità automatica non viene bloccata durante un'implementazione, ma l'implementazione potrebbe non riuscire in alcune circostanze. Di seguito viene descritto questo comportamento in modo più dettagliato.
  + Se un servizio è scalabile e viene avviata una distribuzione, viene creato il set di attività verde e CodeDeploy aspetterà fino a un'ora prima che il set di attività verde raggiunga lo stato stazionario e non sposterà il traffico finché non lo farà.
  + Se un servizio è in fase di blue/green implementazione e si verifica un evento di scalabilità, il traffico continuerà a variare per 5 minuti. Se il servizio non raggiunge lo stato stazionario entro 5 minuti, CodeDeploy interromperà la distribuzione e la contrassegnerà come fallita.
+ Le attività che utilizzano Fargate oppure i tipi di controller di implementazione `CODE_DEPLOY` non supportano la strategia di pianificazione `DAEMON`.
+ Quando si crea inizialmente un' CodeDeploy applicazione e un gruppo di distribuzione, è necessario specificare quanto segue:
  + È necessario definire due gruppi di destinazione per il bilanciatore del carico. Un gruppo di destinazione deve essere il gruppo di destinazione iniziale definito per il bilanciatore del carico quando il servizio Amazon ECS è stato creato. L'unico requisito del secondo gruppo di destinazione è che non può essere associato a un bilanciatore del carico diverso rispetto a quello utilizzato dal servizio.
+ Quando crei una CodeDeploy distribuzione per un servizio Amazon ECS, CodeDeploy crea un *set di attività sostitutivo* (o *set di attività verde*) nella distribuzione. Se hai aggiunto un listener di test al load balancer, CodeDeploy indirizza il traffico di test verso il set di attività sostitutivo. Questo è il momento in cui è possibile eseguire i test di convalida. Quindi CodeDeploy reindirizza il traffico di produzione dal set di attività originale al set di attività di sostituzione in base alle impostazioni di reinstradamento del traffico per il gruppo di distribuzione.

## Autorizzazioni IAM richieste
<a name="deployment-type-bluegreen-IAM"></a>

Blue/green deployments are made possible by a combination of the Amazon ECS and CodeDeploy APIs. Users must have the appropriate permissions for these services before they can use Amazon ECS blue/greendistribuzioni in o con Console di gestione AWS o. AWS CLI SDKs 

Oltre alle autorizzazioni IAM standard per la creazione e l'aggiornamento dei servizi, Amazon ECS richiede le seguenti autorizzazioni. Queste autorizzazioni sono state aggiunte alla policy IAM `AmazonECS_FullAccess`. Per ulteriori informazioni, consultare [AmazonECS\$1 FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess).
+ `codedeploy:CreateApplication`
+ `codedeploy:CreateDeployment`
+ `codedeploy:CreateDeploymentGroup`
+ `codedeploy:GetApplication`
+ `codedeploy:GetDeployment`
+ `codedeploy:GetDeploymentGroup`
+ `codedeploy:ListApplications`
+ `codedeploy:ListDeploymentGroups`
+ `codedeploy:ListDeployments`
+ `codedeploy:StopDeployment`
+ `codedeploy:GetDeploymentTarget`
+ `codedeploy:ListDeploymentTargets`
+ `codedeploy:GetDeploymentConfig`
+ `codedeploy:GetApplicationRevision`
+ `codedeploy:RegisterApplicationRevision`
+ `codedeploy:BatchGetApplicationRevisions`
+ `codedeploy:BatchGetDeploymentGroups`
+ `codedeploy:BatchGetDeployments`
+ `codedeploy:BatchGetApplications`
+ `codedeploy:ListApplicationRevisions`
+ `codedeploy:ListDeploymentConfigs`
+ `codedeploy:ContinueDeployment`
+ `sns:ListTopics`
+ `cloudwatch:DescribeAlarms`
+ `lambda:ListFunctions`

**Nota**  
Oltre alle autorizzazioni Amazon ECS standard necessarie per eseguire processi e servizi, gli utenti hanno bisogno anche delle autorizzazioni `iam:PassRole` per utilizzare i ruoli IAM per le attività.

CodeDeploy necessita delle autorizzazioni per chiamare Amazon ECS APIs, modificare Elastic Load Balancing, richiamare le funzioni Lambda e CloudWatch descrivere gli allarmi, oltre alle autorizzazioni per modificare il conteggio desiderato del servizio per tuo conto. Prima di creare un servizio Amazon ECS che utilizza il tipo di blue/green implementazione, devi creare un ruolo IAM (`ecsCodeDeployRole`). Per ulteriori informazioni, consulta [Ruolo CodeDeploy IAM di Amazon ECS](codedeploy_IAM_role.md).

# Migra CodeDeploy blue/green deployments to Amazon ECS blue/green le distribuzioni
<a name="migrate-codedeploy-to-ecs-bluegreen"></a>

CodeDeploy blue/green and Amazon ECS blue/greenle distribuzioni offrono funzionalità simili, ma differiscono nel modo in cui vengono configurate e gestite.

## CodeDeploy panoramica sulla distribuzione in blu e verde
<a name="codedeploy-bluegreen-overview"></a>

Quando crei un servizio Amazon ECS utilizzando CodeDeploy, tu:

1. Creare un bilanciatore del carico con un listener di produzione e (facoltativamente) uno di test. Ogni listener è configurato con un'unica regola (predefinita) che instrada tutto il traffico verso un singolo gruppo di destinazione (il gruppo di destinazione principale).

1. Creare un servizio Amazon ECS, configurato per utilizzare il listener e il gruppo di destinazione, con il tipo `deploymentController` impostato su `CODE_DEPLOY`. La creazione del servizio comporta la creazione di una serie di attività (blu) registrate con il gruppo di destinazione specificato.

1. Crea un gruppo di CodeDeploy distribuzione (come parte di un' CodeDeploy applicazione) e configuralo con i dettagli del cluster Amazon ECS, il nome del servizio, i listener di load balancer, due gruppi target (il gruppo target principale utilizzato nella regola del listener di produzione e un gruppo target secondario da utilizzare per le attività di sostituzione), un ruolo di servizio (per concedere le CodeDeploy autorizzazioni per manipolare le risorse Amazon ECS ed Elastic Load Balancing) e vari parametri che controllano il comportamento di distribuzione.

Con CodeDeploy, le nuove versioni di un servizio vengono distribuite utilizzando`CreateDeployment()`, specificando il nome CodeDeploy dell'applicazione, il nome del gruppo di distribuzione e un AppSpec file che fornisce dettagli sulla nuova revisione e sugli hook opzionali del ciclo di vita. La CodeDeploy distribuzione crea un set di attività sostitutivo (verde) e ne registra le attività con il gruppo target secondario. Quando diventa integra, è disponibile per i test (facoltativo) e per la produzione. In entrambi i casi, il re-instradamento si ottiene modificando la rispettiva regola del listener in modo tale che punti al gruppo di destinazione secondario associato alla serie di attività verde. Il rollback si ottiene modificando la regola del listener di produzione riportandola al gruppo di destinazione primario.

## Panoramica della blue/green distribuzione di Amazon ECS
<a name="ecs-bluegreen-overview"></a>

Con le blue/green distribuzioni di Amazon ECS, la configurazione di distribuzione fa parte del servizio Amazon ECS stesso:

1. È necessario preconfigurare il listener di produzione del bilanciatore del carico con una regola che includa due gruppi di destinazione con pesi pari a 1 e 0.

1. È necessario specificare le seguenti risorse o aggiornare quelle del servizio: 
   + L'ARN di questa regola del listener 
   + I due gruppi di destinazione
   + Un ruolo IAM per concedere ad Amazon ECS l'autorizzazione a chiamare Elastic Load Balancing APIs
   + Un ruolo IAM facoltativo per eseguire le funzioni Lambda
   + Impostare il tipo `deploymentController` su `ECS` e `deploymentConfiguration.strategy` su `BLUE_GREEN`. Ciò si traduce nella creazione di un'implementazione del servizio (blu) le cui attività sono registrate nel gruppo di destinazione primario.

Con Amazon ECS blu/verde, viene creata una nuova revisione del servizio chiamando Amazon ECS `UpdateService()`, trasmettendo i dettagli della nuova revisione. L'implementazione del servizio crea nuove attività di revisione del servizio (verde) e le registra con il gruppo di destinazione secondario. Amazon ECS gestisce le operazioni di re-instradamento e rollback modificando i pesi sulla regola del listener.

## Differenze di implementazione principali
<a name="implementation-differences"></a>

Sebbene entrambi gli approcci comportino la creazione di una serie iniziale di attività, l'implementazione sottostante è diversa:
+ CodeDeploy utilizza un set di attività, mentre Amazon ECS utilizza una revisione del servizio. I set di attività di Amazon ECS sono un costrutto precedente sostituito dalle revisioni e dalle implementazioni dei servizi Amazon ECS. Queste offrono una maggiore visibilità sul processo di implementazione, nonché sulla cronologia di implementazione e revisione del servizio.
+ Con CodeDeploy, gli hook del ciclo di vita vengono specificati come parte del AppSpec file a cui viene fornito. `CreateDeployment()` Ciò significa che gli hook possono essere modificati da un'implementazione all'altra. Con Amazon ECS blu/verde, gli hook sono specificati come parte della configurazione del servizio e qualsiasi aggiornamento richiederebbe una chiamata `UpdateService()`.
+  CodeDeploy Sia Amazon ECS che Amazon ECS blue/green utilizzano Lambda per l'implementazione degli hook, ma gli input e gli output previsti sono diversi.

  Con CodeDeploy, la funzione deve effettuare una chiamata `PutLifecycleEventHookExecutionStatus()` per restituire lo stato dell'hook, che può essere o. `SUCCEEDED` `FAILED` Con Amazon ECS, la risposta di Lambda viene utilizzata per indicare lo stato dell'hook.
+ CodeDeploy richiama ogni hook come chiamata una tantum e prevede la restituzione dello stato di esecuzione finale entro un'ora. Gli hook di Amazon ECS sono più flessibili in quanto possono restituire un indicatore `IN_PROGRESS`, che segnala che l'hook deve essere invocato ripetutamente fino a quando non determina un `SUCCEEDED` o `FAILED`. Per ulteriori informazioni, consultare [Hook del ciclo di vita per le implementazioni di servizi Amazon ECS](deployment-lifecycle-hooks.md).

## Approcci per la migrazione
<a name="migration-paths"></a>

Esistono tre approcci principali alla migrazione dalle distribuzioni. CodeDeploy blue/green to Amazon ECS blue/green Ogni approccio dispone di caratteristiche diverse in termini di complessità, rischio, capacità di rollback e potenziale tempo di inattività.

### Riutilizza le stesse risorse Elastic Load Balancing utilizzate per CodeDeploy
<a name="inplace-update"></a>

Aggiorna il servizio Amazon ECS esistente per utilizzare il controller di distribuzione Amazon ECS con strategia di blue/green distribuzione anziché il controller di CodeDeploy distribuzione. Quando si adotta questo approccio, considerare quanto segue:
+ La procedura di migrazione è più semplice perché si sta aggiornando il controller di implementazione del servizio Amazon ECS e la strategia di implementazione esistenti.
+ Non è previsto un tempo di inattività con una configurazione e una migrazione corrette.
+ Un rollback richiede l'annullamento della revisione del servizio.
+ Il rischio è elevato perché non esiste una configurazione blu/verde parallela.

Utilizzi lo stesso listener di load balancer e gli stessi gruppi target utilizzati per. CodeDeploy Se lo stai usando CloudFormation, vedi. [Migrazione di un modello CloudFormation CodeDeploy blue/green deployment template to an Amazon ECS blue/green CloudFormation](migrate-codedeploy-to-ecs-bluegreen-cloudformation-template.md)

1. Modifica la regola predefinita degli production/test ascoltatori per includere il gruppo target alternativo e imposta il peso del gruppo target primario su 1 e del gruppo target alternativo su 0.

   Infatti CodeDeploy, i listener del load balancer collegato al servizio sono configurati con un'unica regola (predefinita) che indirizza tutto il traffico verso un singolo gruppo di destinazione. Per Amazon ECS blu/verde, i listener del bilanciatore del carico devono essere preconfigurati con una regola che includa i due gruppi di destinazione con pesi. Il gruppo di destinazione principale deve essere ponderato a 1 e il gruppo di destinazione alternativo deve essere ponderato a 0.

1. Aggiornare il servizio Amazon ECS esistente chiamando l'API `UpdateService` e impostando il parametro `deploymentController` su `ECS` e il parametro `deploymentStrategy` su `BLUE_GREEN`. Specificate il ARNs gruppo target, il gruppo target alternativo, il listener di produzione e un listener di test opzionale.

1. Verificare che il servizio funzioni come previsto.

1. Elimina la CodeDeploy configurazione per questo servizio Amazon ECS poiché ora utilizzi Amazon ECS blu/verde.

### Nuovo servizio con il bilanciatore del carico esistente
<a name="new-service-existing-lb"></a>

Questo approccio utilizza la blue/green strategia per la migrazione. 

Quando si adotta questo approccio, considerare quanto segue:
+ Le interruzioni sono minime. Si verificano solo durante lo scambio di porte per il bilanciamento del carico elastico.
+ Un rollback richiede il ripristino dello swap della porta per il bilanciamento del carico elastico.
+ Il rischio è basso perché vi sono configurazioni parallele. Pertanto è possibile eseguire il test prima dello spostamento del traffico.

1. Lascia intatti gli ascoltatori, i gruppi target e il servizio Amazon ECS per la CodeDeploy configurazione in modo da poter tornare facilmente a questa configurazione, se necessario.

1. Creare nuovi gruppi di destinazione e nuovi listener (con porte diverse dai listener originali) utilizzando il bilanciatore del carico esistente. Quindi, crea un nuovo servizio Amazon ECS che corrisponda al servizio Amazon ECS esistente, tranne che lo usi `ECS` come controller di distribuzione, `BLUE_GREEN` come strategia di distribuzione e trasferisci le regole ARNs per i nuovi gruppi target e i nuovi ascoltatori.

1. Verificare la nuova configurazione inviando manualmente il traffico HTTP al servizio. Se tutto va bene, scambiare le porte dei listener originali con quelle dei nuovi listener per instradare il traffico verso la nuova configurazione.

1. Verifica la nuova configurazione e, se tutto continua a funzionare come previsto, elimina la configurazione. CodeDeploy 

### Nuovo servizio con un nuovo bilanciatore del carico
<a name="new-service-new-lb"></a>

Come l'approccio precedente, questo approccio utilizza la blue/green strategia per la migrazione. La differenza fondamentale è che il passaggio dalla CodeDeploy configurazione alla configurazione di Amazon ECS blue/green avviene a un livello di proxy inverso sopra il load balancer. Le implementazioni di esempio per il livello di reverse proxy sono Route 53 e. CloudFront

Questo approccio è adatto ai clienti che dispongono già di questo livello di proxy inverso e se tutte le comunicazioni con il servizio avvengono attraverso di esso (ad esempio, nessuna comunicazione diretta a livello di bilanciatore del carico).

Quando si adotta questo approccio, considerare quanto segue:
+ Ciò richiede un livello di proxy inverso.
+ La procedura di migrazione è più complessa perché è necessario aggiornare il controller di implementazione del servizio Amazon ECS e la strategia di implementazione esistenti.
+ Le interruzioni sono minime. Si verificano solo durante lo scambio di porte per il bilanciamento del carico elastico.
+ Un rollback richiede l'annullamento delle modifiche alla configurazione del proxy.
+ Il rischio è basso perché vi sono configurazioni parallele. Pertanto è possibile eseguire il test prima dello spostamento del traffico.

1. Non modificare intatta la CodeDeploy configurazione esistente (load balancer, listener, gruppi target, servizio Amazon ECS e CodeDeploy gruppo di distribuzione).

1. Crea un nuovo sistema di bilanciamento del carico, gruppi target e listener configurati per le distribuzioni di Amazon ECS blue/green .

   Configurare le risorse appropriate.
   + Application Load Balancer: per ulteriori informazioni, consultare [Risorse Application Load Balancer per implementazioni blu/green, lineari e canary](alb-resources-for-blue-green.md).
   + Network Load Balancer: per ulteriori informazioni, consultare [Risorse Network Load Balancer per distribuzioni di Amazon ECS blu/verde, lineare e canary](nlb-resources-for-blue-green.md).

1. Creare un nuovo servizio con `ECS` come controller di implementazione e `BLUE_GREEN` come strategia di implementazione, puntando alle nuove risorse del bilanciatore del carico.

1. Verificare la nuova configurazione testandola tramite il nuovo bilanciatore del carico.

1. Aggiornare la configurazione del proxy inverso per instradare il traffico verso il nuovo bilanciatore del carico.

1. Osserva la nuova revisione del servizio e, se tutto continua a funzionare come previsto, elimina la configurazione. CodeDeploy 

## Fasi successive
<a name="post-migration-considerations"></a>

Dopo la migrazione alle distribuzioni di Amazon ECS: blue/green 
+ Aggiorna gli script e le CI/CD pipeline di distribuzione per utilizzare l'API Amazon ECS anziché `UpdateService` l'API. CodeDeploy `CreateDeployment`
+ Aggiorna il monitoraggio e gli avvisi per tenere traccia delle distribuzioni dei servizi Amazon ECS anziché delle distribuzioni. CodeDeploy 
+ Considerare l'implementazione di test automatici del nuovo processo di implementazione per garantirne il funzionamento previsto.

# Migrazione da una distribuzione di servizi CodeDeploy blue/green to an Amazon ECS blue/green
<a name="migrate-code-deploy-to-ecs-blue-green"></a>

 Utilizzando le blue/green distribuzioni di Amazon ECS, puoi apportare e testare modifiche ai servizi prima di implementarle in un ambiente di produzione. 

È necessario creare nuovi hook del ciclo di vita per la distribuzione di Amazon ECS. blue/green 

## Prerequisiti
<a name="migrate-code-deploy-to-ecs-blue-green-prerequisites"></a>

Esegui le seguenti operazioni prima di iniziare una distribuzione. blue/green 

1. Sostituisci il ruolo Amazon ECS CodeDeploy IAM con le seguenti autorizzazioni.
   + Per informazioni sulle autorizzazioni di bilanciamento del carico elastico, consultare [Ruolo IAM dell'infrastruttura Amazon ECS per i bilanciatori del carico](AmazonECSInfrastructureRolePolicyForLoadBalancers.md).
   + Per informazioni sulle autorizzazioni Lambda, consultare [Autorizzazioni richieste per le funzioni Lambda nelle distribuzioni Amazon ECS blue/green](blue-green-permissions.md).

1. Disattiva CodeDeploy l'automazione. Per ulteriori informazioni, consulta [Lavorare con i gruppi di distribuzione CodeDeploy nella](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html) *Guida CodeDeploy per l'utente*. 

1. Assicurati di disporre delle seguenti informazioni relative alla CodeDeploy blue/green deployment. You can reuse this information for the Amazon ECS blue/green distribuzione:
   + Il gruppo di destinazione della produzione
   + Il listener di produzione
   + La regola di produzione
   + Il gruppo di destinazione di test

     Questo è il gruppo di destinazione per la revisione del servizio verde.

1. Assicurarsi che i gruppi di destinazione dell'Application Load Balancer siano associati correttamente alle regole del listener:
   + Se non si utilizzano i listener di test, entrambi i gruppi di destinazione (produzione e test) devono essere associati alle regole dei listener di produzione.
   + Se si utilizzano i listener di test, un gruppo di destinazione deve essere collegato alle regole dei listener di produzione e l'altro gruppo di destinazione deve essere collegato alle regole dei listener di test.

   Se questo requisito non viene soddisfatto, l'implementazione del servizio avrà esito negativo con il seguente errore: `Service deployment rolled back because of invalid networking configuration. Both targetGroup and alternateTargetGroup must be associated with the productionListenerRule or testListenerRule.`

1. Verificare che non vi siano implementazioni di servizi in corso per il servizio. Per ulteriori informazioni, consulta [Visualizza la cronologia dei servizi utilizzando le distribuzioni dei servizi Amazon ECS](service-deployment.md).

1.  blue/green Le implementazioni di Amazon ECS richiedono che il servizio utilizzi una delle seguenti funzionalità: Configura le risorse appropriate.
   + Application Load Balancer: per ulteriori informazioni, consultare [Risorse Application Load Balancer per implementazioni blu/green, lineari e canary](alb-resources-for-blue-green.md).
   + Network Load Balancer: per ulteriori informazioni, consultare [Risorse Network Load Balancer per distribuzioni di Amazon ECS blu/verde, lineare e canary](nlb-resources-for-blue-green.md).
   + Service Connect: per ulteriori informazioni, consultare [Risorse Service Connect per distribuzioni Amazon ECS blu/green, lineari e canary](service-connect-blue-green.md).

1. Decidi se vuoi eseguire le funzioni Lambda per le fasi del ciclo di vita delle fasi della distribuzione di Amazon ECS. blue/green 
   + Prima dell'aumento verticale
   + Dopo l'aumento verticale
   + Spostamento del traffico di test
   + Dopo lo spostamento del traffico di test
   + Spostamento del traffico di produzione
   + Dopo lo spostamento del traffico di produzione

   Creare funzioni Lambda per ogni fase del ciclo di vita. Per ulteriori informazioni, consultare [Create a Lambda function with the console](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) nella *Guida per gli sviluppatori di AWS Lambda *.

Per ulteriori informazioni sull'aggiornamento di un controller di implementazione del servizio, consultare [Aggiornare i parametri del servizio Amazon ECS](update-service-parameters.md).

## Procedura
<a name="migrate-code-deploy-to-ecs-procedure"></a>

1. [Apri la console nella versione 2. https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/v2)

1. Nella pagina **Cluster**, scegliere il cluster.

   Si apre la pagina dei dettagli del cluster.

1. Dalla scheda **Servizi**, scegliere il servizio.

   Si apre la pagina dei dettagli del servizio.

1. Nel banner, scegliere **Aggiorna tipo di controller di implementazione**.

   Si apre la pagina **Migrare il tipo di controller di implementazione**.

1. Espandere **Nuovo**, quindi specificare i seguenti parametri

   1. Per **Tipo di controller di implementazione**, scegliere **ECS**.

   1. Per **Strategia di implementazione**, scegliere **Blu/verde**.

   1. Per **tempo di incorporamento**, inserire l'ora di esecuzione delle revisioni del servizio blu e verde.

   1. Per eseguire le funzioni Lambda per una fase del ciclo di vita, in **Hook del ciclo di vita di implementazione**, svolgere le seguenti operazioni per ogni funzione Lambda unica:

      1. Scegliere **Aggiungi**.

         Ripetere l'operazione per ogni funzione unica che si desidera eseguire.

      1. Per **Funzione Lambda**, immettere il nome della funzione.

      1. Per **Ruolo**, scegliere il ruolo creato nei prerequisiti con le autorizzazioni blu/verdi.

         Per ulteriori informazioni, consultare [Autorizzazioni richieste per le funzioni Lambda nelle distribuzioni Amazon ECS blue/green](blue-green-permissions.md).

      1. Per **Fasi del ciclo di vita**, selezionare le fasi eseguite dalla funzione Lambda.

      1.  (Facoltativo) Per **Dettagli dell'hook**, inserire una coppia chiave-valore che fornisca informazioni sull'hook.

1. Espandere **Bilanciamento del carico** e configurare quanto segue:

   1. Per **Ruolo**, scegli il ruolo che hai creato nei prerequisiti con le blue/green autorizzazioni.

      Per ulteriori informazioni, consulta [Autorizzazioni richieste per le funzioni Lambda nelle distribuzioni Amazon ECS blue/green](blue-green-permissions.md).

   1. Per **Listener**, scegli il listener di produzione dalla tua distribuzione blu/verde. CodeDeploy 

   1. Per la **regola di produzione**, scegli la regola di produzione dalla tua implementazione blu/verde. CodeDeploy 

   1. Per la **regola di test**, scegli la regola di test dalla tua implementazione CodeDeploy blu/verde.

   1. Per **Target group**, scegli il gruppo target di produzione dalla tua implementazione CodeDeploy blu/verde.

   1. Per **Gruppo target alternativo, scegli il gruppo target** di test dalla tua CodeDeploy implementazione blu/verde.

1. Scegliere **Aggiorna**.

## Fasi successive
<a name="migrate-code-deploy-to-ecs-blue-green-next-steps"></a>
+ Aggiornare il servizio per avviare l'implementazione. Per ulteriori informazioni, consultare [Aggiornamento di un servizio Amazon ECS](update-service-console-v2.md).
+ Monitorare il processo di implementazione per assicurarsi che segua lo schema blu/verde:
  + La revisione del servizio verde viene creata e aumentata verticalmente
  + Il traffico di test viene instradato alla revisione verde (se configurata)
  + Il traffico di produzione viene spostato alla revisione del servizio verde
  + Dopo il tempo di incorporamento, la revisione blu viene interrotta

# Migrazione di un modello CloudFormation CodeDeploy blue/green deployment template to an Amazon ECS blue/green CloudFormation
<a name="migrate-codedeploy-to-ecs-bluegreen-cloudformation-template"></a>

Esegui la migrazione di un CloudFormation modello che utilizza una strategia di distribuzione. CodeDeploy blue/green deployments for Amazon ECS services to one that uses the native Amazon ECS blue/green La migrazione segue l'approccio «Riutilizza le stesse risorse Elastic Load Balancing utilizzate CodeDeploy per». Per ulteriori informazioni, consulta [Migra CodeDeploy blue/green deployments to Amazon ECS blue/green le distribuzioni](migrate-codedeploy-to-ecs-bluegreen.md).

## Modello di origine
<a name="source-template"></a>

Questo modello utilizza `AWS::CodeDeployBlueGreen` transform e `AWS::CodeDeploy::BlueGreen` hook per implementare le blue/green distribuzioni per un servizio Amazon ECS.

### Origine
<a name="code-deploy-source"></a>

Questo è il CloudFormation modello completo che utilizza la distribuzione blu/verde CodeDeploy . *Per ulteriori informazioni, consulta l'[esempio del modello di distribuzione blu/verde](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green-template-example.html#blue-green-template-example.json) nella Guida per l'utente: AWS CloudFormation *

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "Vpc": {
      "Type": "AWS::EC2::VPC::Id"
    },
    "Subnet1": {
      "Type": "AWS::EC2::Subnet::Id"
    },
    "Subnet2": {
      "Type": "AWS::EC2::Subnet::Id"
    }
  },
  "Transform": [
    "AWS::CodeDeployBlueGreen"
  ],
  "Hooks": {
    "CodeDeployBlueGreenHook": {
      "Type": "AWS::CodeDeploy::BlueGreen",
      "Properties": {
        "TrafficRoutingConfig": {
          "Type": "TimeBasedCanary",
          "TimeBasedCanary": {
            "StepPercentage": 15,
            "BakeTimeMins": 5
          }
        },
        "Applications": [
          {
            "Target": {
              "Type": "AWS::ECS::Service",
              "LogicalID": "ECSDemoService"
            },
            "ECSAttributes": {
              "TaskDefinitions": [
                "BlueTaskDefinition",
                "GreenTaskDefinition"
              ],
              "TaskSets": [
                "BlueTaskSet",
                "GreenTaskSet"
              ],
              "TrafficRouting": {
                "ProdTrafficRoute": {
                  "Type": "AWS::ElasticLoadBalancingV2::Listener",
                  "LogicalID": "ALBListenerProdTraffic"
                },
                "TargetGroups": [
                  "ALBTargetGroupBlue",
                  "ALBTargetGroupGreen"
                ]
              }
            }
          }
        ]
      }
    }
  },
  "Resources": {
    "ExampleSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "Security group for ec2 access",
        "VpcId": {"Ref": "Vpc"},
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": 80,
            "ToPort": 80,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 8080,
            "ToPort": 8080,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "ALBTargetGroupBlue": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ALBTargetGroupGreen": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ExampleALB": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Properties": {
        "Scheme": "internet-facing",
        "SecurityGroups": [
          {"Ref": "ExampleSecurityGroup"}
        ],
        "Subnets": [
          {"Ref": "Subnet1"},
          {"Ref": "Subnet2"}
        ],
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "Type": "application",
        "IpAddressType": "ipv4"
      }
    },
    "ALBListenerProdTraffic": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Properties": {
        "DefaultActions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                }
              ]
            }
          }
        ],
        "LoadBalancerArn": {"Ref": "ExampleALB"},
        "Port": 80,
        "Protocol": "HTTP"
      }
    },
    "ALBListenerProdRule": {
      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
      "Properties": {
        "Actions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                }
              ]
            }
          }
        ],
        "Conditions": [
          {
            "Field": "http-header",
            "HttpHeaderConfig": {
              "HttpHeaderName": "User-Agent",
              "Values": [
                "Mozilla"
              ]
            }
          }
        ],
        "ListenerArn": {"Ref": "ALBListenerProdTraffic"},
        "Priority": 1
      }
    },
    "ECSTaskExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "",
              "Effect": "Allow",
              "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
        ]
      }
    },
    "BlueTaskDefinition": {
      "Type": "AWS::ECS::TaskDefinition",
      "Properties": {
        "ExecutionRoleArn": {"Fn::GetAtt": ["ECSTaskExecutionRole", "Arn"]},
        "ContainerDefinitions": [
          {
            "Name": "DemoApp",
            "Image": "nginxdemos/hello:latest",
            "Essential": true,
            "PortMappings": [
              {
                "HostPort": 80,
                "Protocol": "tcp",
                "ContainerPort": 80
              }
            ]
          }
        ],
        "RequiresCompatibilities": [
          "FARGATE"
        ],
        "NetworkMode": "awsvpc",
        "Cpu": "256",
        "Memory": "512",
        "Family": "ecs-demo"
      }
    },
    "ECSDemoCluster": {
      "Type": "AWS::ECS::Cluster",
      "Properties": {}
    },
    "ECSDemoService": {
      "Type": "AWS::ECS::Service",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "DesiredCount": 1,
        "DeploymentController": {
          "Type": "EXTERNAL"
        }
      }
    },
    "BlueTaskSet": {
      "Type": "AWS::ECS::TaskSet",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "LaunchType": "FARGATE",
        "NetworkConfiguration": {
          "AwsVpcConfiguration": {
            "AssignPublicIp": "ENABLED",
            "SecurityGroups": [
              {"Ref": "ExampleSecurityGroup"}
            ],
            "Subnets": [
              {"Ref": "Subnet1"},
              {"Ref": "Subnet2"}
            ]
          }
        },
        "PlatformVersion": "1.4.0",
        "Scale": {
          "Unit": "PERCENT",
          "Value": 100
        },
        "Service": {"Ref": "ECSDemoService"},
        "TaskDefinition": {"Ref": "BlueTaskDefinition"},
        "LoadBalancers": [
          {
            "ContainerName": "DemoApp",
            "ContainerPort": 80,
            "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"}
          }
        ]
      }
    },
    "PrimaryTaskSet": {
      "Type": "AWS::ECS::PrimaryTaskSet",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "Service": {"Ref": "ECSDemoService"},
        "TaskSetId": {"Fn::GetAtt": ["BlueTaskSet", "Id"]}
      }
    }
  }
}
```

## Fasi della migrazione
<a name="migration-steps"></a>

### Rimuovi risorse specifiche CodeDeploy
<a name="remove-codedeploy-resources"></a>

Non sono più necessarie le seguenti proprietà:
+ La `AWS::CodeDeployBlueGreen` trasformata
+ L'hook `CodeDeployBlueGreenHook`
+ Le risorse `GreenTaskDefinition` e `GreenTaskSet` (saranno gestite da Amazon ECS)
+ La risorsa `PrimaryTaskSet` (Amazon ECS gestirà internamente i set di attività)

### Riconfigurazione del listener del bilanciatore del carico
<a name="reconfigure-load-balancer"></a>

Modificare la risorsa `ALBListenerProdTraffic` per utilizzare un'azione di inoltro con due gruppi di destinazione:

```
{
  "DefaultActions": [
    {
      "Type": "forward",
      "ForwardConfig": {
        "TargetGroups": [
          {
            "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
            "Weight": 1
          },
          {
            "TargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
            "Weight": 0
          }
        ]
      }
    }
  ]
}
```

### Aggiornare le proprietà di implementazione
<a name="update-ecs-service"></a>

Aggiornare e aggiungere quanto segue:
+ Cambiare la proprietà `DeploymentController` da `EXTERNAL` a `ECS`.
+ Aggiungere la proprietà `Strategy` e impostarla su BLUE\$1GREEN.
+ Aggiungere la proprietà `BakeTimeInMinutes`.

  ```
  {
    "DeploymentConfiguration": {
      "MaximumPercent": 200,
      "MinimumHealthyPercent": 100,
      "DeploymentCircuitBreaker": {
        "Enable": true,
        "Rollback": true
      },
      "BakeTimeInMinutes": 5,
      "Strategy": "BLUE_GREEN"
    }
  }
  ```
+ Aggiungere la configurazione del bilanciatore del carico al servizio:

  ```
  {
    "LoadBalancers": [
      {
        "ContainerName": "DemoApp",
        "ContainerPort": 80,
        "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
        "AdvancedConfiguration": {
          "AlternateTargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
          "ProductionListenerRule": {"Ref": "ALBListenerProdRule"},
          "RoleArn": {"Fn::GetAtt": ["ECSInfrastructureRoleForLoadBalancers", "Arn"]}
        }
      }
    ]
  }
  ```
+ Aggiungere il riferimento alla definizione dell'attività al servizio:

  ```
  {
    "TaskDefinition": {"Ref": "BlueTaskDefinition"}
  }
  ```

### Crea il ECSInfrastructure RolePolicyForLoadBalancers ruolo Amazon
<a name="create-ecs-service-role"></a>

Aggiungi un nuovo ruolo IAM che consente ad Amazon ECS di gestire le risorse di bilanciamento del carico. Per ulteriori informazioni, consulta [Ruolo IAM dell'infrastruttura Amazon ECS per i bilanciatori del carico](AmazonECSInfrastructureRolePolicyForLoadBalancers.md)

## Consigli sui test
<a name="testing-recommendations"></a>

1. Implementare il modello migrato in un ambiente non di produzione.

1. Verificare che il servizio venga implementato correttamente con la configurazione iniziale.

1. Testare un'implementazione aggiornando la definizione dell'attività e osservando il processo di implementazione blu/verde.

1. Verificare che il traffico si sposti correttamente tra le implementazioni blu e verdi.

1. Testare la funzionalità di rollback forzando un errore di implementazione.

## Modello dopo la migrazione
<a name="migrated-template"></a>

### Modello finale
<a name="ecs-bluegreen-template"></a>

Questo è il CloudFormation modello completo che utilizza una blue/green distribuzione Amazon ECS:

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "Vpc": {
      "Type": "AWS::EC2::VPC::Id"
    },
    "Subnet1": {
      "Type": "AWS::EC2::Subnet::Id"
    },
    "Subnet2": {
      "Type": "AWS::EC2::Subnet::Id"
    }
  },
  "Resources": {
    "ExampleSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "Security group for ec2 access",
        "VpcId": {"Ref": "Vpc"},
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": 80,
            "ToPort": 80,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 8080,
            "ToPort": 8080,
            "CidrIp": "0.0.0.0/0"
          },
          {
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "ALBTargetGroupBlue": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ALBTargetGroupGreen": {
      "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
      "Properties": {
        "HealthCheckIntervalSeconds": 5,
        "HealthCheckPath": "/",
        "HealthCheckPort": "80",
        "HealthCheckProtocol": "HTTP",
        "HealthCheckTimeoutSeconds": 2,
        "HealthyThresholdCount": 2,
        "Matcher": {
          "HttpCode": "200"
        },
        "Port": 80,
        "Protocol": "HTTP",
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "TargetType": "ip",
        "UnhealthyThresholdCount": 4,
        "VpcId": {"Ref": "Vpc"}
      }
    },
    "ExampleALB": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Properties": {
        "Scheme": "internet-facing",
        "SecurityGroups": [
          {"Ref": "ExampleSecurityGroup"}
        ],
        "Subnets": [
          {"Ref": "Subnet1"},
          {"Ref": "Subnet2"}
        ],
        "Tags": [
          {
            "Key": "Group",
            "Value": "Example"
          }
        ],
        "Type": "application",
        "IpAddressType": "ipv4"
      }
    },
    "ALBListenerProdTraffic": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Properties": {
        "DefaultActions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                },
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
                  "Weight": 0
                }
              ]
            }
          }
        ],
        "LoadBalancerArn": {"Ref": "ExampleALB"},
        "Port": 80,
        "Protocol": "HTTP"
      }
    },
    "ALBListenerProdRule": {
      "Type": "AWS::ElasticLoadBalancingV2::ListenerRule",
      "Properties": {
        "Actions": [
          {
            "Type": "forward",
            "ForwardConfig": {
              "TargetGroups": [
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
                  "Weight": 1
                },
                {
                  "TargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
                  "Weight": 0
                }
              ]
            }
          }
        ],
        "Conditions": [
          {
            "Field": "http-header",
            "HttpHeaderConfig": {
              "HttpHeaderName": "User-Agent",
              "Values": [
                "Mozilla"
              ]
            }
          }
        ],
        "ListenerArn": {"Ref": "ALBListenerProdTraffic"},
        "Priority": 1
      }
    },
    "ECSTaskExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "",
              "Effect": "Allow",
              "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
        ]
      }
    },
    "ECSInfrastructureRoleForLoadBalancers": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "AllowAccessToECSForInfrastructureManagement",
              "Effect": "Allow",
              "Principal": {
                "Service": "ecs.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForLoadBalancers"
        ]
      }
    },
    "BlueTaskDefinition": {
      "Type": "AWS::ECS::TaskDefinition",
      "Properties": {
        "ExecutionRoleArn": {"Fn::GetAtt": ["ECSTaskExecutionRole", "Arn"]},
        "ContainerDefinitions": [
          {
            "Name": "DemoApp",
            "Image": "nginxdemos/hello:latest",
            "Essential": true,
            "PortMappings": [
              {
                "HostPort": 80,
                "Protocol": "tcp",
                "ContainerPort": 80
              }
            ]
          }
        ],
        "RequiresCompatibilities": [
          "FARGATE"
        ],
        "NetworkMode": "awsvpc",
        "Cpu": "256",
        "Memory": "512",
        "Family": "ecs-demo"
      }
    },
    "ECSDemoCluster": {
      "Type": "AWS::ECS::Cluster",
      "Properties": {}
    },
    "ECSDemoService": {
      "Type": "AWS::ECS::Service",
      "Properties": {
        "Cluster": {"Ref": "ECSDemoCluster"},
        "DesiredCount": 1,
        "DeploymentController": {
          "Type": "ECS"
        },
        "DeploymentConfiguration": {
          "MaximumPercent": 200,
          "MinimumHealthyPercent": 100,
          "DeploymentCircuitBreaker": {
            "Enable": true,
            "Rollback": true
          },
          "BakeTimeInMinutes": 5,
          "Strategy": "BLUE_GREEN"
        },
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "AssignPublicIp": "ENABLED",
            "SecurityGroups": [
              {"Ref": "ExampleSecurityGroup"}
            ],
            "Subnets": [
              {"Ref": "Subnet1"},
              {"Ref": "Subnet2"}
            ]
          }
        },
        "LaunchType": "FARGATE",
        "PlatformVersion": "1.4.0",
        "TaskDefinition": {"Ref": "BlueTaskDefinition"},
        "LoadBalancers": [
          {
            "ContainerName": "DemoApp",
            "ContainerPort": 80,
            "TargetGroupArn": {"Ref": "ALBTargetGroupBlue"},
            "AdvancedConfiguration": {
              "AlternateTargetGroupArn": {"Ref": "ALBTargetGroupGreen"},
              "ProductionListenerRule": {"Ref": "ALBListenerProdRule"},
              "RoleArn": {"Fn::GetAtt": ["ECSInfrastructureRoleForLoadBalancers", "Arn"]}
            }
          }
        ]
      }
    }
  }
}
```

# Migrazione da una distribuzione di servizi di aggiornamento in sequenza di Amazon ECS CodeDeploy blu/verde a una distribuzione del servizio di aggiornamento continuo di Amazon ECS
<a name="migrate-code-deploy-to-ecs-rolling"></a>

 Puoi migrare le tue distribuzioni di servizi da una distribuzione CodeDeploy blu/verde a una distribuzione di aggiornamenti continui di Amazon ECS. In questo modo puoi passare dalla CodeDeploy dipendenza all'utilizzo di una distribuzione integrata.

Il pianificatore di servizi di Amazon ECS sostituisce le attività attualmente in esecuzione con nuove attività. Il numero di attività che Amazon ECS aggiunge o rimuove dal servizio durante un aggiornamento continuo è controllato dalla configurazione di distribuzione del servizio.

## Prerequisiti
<a name="migrate-code-deploy-to-ecs-rolling-prerequisites"></a>

Esegui le seguenti operazioni prima di iniziare una blue/green distribuzione. 

1. Non è più necessario il ruolo CodeDeploy IAM di Amazon ECS.

1. Disattiva l' CodeDeploy automazione. Per ulteriori informazioni, consulta [Lavorare con i gruppi di distribuzione CodeDeploy nella](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html) *Guida CodeDeploy per l'utente*.

1. Verificare che non vi siano implementazioni di servizi in corso per il servizio. Per ulteriori informazioni, consultare [Visualizza la cronologia dei servizi utilizzando le distribuzioni dei servizi Amazon ECS](service-deployment.md).

Per ulteriori informazioni sull'aggiornamento di un controller di implementazione del servizio, consultare [Aggiornare i parametri del servizio Amazon ECS](update-service-parameters.md).

## Procedura
<a name="migrate-code-deploy-to-ecs-rolling-procedure"></a>

1. Apri la console nella [https://console.aws.amazon.com/ecs/versione 2](https://console.aws.amazon.com/ecs/v2).

1. Nella pagina **Cluster**, scegliere il cluster.

   Si apre la pagina dei dettagli del cluster.

1. Dalla scheda **Servizi**, scegliere il servizio.

   Si apre la pagina dei dettagli del servizio.

1. Nel banner, scegliere **Migra**.

   Si apre la pagina **Aggiorna configurazione di implementazione**.

1. Espandere **Opzioni di implementazione**, quindi specificare i seguenti parametri.

   1. Per **Tipo di controller di implementazione**, scegliere **ECS**.

   1. Per **Strategia di implementazione**, scegliere **Aggiornamento in sequenza**.

   1. Per **Min running tasks** (Numero minimo di attività in esecuzione), specifica il limite inferiore per il numero di attività nel servizio che devono rimanere nello stato `RUNNING` durante un'implementazione, espresso come percentuale del numero di attività desiderate (arrotondata per eccesso al numero intero più vicino). Per ulteriori informazioni, consultare [Deployment configuration](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#sd-deploymentconfiguration).

   1. Per **Max running tasks** (Numero massimo di attività in esecuzione), specifica il limite superiore per il numero di attività del servizio consentite nello stato `RUNNING` o `PENDING` durante un'implementazione, espresso come percentuale del numero di attività desiderate (arrotondata per difetto al numero intero più vicino).

1. Espandere **Bilanciamento del carico** e configurare quanto segue:

   1. Per **Ruolo**, scegli il ruolo che hai creato nei prerequisiti con le blue/green autorizzazioni.

      Per ulteriori informazioni, consulta [Autorizzazioni richieste per le funzioni Lambda nelle distribuzioni Amazon ECS blue/green](blue-green-permissions.md).

   1. Per **Listener**, scegli il listener di produzione dalla tua distribuzione blu/verde. CodeDeploy 

   1. Per **Target group**, scegli il gruppo target di produzione dalla tua implementazione blu/verde. CodeDeploy 

1. Scegliere **Aggiorna**.

## Fasi successive
<a name="migrate-code-deploy-to-ecs-rolling-next-steps"></a>

È necessario aggiornare il servizio affinché venga applicata la modifica. Per ulteriori informazioni, consultare [Aggiornamento di un servizio Amazon ECS](update-service-console-v2.md).