

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

# Tutorial: distribuzione standard di Amazon ECS con CodePipeline
<a name="ecs-cd-pipeline"></a>

Questo tutorial ti aiuta a creare una pipeline di distribuzione end-to-end continua (CD) completa con Amazon ECS with. CodePipeline

**Importante**  
Come parte della creazione di una pipeline nella console, per gli artefatti verrà utilizzato un bucket di artefatti S3. CodePipeline (Questo è diverso dal bucket utilizzato per un'azione sorgente S3.) Se il bucket di artefatti S3 si trova in un account diverso da quello della pipeline, assicurati che il bucket di artefatti S3 sia di proprietà di utenti sicuri e affidabili. Account AWS 

**Nota**  
Questo tutorial riguarda l'azione di distribuzione standard di Amazon ECS per CodePipeline. Per un tutorial che utilizza Amazon ECS per un'azione di distribuzione CodeDeploy blu/green in CodePipeline, consulta. [Tutorial: crea una pipeline con una sorgente e una distribuzione Amazon ECR ECS-to-CodeDeploy](tutorials-ecs-ecr-codedeploy.md)

**Nota**  
Questo tutorial riguarda l'azione di distribuzione standard di Amazon ECS CodePipeline con un'azione di origine. Per un tutorial che utilizza l'azione di ECSstandard distribuzione di Amazon insieme all'azione di ECRBuild AndPublish compilazione CodePipeline per inserire la tua immagine, consulta[Tutorial: crea e invia un'immagine Docker ad Amazon ECR con CodePipeline (tipo V2)](tutorials-ecr-build-publish.md).

## Prerequisiti
<a name="ecs-cd-prereqs"></a>

Per utilizzare questo tutorial per creare la pipeline di distribuzione continua, è necessario disporre di alcune risorse. Ecco di cosa hai bisogno prima di iniziare: 

**Nota**  
Tutte queste risorse devono essere create all'interno della stessa AWS regione.
+ Un repository per il controllo del codice sorgente (utilizzato in questo tutorial CodeCommit) con il Dockerfile e l'origine dell'applicazione. *Per ulteriori informazioni, consulta [Creare un CodeCommit repository](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) nella Guida per l'utente.AWS CodeCommit *
+ Un repository di immagini Docker (questo tutorial utilizza Amazon ECR) che contiene un'immagine che hai creato dal tuo Dockerfile e dall'origine dell'applicazione. Per ulteriori informazioni, consulta [Creating a Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) and [Pushing an Image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) nella *Amazon Elastic Container Registry User Guide*.
+ Una definizione di attività Amazon ECS che fa riferimento all'immagine Docker ospitata nel tuo repository di immagini. Per ulteriori informazioni, consulta [Creating a Task Definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) nella *Amazon Elastic Container Service Developer Guide*.
**Importante**  
L'azione di distribuzione standard di Amazon ECS CodePipeline crea la propria revisione della definizione dell'attività in base alla revisione utilizzata dal servizio Amazon ECS. Se crei nuove revisioni per la definizione dell'attività senza aggiornare il servizio Amazon ECS, l'azione di distribuzione ignorerà tali revisioni.

  Di seguito è riportato un esempio di definizione di attività utilizzata per questo tutorial. Il valore utilizzato `name` e che `family` verrà utilizzato nel passaggio successivo per il file delle specifiche della build.

  ```
  {
    "ipcMode": null,
    "executionRoleArn": "{{role_ARN}}",
    "containerDefinitions": [
      {
        "dnsSearchDomains": null,
        "environmentFiles": null,
        "logConfiguration": {
          "logDriver": "awslogs",
          "secretOptions": null,
          "options": {
            "awslogs-group": "/ecs/{{hello-world}}",
            "awslogs-region": "us-west-2",
            "awslogs-stream-prefix": "ecs"
          }
        },
        "entryPoint": null,
        "portMappings": [
          {
            "hostPort": 80,
            "protocol": "tcp",
            "containerPort": 80
          }
        ],
        "command": null,
        "linuxParameters": null,
        "cpu": 0,
        "environment": [],
        "resourceRequirements": null,
        "ulimits": null,
        "dnsServers": null,
        "mountPoints": [],
        "workingDirectory": null,
        "secrets": null,
        "dockerSecurityOptions": null,
        "memory": null,
        "memoryReservation": 128,
        "volumesFrom": [],
        "stopTimeout": null,
        "image": "{{image_name}}",
        "startTimeout": null,
        "firelensConfiguration": null,
        "dependsOn": null,
        "disableNetworking": null,
        "interactive": null,
        "healthCheck": null,
        "essential": true,
        "links": null,
        "hostname": null,
        "extraHosts": null,
        "pseudoTerminal": null,
        "user": null,
        "readonlyRootFilesystem": null,
        "dockerLabels": null,
        "systemControls": null,
        "privileged": null,
        "name": "{{hello-world}}"
      }
    ],
    "placementConstraints": [],
    "memory": "2048",
    "taskRoleArn": null,
    "compatibilities": [
      "EC2",
      "FARGATE"
    ],
    "taskDefinitionArn": "{{ARN}}",
    "family": "{{hello-world}}",
    "requiresAttributes": [],
    "pidMode": null,
    "requiresCompatibilities": [
      "FARGATE"
    ],
    "networkMode": "awsvpc",
    "cpu": "1024",
    "revision": 1,
    "status": "ACTIVE",
    "inferenceAccelerators": null,
    "proxyConfiguration": null,
    "volumes": []
  }
  ```
+ Un cluster Amazon ECS che esegue un servizio che utilizza la definizione di attività menzionata in precedenza. Per ulteriori informazioni, consulta [Creazione di un cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html) e [creazione di un servizio](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html) nella *Amazon Elastic Container Service Developer Guide*.

Dopo aver soddisfatto questi prerequisiti, puoi procedere con il tutorial e creare la pipeline di distribuzione continua.

## Fase 1: aggiunta di un file di specifica di compilazione all'archivio di codice sorgente
<a name="cd-buildspec"></a>

Questo tutorial serve CodeBuild per creare la tua immagine Docker e inviarla ad Amazon ECR. Aggiungi un file `buildspec.yml` all'archivio del codice sorgente per indicare a CodeBuild come effettuare l'operazione. La specifica di compilazione di esempio in basso comprende quanto segue:
+ Fase precedente alla compilazione:
  + Accedi ad Amazon ECR.
  + Imposta l'URI dell'archivio sull'immagine ECR e aggiungi un tag di immagine con i primi sette caratteri dell'ID commit di Git del codice sorgente.
+ Fase di compilazione:
  + Crea l'immagine Docker e contrassegna con dei tag l'immagine sia come `latest` che con l'ID commit di Git.
+ Fase posteriore alla compilazione:
  + Inserisci l'immagine nell'archivio ECR con entrambi i tag.
  + Scrivi un file chiamato `imagedefinitions.json` nella build root che contenga il nome del contenitore del servizio Amazon ECS, l'immagine e il tag. La fase di distribuzione della pipeline di distribuzione utilizza queste informazioni per creare una nuova revisione della definizione di attività del servizio, quindi aggiorna il servizio per utilizzare la nuova definizione di attività. Il file `imagedefinitions.json` è richiesto per l'esecutore del processo ECS.

Incolla questo testo di esempio per creare il `buildspec.yml` file e sostituisci i valori per la definizione dell'immagine e dell'attività. Questo testo utilizza l'ID di account di esempio 111122223333.

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com
      - REPOSITORY_URI=012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
    files: imagedefinitions.json
```

La specifica di build è stata scritta per la definizione di attività di esempio fornita in[Prerequisiti](#ecs-cd-prereqs), utilizzata dal servizio Amazon ECS per questo tutorial. Il valore `REPOSITORY_URI` corrisponde all'archivio `image` (senza tag di immagini); il valore `{{hello-world}}` alla fine del file corrisponde al nome del container nella definizione di attività del servizio. 

**Aggiunta di un file `buildspec.yml` nell'archivio di codice sorgente**

1. Apri un editor di testo e copia e incolla la specifica di compilazione riportata in alto in un nuovo file.

1. Sostituisci il `REPOSITORY_URI` valore (`{{012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world}}`) con l'URI del tuo repository Amazon ECR (senza tag di immagine) per la tua immagine Docker. Sostituisci `{{hello-world}}` con il nome del container della definizione di attività del servizio riferito all'immagine Docker.

1. Conferma e inserisci il file `buildspec.yml` nell'archivio del codice sorgente.

   1. Aggiungi il file.

      ```
      git add .
      ```

   1. Conferma la modifica.

      ```
      git commit -m "Adding build specification."
      ```

   1. Invia la conferma.

      ```
      git push
      ```

## Fase 2: creazione della pipeline di distribuzione continua
<a name="pipeline-wizard"></a>

Utilizza la CodePipeline procedura guidata per creare le fasi della pipeline e connettere il repository di origine al servizio ECS.

**Creazione della pipeline**

1. Apri la console all'indirizzo. CodePipeline [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)

1. Nella pagina **Welcome** (Benvenuto), seleziona **Create pipeline** (Crea pipeline). 

   **Se è la prima volta che lo usi CodePipeline, viene visualizzata una pagina introduttiva anziché Benvenuto.** Scegliere **Get Started Now** (Inizia subito).

1. Nella pagina **Passaggio 1: Scegli l'opzione di creazione**, in **Opzioni di creazione**, scegli l'opzione **Crea pipeline personalizzata**. Scegli **Next (Successivo)**.

1. Nel **Passaggio 2: Scegliete le impostazioni della pipeline**, in **Nome della pipeline**, digitate il nome della pipeline. Per questo tutorial, il nome della pipeline è **hello-world**.

1. **In **Pipeline type**, mantieni la selezione predefinita su V2.** I tipi di tubazioni differiscono per caratteristiche e prezzo. Per ulteriori informazioni, consulta [Tipi di tubazioni](pipeline-types.md). Scegli **Next (Successivo)**.

1. Nella **fase 3: Aggiungi la pagina della fase di origine**, per **Provider di origine**, scegli ** AWS CodeCommit**.

   1. In **Repository name (Nome archivio)**, seleziona il nome dell'archivio CodeCommit da utilizzare come ubicazione di origine della pipeline.

   1. In **Branch name (Nome ramo)**, seleziona il ramo da utilizzare e seleziona **Next (Fase successiva)**.

1. **Nella pagina Step 4: Aggiungi la fase** di compilazione, per **Build provider** scegli **AWS CodeBuild**, quindi scegli **Crea progetto**.

   1. In **Project name** (Nome progetto), scegli un nome univoco per il progetto di compilazione. Per questo tutorial, il nome della progetto è **hello-world**.

   1. Per **Environment image (Immagine ambiente)**, scegliere **Managed image (Immagine gestita)**.

   1. Per **Operating system (Sistema operativo)**, scegliere **Amazon Linux 2**.

   1. In **Runtime(s) (Runtime)**, seleziona **Standard**.

   1. Per **Immagine**, scegli **`aws/codebuild/amazonlinux2-x86_64-standard:3.0`**.

   1. Per la **Image version (Versione immagine)** e **Environment type (Tipo di ambiente)**, utilizzare i valori predefiniti.

   1. Seleziona **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Abilita questo flag se desideri creare immagini Docker o se desideri che le build ottengano privilegi elevati)**.

   1. Deseleziona i **CloudWatch registri**. **Potrebbe essere necessario espandere Advanced.**

   1. Scegli **Continua con CodePipeline**.

   1. Scegli **Next (Successivo)**.
**Nota**  
La procedura guidata crea un ruolo di CodeBuild servizio per il tuo progetto di compilazione, chiamato **codebuild- {{build-project-name}} -service-role**. Prendi nota di questo nome di ruolo, man mano che aggiungerai le autorizzazioni Amazon ECR in un secondo momento.

1. Nella pagina **Fase 5: Aggiungi fase di distribuzione**, per **provider di distribuzione**, scegli **Amazon ECS**.

   1. Per **il nome del cluster**, scegli il cluster Amazon ECS in cui è in esecuzione il tuo servizio. Per questo tutorial, il cluster è **predefinito**.

   1. In **Service name (Nome del servizio)**, scegli il servizio da aggiornare, quindi seleziona **Next (Fase successiva)**. Per questo tutorial, il nome del servizio è **hello-world**.

1. Nella pagina **Step 6: Review** (Fase 6: esamina), esamina la configurazione della pipeline, quindi seleziona **Create pipeline** (Crea pipeline) per creare la pipeline.
**Nota**  
Ora che la pipeline è stata creata, tenta l'esecuzione tramite le varie fasi della pipeline. Tuttavia, il CodeBuild ruolo predefinito creato dalla procedura guidata non dispone delle autorizzazioni per eseguire tutti i comandi contenuti nel `buildspec.yml` file, quindi la fase di compilazione fallisce. La sezione successiva aggiunge le autorizzazioni necessarie per la fase di compilazione.

## Fase 3: aggiungere le autorizzazioni Amazon ECR al ruolo CodeBuild
<a name="code-build-perms"></a>

La CodePipeline procedura guidata ha creato un ruolo IAM per il progetto di compilazione, chiamato CodeBuild **codebuild** - -service-role. {{build-project-name}} **Per questo tutorial, il nome è -role. codebuild-hello-world-service** Poiché il `buildspec.yml` file effettua chiamate alle operazioni dell'API Amazon ECR, il ruolo deve disporre di una policy che consenta le autorizzazioni per effettuare queste chiamate Amazon ECR. La procedura seguente consente di collegare al ruolo le autorizzazioni appropriate.

**Per aggiungere le autorizzazioni Amazon ECR al ruolo CodeBuild**

1. Aprire la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Nel pannello di navigazione a sinistra, seleziona **Ruoli**.

1. Nella casella di ricerca, digita **codebuild-** e scegli il ruolo creato dalla procedura guidata. CodePipeline **Per questo tutorial, il nome del ruolo è codebuild-hello-world-service -role.**

1. Nella pagina **Summary (Riepilogo)**, seleziona **Attach policy (Collega policy)**.

1. Seleziona la casella a sinistra della EC2 ContainerRegistryPowerUser politica di **Amazon** e scegli **Allega politica**.

## Fase 4: test della pipeline
<a name="commit-change"></a>

La tua pipeline dovrebbe avere tutto il necessario per eseguire una distribuzione AWS continua end-to-end nativa. Ora, testane la funzionalità inserendo una modifica del codice all'archivio del codice sorgente.

**Test della pipeline**

1. Effettua una modifica del codice nell'archivio del codice sorgente configurato, conferma e inserisci la modifica.

1. Apri la CodePipeline console all'indirizzo [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Seleziona la pipeline nell'elenco.

1. Osserva l'avanzamento della pipeline attraverso le varie fasi. La pipeline dovrebbe essere completata e il servizio Amazon ECS esegue l'immagine Docker creata dalla modifica del codice.