

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exemple Amazon ECR pour CodeBuild
<a name="sample-ecr"></a>

Cet exemple utilise une image Docker dans un référentiel d'images Amazon Elastic Container Registry (Amazon ECR) pour créer un exemple de projet Go.

**Important**  
L'exécution de cet échantillon peut entraîner des frais sur votre AWS compte. Cela inclut les éventuels frais pour AWS CodeBuild et pour les AWS ressources et les actions liées à Amazon S3 AWS KMS, CloudWatch Logs et Amazon ECR. Pour plus d'informations, consultez [CodeBuild les rubriques Tarification](https://aws.amazon.com/codebuild/pricing), [Tarification Amazon S3](https://aws.amazon.com/s3/pricing), [AWS Key Management Service Tarification](https://aws.amazon.com/kms/pricing) [Amazon et CloudWatch Tarification](https://aws.amazon.com/cloudwatch/pricing) [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Exécutez l'exemple Amazon ECR](#sample-ecr-running)

## Exécutez l'exemple Amazon ECR
<a name="sample-ecr-running"></a>

Suivez les instructions suivantes pour exécuter l'exemple Amazon ECR pour CodeBuild.

**Pour exécuter cet exemple**

1. Pour créer et transférer l'image Docker vers votre référentiel d'images dans Amazon ECR, suivez les étapes décrites dans la [Exécutez l'exemple « Publier une image Docker sur Amazon ECR »](sample-docker.md#sample-docker-running) section du. [Exemple « Publier une image Docker sur Amazon ECR »](sample-docker.md)

1. Créer un projet Go : 

   1. Créez les fichiers comme décrit dans les [Fichiers d'un projet Go](#sample-ecr-go-project-files) sections [Structure d'un projet Go](#ecr-sample-go-project-file-structure) et de cette rubrique, puis chargez-les dans un compartiment d'entrée S3 ou un AWS CodeCommit référentiel Bitbucket. GitHub 
**Important**  
Ne chargez pas `(root directory name)`, mais seulement les fichiers à l'intérieur de `(root directory name)`.   
Si vous utilisez un compartiment d'entrée S3, veillez à créer un fichier ZIP contenant les fichiers, puis chargez ce fichier dans le compartiment d'entrée. N'ajoutez pas `(root directory name)` au fichier ZIP, mais seulement les fichiers à l'intérieur de `(root directory name)`.

   1. Créez un projet de build, exécutez le build et consultez les informations de build associées.

      Si vous utilisez le AWS CLI pour créer le projet de construction, l'entrée au format JSON de la `create-project` commande peut ressembler à ceci. (Remplacez les espaces réservés par vos propres valeurs.)

      ```
      {
        "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. Pour obtenir le résultat de l'artefact de sortie de la génération, ouvrez votre compartiment de sortie S3.

   1. Téléchargez le fichier `GoOutputArtifact.zip` sur votre ordinateur ou instance local, puis extrayez le contenu du fichier . Dans le contenu extrait, obtenez le fichier `hello`. 

1.  Si l'une des conditions suivantes est vraie, vous devez ajouter des autorisations à votre référentiel d'images dans Amazon ECR afin de AWS CodeBuild pouvoir intégrer son image Docker dans l'environnement de génération. 
   +  Votre projet utilise des CodeBuild informations d'identification pour extraire les images Amazon ECR. Ceci est indiqué par la valeur `CODEBUILD` dans l'attribut `imagePullCredentialsType` de votre `ProjectEnvironment`. 
   +  Votre projet utilise une image Amazon ECR multi-comptes. Dans ce cas, votre projet doit utiliser son rôle de service pour extraire les images Amazon ECR. Pour activer ce comportement, définissez l'attribut `imagePullCredentialsType` de votre `ProjectEnvironment` sur `SERVICE_ROLE`. 

   1. Ouvrez la console Amazon ECR à [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/)l'adresse.

   1. Dans la liste des noms de référentiel, choisissez le nom du référentiel que vous avez créé ou sélectionné.

   1. Dans le volet de navigation, choisissez **Permissions (Autorisations)**, **Edit (Modifier)**, puis **Add statement (Ajouter une instruction)**.

   1. Pour **Statement name**, saisissez un identifiant (par exemple, **CodeBuildAccess**).

   1. Pour **Effect (Effet)**, conservez la sélection **Allow (Autoriser)**. Cela indique que vous souhaitez autoriser l'accès à un autre compte AWS .

   1. Pour **Principal**, effectuez l'une des opérations suivantes:
      + Si votre projet utilise des CodeBuild informations d'identification pour extraire une image Amazon ECR, saisissez ****codebuild.amazonaws.com**Service principal**. 
      + Si votre projet utilise une image Amazon ECR multi-comptes IDs, saisissez pour **AWS compte** IDs les AWS comptes auxquels vous souhaitez donner accès.

   1. Ignorer la liste **Toutes les entités IAM**.

   1. **Pour **Action**, sélectionnez les actions à extraction uniquement : ecr :GetDownloadUrlForLayer, **ecr :** et **ecr :BatchGetImage.** BatchCheckLayerAvailability**

   1. Pour **Conditions**, ajoutez ce qui suit :

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

   1. Choisissez **Enregistrer**.

      Cette stratégie est affichée dans **Autorisations**. Le mandataire correspond à ce que vous avez saisi pour **Principal (Mandataire)** à l'étape 3 de cette procédure :
      + Si votre projet utilise des CodeBuild informations d'identification pour extraire une image Amazon ECR, cela `"codebuild.amazonaws.com"` apparaît sous **Principaux du service**.
      + **Si votre projet utilise une image Amazon ECR multi-comptes, l'identifiant du AWS compte auquel vous souhaitez donner accès apparaît sous AWS Compte. IDs**

        L'exemple de politique suivant utilise à la fois des CodeBuild informations d'identification et une image Amazon ECR entre comptes.

------
#### [ 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": "*"
              }
          ]
      }
      ```

------
      + Si vos projets utilisent des CodeBuild informations d'identification et que vous souhaitez qu'ils aient un accès ouvert au référentiel Amazon ECR, vous pouvez omettre les `Condition` clés et ajouter l'exemple de politique suivant. 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. Créez un projet de build, exécutez le build et consultez les informations de build.

   Si vous utilisez le AWS CLI pour créer le projet de construction, l'entrée au format JSON de la `create-project` commande peut ressembler à ceci. (Remplacez les espaces réservés par vos propres valeurs.)

   ```
   {
     "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. Pour obtenir le résultat de l'artefact de sortie de la génération, ouvrez votre compartiment de sortie S3.

1. Téléchargez le fichier `GoOutputArtifact.zip` sur votre ordinateur ou instance local, puis extrayez le contenu du fichier `GoOutputArtifact.zip`. Dans le contenu extrait, obtenez le fichier `hello`.

### Structure d'un projet Go
<a name="ecr-sample-go-project-file-structure"></a>

Cet exemple suppose que cette structure de répertoire est utilisée.

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

### Fichiers d'un projet Go
<a name="sample-ecr-go-project-files"></a>

Cet exemple utilise ces fichiers.

`buildspec.yml` (dans `(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` (dans `(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)
}
```