

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

# Esempio di Amazon ECR per CodeBuild
<a name="sample-ecr"></a>

Questo esempio utilizza un'immagine Docker in un repository di immagini Amazon Elastic Container Registry (Amazon ECR) per creare un progetto Go di esempio.

**Importante**  
L'esecuzione di questo esempio potrebbe comportare addebiti sul tuo account. AWS Questi includono possibili addebiti per AWS CodeBuild e per AWS risorse e azioni relative ad Amazon S3 AWS KMS, CloudWatch Logs e Amazon ECR. Per ulteriori informazioni, consulta [CodeBuild i prezzi, i prezzi](https://aws.amazon.com/codebuild/pricing) di [Amazon S3, i prezzi, i AWS Key Management Service](https://aws.amazon.com/s3/pricing) [prezzi](https://aws.amazon.com/kms/pricing) di [Amazon e CloudWatch i prezzi](https://aws.amazon.com/cloudwatch/pricing) di [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [

## Esegui l'esempio di Amazon ECR
](#sample-ecr-running)

## Esegui l'esempio di Amazon ECR
<a name="sample-ecr-running"></a>

Utilizza le seguenti istruzioni per eseguire l'esempio di Amazon ECR per CodeBuild.

**Per eseguire questo esempio**

1. Per creare e inviare l'immagine Docker al tuo repository di immagini in Amazon ECR, completa i passaggi nella [Esegui l'esempio «Pubblica immagine Docker su Amazon ECR'](sample-docker.md#sample-docker-running) sezione del. [Esempio «Pubblica immagine Docker su Amazon ECR'](sample-docker.md)

1. Creazione di un progetto Go: 

   1. Crea i file come descritto nelle [File di un progetto Go](#sample-ecr-go-project-files) sezioni [Struttura di un progetto Go](#ecr-sample-go-project-file-structure) e di questo argomento, quindi caricali in un bucket di input S3 o in un repository AWS CodeCommit, GitHub o Bitbucket. 
**Importante**  
Non caricare `(root directory name)`, ma solo i file all'interno di `(root directory name)`   
Se si sta utilizzando un bucket di input S3, assicurarsi di creare un file ZIP contenente i file, quindi caricarlo nel bucket di input. Non aggiungere `(root directory name)` al file ZIP, ma solo i file all'interno di `(root directory name)`

   1. Crea un progetto di compilazione, esegui la build e visualizza le relative informazioni sulla build.

      Se usi il AWS CLI per creare il progetto di compilazione, l'input in formato JSON del `create-project` comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. Per ottenere l'artefatto di output della compilazione, aprire il bucket di output S3.

   1. Scaricare il file `GoOutputArtifact.zip` sul computer locale o sull'istanza, quindi estrarre il contenuto del file. Tra i contenuti estratti, selezionare il file `hello`. 

1.  Se una delle seguenti condizioni è vera, devi aggiungere le autorizzazioni al tuo repository di immagini in Amazon ECR in modo che AWS CodeBuild possa inserire la sua immagine Docker nell'ambiente di compilazione. 
   +  Il tuo progetto utilizza CodeBuild le credenziali per estrarre immagini Amazon ECR. Questo è indicato dal valore `CODEBUILD` nell'attributo `imagePullCredentialsType` di `ProjectEnvironment`. 
   +  Il tuo progetto utilizza un'immagine Amazon ECR per più account. In questo caso, il progetto deve utilizzare il suo ruolo di servizio per estrarre immagini Amazon ECR. Per abilitare questo comportamento, impostare l'attributo `imagePullCredentialsType` di `ProjectEnvironment` su `SERVICE_ROLE`. 

   1. Apri la console Amazon ECR all'indirizzo [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Nella lista dei nomi dei repository, selezionare il nome del repository creato o selezionato.

   1. Dal riquadro di navigazione scegliere **Permissions (Autorizzazioni)**, **Edit (Modifica)**, quindi scegliere **Add statement (Aggiungi istruzione)**.

   1. In **Nome istruzione**, immettere un identificatore (ad esempio, **CodeBuildAccess**).

   1. Per **Effect (Effetto)**, lasciare selezionato **Allow (Abilita)**. Questo indica che vuoi consentire l'accesso a un altro account AWS .

   1. Per **Principal (Principale)**, eseguire una delle seguenti operazioni:
      + Se il tuo progetto utilizza CodeBuild le credenziali per estrarre un'immagine Amazon ECR, in **Service principal, inserisci**. **codebuild.amazonaws.com** 
      + Se il tuo progetto utilizza un'immagine Amazon ECR per più account, per **AWS account IDs** inserisci IDs gli AWS account a cui desideri consentire l'accesso.

   1. Saltare la lista **All IAM entities (Tutte le entità IAM)**.

   1. **Per **Azione**, seleziona le azioni di sola estrazione: ecr:GetDownloadUrlForLayer, **ecr:** ed **ecr**:. BatchGetImage BatchCheckLayerAvailability**

   1. Per **Condizioni**, aggiungi quanto segue:

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. Scegli **Save** (Salva).

      Questa policy viene visualizzata in **Autorizzazioni**. L'entità principal è ciò che è stato immesso per **Principal (Entità principal)** al passaggio 3 di questa procedura:
      + Se il tuo progetto utilizza CodeBuild credenziali per estrarre un'immagine Amazon ECR, `"codebuild.amazonaws.com"` viene visualizzato in **Service** principals.
      + **Se il tuo progetto utilizza un'immagine Amazon ECR per più account, l'ID dell' AWS account a cui desideri consentire l'accesso viene visualizzato in AWS Account. IDs**

        La seguente policy di esempio utilizza sia CodeBuild le credenziali che un'immagine Amazon ECR per più account.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + Se i tuoi progetti utilizzano CodeBuild credenziali e desideri che abbiano accesso aperto all'archivio Amazon ECR, puoi omettere `Condition` le chiavi e aggiungere la seguente politica di esempio. CodeBuild 

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

1. Crea un progetto di compilazione, esegui la build e visualizza le informazioni sulla build.

   Se usi il AWS CLI per creare il progetto di compilazione, l'input in formato JSON del `create-project` comando potrebbe avere un aspetto simile a questo. (Sostituire i segnaposto con i propri valori).

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Per ottenere l'artefatto di output della compilazione, aprire il bucket di output S3.

1. Scaricare il file `GoOutputArtifact.zip` sul computer locale o sull'istanza, quindi estratte il contenuto del file `GoOutputArtifact.zip`. Tra i contenuti estratti, selezionare il file `hello`.

### Struttura di un progetto Go
<a name="ecr-sample-go-project-file-structure"></a>

Questo esempio assume la seguente struttura delle directory.

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### File di un progetto Go
<a name="sample-ecr-go-project-files"></a>

Questo esempio utilizza i seguenti file.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` (in `(root directory name)`)

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```