

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.

# Exemples multiservices pour CodeBuild
<a name="cross-service-samples"></a>

Vous pouvez utiliser ces exemples multiservices pour tester : AWS CodeBuild

[Exemple Amazon ECR](sample-ecr.md)  
Utilise une image Docker dans un référentiel Amazon ECR pour utiliser Apache Maven afin de produire un seul fichier JAR. Les exemples d'instructions vous montreront comment créer et envoyer une image Docker vers Amazon ECR, créer un projet Go, créer le projet, exécuter le projet et configurer les autorisations permettant de se connecter CodeBuild à Amazon ECR.

[Exemple Amazon EFS](sample-efs.md)  
Montre comment configurer un fichier buildspec afin qu'un CodeBuild projet soit monté et construit sur un système de fichiers Amazon EFS. Les exemples d'instructions vous montreront comment créer un Amazon VPC, créer un système de fichiers dans Amazon VPC, créer et construire un projet utilisant Amazon VPC, puis passer en revue le fichier de projet et les variables générés. 

[AWS CodePipeline échantillons](sample-codepipeline.md)  
Montre comment AWS CodePipeline créer un build avec des builds par lots ainsi que plusieurs sources d'entrée et plusieurs artefacts de sortie. Cette section contient des exemples de fichiers JSON qui montrent des structures de pipeline qui créent des constructions par lots avec des artefacts distincts et des artefacts combinés. Un exemple JSON supplémentaire est fourni qui montre la structure du pipeline avec plusieurs sources d'entrée et plusieurs artefacts de sortie.

[AWS Config échantillon](how-to-integrate-config.md)  
Montre comment procéder à la configuration AWS Config. Répertorie les CodeBuild ressources qui font l'objet d'un suivi et décrit comment rechercher CodeBuild des projets AWS Config. Les exemples d'instructions vous indiqueront les conditions préalables à l'intégration AWS Config, les étapes de configuration AWS Config et les étapes de recherche de CodeBuild projets et de données. AWS Config

[Exemple de notifications de génération](sample-build-notifications.md)  
Utilise Apache Maven pour produire un fichier JAR unique. Envoie une notification de création aux abonnés d'une rubrique Amazon SNS. Les exemples d'instructions vous montrent comment configurer les autorisations CodeBuild permettant de communiquer avec Amazon SNS CloudWatch, comment créer et identifier des CodeBuild sujets dans Amazon SNS, comment inscrire des destinataires à ces sujets et comment configurer des règles dans. CloudWatch

# 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)
}
```

# Exemple d'Amazon Elastic File System pour AWS CodeBuild
<a name="sample-efs"></a>

 Vous souhaiterez peut-être créer vos AWS CodeBuild versions sur Amazon Elastic File System, un service de fichiers partagé évolutif pour les instances Amazon EC2. La capacité de stockage d'Amazon EFS étant élastique, elle augmente ou diminue au fur et à mesure que des fichiers sont ajoutés ou supprimés. Il propose une interface de services Web simple, qui vous permet de créer et de configurer des systèmes de fichiers. Elle gère également l'ensemble de l'infrastructure de stockage de fichiers à votre place, de sorte que vous n'ayez pas besoin de vous préoccuper du déploiement, de l'application de correctifs ou de la maintenance des configurations de systèmes de fichiers. Pour plus d'informations, consultez [Qu'est-ce qu'Amazon Elastic File System ?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) dans le *guide de l'utilisateur d'Amazon Elastic File System*. 

 Cet exemple explique comment configurer un CodeBuild projet afin qu'il soit monté puis créé une application Java sur un système de fichiers Amazon EFS. Avant de commencer, vous devez disposer d'une application Java prête à être créée et téléchargée dans un compartiment d'entrée S3 AWS CodeCommit GitHub, un serveur GitHub d'entreprise ou un référentiel Bitbucket. 

Les données en transit pour votre système de fichiers sont chiffrées. Pour chiffrer les données en transit à l'aide d'une autre image, veuillez consulter [Chiffrement des données en transit](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html). 

**Topics**
+ [Utilisation AWS CodeBuild avec Amazon Elastic File System](#sample-efs-high-level-steps)
+ [Résoudre les problèmes liés à l'intégration Amazon EFS](sample-efs-troubleshooting.md)

## Utilisation AWS CodeBuild avec Amazon Elastic File System
<a name="sample-efs-high-level-steps"></a>

L'exemple couvre les quatre étapes de haut niveau requises pour utiliser Amazon EFS avec AWS CodeBuild. Il s'agit des options suivantes : 

1. Créez un cloud privé virtuel (VPC) dans votre AWS compte. 

1. Créez un système de fichiers qui utilise ce VPC. 

1. Créez et créez un CodeBuild projet qui utilise le VPC. Le CodeBuild projet utilise les éléments suivants pour identifier le système de fichiers :
   +  Un identificateur de système de fichiers unique. Vous choisissez cet identificateur lorsque vous spécifiez le système de fichiers dans votre projet de génération.
   + ID du système de fichiers. L'ID s'affiche lorsque vous consultez votre système de fichiers dans la console Amazon EFS.
   +  Un point de montage. Il s'agit d'un répertoire dans votre conteneur Docker qui monte le système de fichiers. 
   + Des options de montage. Elles incluent des détails sur la façon de monter le système de fichiers.

1. Passez en revue le projet de construction pour vous assurer que les fichiers de projet et les variables appropriés ont été générés.

**Note**  
 Un système de fichiers créé dans Amazon EFS est uniquement pris en charge sur les plateformes Linux. 

 

**Topics**
+ [Étape 1 : créer un VPC à l'aide de CloudFormation](#sample-efs-create-vpc)
+ [Étape 2 : créer un système de fichiers Amazon Elastic File System avec votre VPC](#sample-efs-create-efs)
+ [Étape 3 : créer un CodeBuild projet à utiliser avec Amazon EFS](#sample-efs-create-acb)
+ [Étape 4 : Passez en revue le projet de construction](#sample-efs-summary)

### Étape 1 : créer un VPC à l'aide de CloudFormation
<a name="sample-efs-create-vpc"></a>

 Créez votre VPC à l'aide d'un CloudFormation modèle. 

1.  Suivez les instructions d'utilisation [CloudFormation Modèle VPC](cloudformation-vpc-template.md) pour CloudFormation créer un VPC. 
**Note**  
 Le VPC créé par ce CloudFormation modèle possède deux sous-réseaux privés et deux sous-réseaux publics. Vous ne devez utiliser des sous-réseaux privés que lorsque vous montez le système AWS CodeBuild de fichiers que vous avez créé dans Amazon EFS. Si vous utilisez l'un des sous-réseaux publics, la génération échoue. 

1. Connectez-vous à la console Amazon VPC AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1.  Choisissez le VPC avec lequel vous avez créé. CloudFormation

1. Dans l'onglet **Description**, notez le nom de votre VPC et son ID. Les deux seront requis lorsque vous créerez votre projet AWS CodeBuild plus tard dans cet exemple. 

### Étape 2 : créer un système de fichiers Amazon Elastic File System avec votre VPC
<a name="sample-efs-create-efs"></a>

 Créez un système de fichiers Amazon EFS simple pour cet exemple à l'aide du VPC que vous avez créé précédemment. 

1. Connectez-vous à la console Amazon EFS AWS Management Console et ouvrez-la à l'adresse [ https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/).

1.  Choisissez **Create file system** (Créer un système de fichiers). 

1.  Dans **VPC**, choisissez le nom de VPC que vous avez noté précédemment dans cet exemple. 

1.  Conservez les Zones de disponibilité associées à vos sous-réseaux sélectionnés. 

1.  Choisissez **Étape suivante**. 

1.  Dans **Ajouter des balises**, pour la clé **Nom** par défaut, dans **Valeur**, entrez le nom de votre système de fichiers Amazon EFS. 

1.  Conservez **Bursting (Transmission en rafales)** et **General Purpose (Usage général)** sélectionnés en tant que modes de performance et de débit par défaut, puis choisissez **Étape suivante**. 

1. Pour **Configure client access (Configurer l'accès client)**, choisissez **Next Step (Étape suivante)**.

1.  Sélectionnez **Créer un système de fichiers**. 

1.  (Facultatif) Nous vous recommandons d'ajouter une politique à votre système de fichiers Amazon EFS qui applique le chiffrement des données en transit. Dans la console Amazon EFS, choisissez la **politique du système de fichiers**, choisissez **Modifier**, cochez la case intitulée **Appliquer le chiffrement en transit pour tous les clients**, puis sélectionnez **Enregistrer**.

### Étape 3 : créer un CodeBuild projet à utiliser avec Amazon EFS
<a name="sample-efs-create-acb"></a>

 Créez un AWS CodeBuild projet qui utilise le VPC que vous avez créé précédemment dans cet exemple. Lorsque le build est exécuté, il monte le système de fichiers Amazon EFS créé précédemment. Ensuite, elle stocke le fichier .jar créé par votre application Java dans le répertoire de point de montage de votre système de fichiers.

1. Ouvrez la AWS CodeBuild console sur [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Choisissez **Build projects (Projets de génération)** dans le volet de navigation, puis choisissez **Create a build project (Créer un projet de build)**. 

1.  Dans **Project name (Nom de projet)**, saisissez un nom pour votre projet. 

1.  Dans **Source provider (Fournisseur de source)**, choisissez le référentiel qui contient l'application Java que vous voulez générer. 

1.  Entrez les informations, telles que l'URL du référentiel, CodeBuild qui permettent de localiser votre application. Les options sont différentes pour chaque fournisseur de source. Pour de plus amples informations, veuillez consulter [Choose source provider](create-project.md#create-project-source-provider). 

1.  Dans **Image de l'environnement**, choisissez **Image gérée**. 

1.  Dans **Operating system (Système d'exploitation)**, choisissez **Amazon Linux 2**. 

1. Dans **Runtime(s) (Exécution(s))**, sélectionnez **Standard**. 

1.  Dans **Image**, choisissez **aws/codebuild/amazonlinux-x86\$164-standard:4.0**. 

1.  Dans **Environment type (Type d'environnement)**, choisissez **Linux**. 

1.  Dans **Service role (Rôle de service)**, choisissez **New service role (Nouveau rôle de service)**. Dans **Nom du rôle**, entrez le nom du rôle CodeBuild créé pour vous. 

1. Développez **Additional configuration (Configuration supplémentaire)**.

1.  Sélectionnez **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Activer cet indicateur si vous souhaitez créer des images Docker ou que vos builds reçoivent des privilèges élevés)**.
**Note**  
Par défaut, le démon Docker est activé pour les versions non VPC. Si vous souhaitez utiliser des conteneurs Docker pour les builds VPC, [consultez Runtime Privilege et Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) Capabilities sur le site Web de Docker Docs et activez le mode privilégié. De plus, Windows ne prend pas en charge le mode privilégié.

1.  Choisissez l'ID de VPC dans **VPC**. 

1.  Dans **Subnets (Sous-réseaux)**, choisissez un ou plusieurs sous-réseaux privés associés à votre VPC. Vous devez utiliser des sous-réseaux privés dans une version qui monte un système de fichiers Amazon EFS. La génération échoue si vous utilisez un sous-réseau public. 

1.  Pour **Security Groups (Groupes de sécurité)**, choisissez le groupe de sécurité par défaut.

1.  Dans **File systems (Systèmes de fichiers)**, entrez les informations suivantes :
   + Pour **Identifier (Identificateur)**, entrez un identificateur de système de fichiers unique. Il doit comporter moins de 129 caractères et ne contenir que des caractères alphanumériques et des traits de soulignement. CodeBuild utilise cet identificateur pour créer une variable d'environnement qui identifie le système de fichiers élastique. Le format de variable d'environnement est `CODEBUILD_<file_system_identifier>` en lettres majuscules. Par exemple, si vous entrez `my_efs`, la variable d'environnement est `CODEBUILD_MY_EFS`. 
   + Pour **ID**, choisissez l'ID du système de fichiers. 
   + (Facultatif) Entrez un répertoire dans le système de fichiers. CodeBuild monte ce répertoire. Si vous laissez **Directory path (Chemin du répertoire)** vide, CodeBuild monte le système de fichiers complet. Le chemin est relatif à la racine du système de fichiers. 
   + Pour **Point de montage**, entrez le chemin absolu du répertoire dans votre conteneur de compilation où le système de fichiers est monté. Si ce répertoire n'existe pas, CodeBuild créez-le lors de la compilation. 
   + (Facultatif) Entrez des options de montage. Si vous laissez **le champ Options de montage** vide, CodeBuild utilise ses options de montage par défaut :

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     Pour plus d'informations, consultez les [options de montage NFS recommandées](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html) dans le *guide de l'utilisateur d'Amazon Elastic File System*. 

1.  Pour **Build spécification (Spécification de génération)**, choisissez **Insert build commands (Insérer les commandes de génération)**, puis choisissez **Switch to editor (Basculer vers l'éditeur)**. 

1.  Entrez les commandes de spécification de construction suivantes dans l'éditeur. Remplacez `<file_system_identifier>` par l'identificateur que vous avez entré à l'étape 17. Utilisez des lettres majuscules (par exemple, `CODEBUILD_MY_EFS`).

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  Utilisez les valeurs par défaut pour les autres paramètres, puis choisissez **Create build project (Créer un projet de build)**. Lorsque votre génération est terminée, la page de la console correspondant à votre projet est affichée. 

1.  Choisissez **Démarrer la génération**. 

### Étape 4 : Passez en revue le projet de construction
<a name="sample-efs-summary"></a>



 Une fois votre AWS CodeBuild projet créé : 
+  Vous disposez d'un fichier .jar créé par votre application Java qui est intégré à votre système de fichiers Amazon EFS dans le répertoire de votre point de montage. 
+  Une variable d'environnement qui identifie votre système de fichiers est créée à l'aide de l'identificateur de système de fichiers que vous avez entré lors de la création du projet. 

 Pour plus d'informations, consultez la section [Montage de systèmes de fichiers](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html) dans le manuel *Amazon Elastic File System User Guide*. 

# Résoudre les problèmes liés à l'intégration Amazon EFS
<a name="sample-efs-troubleshooting"></a>

Les erreurs suivantes sont susceptibles de se produire lors de la configuration d'Amazon EFS avec CodeBuild.

**Topics**
+ [CLIENT\$1ERROR : échec du montage de « 127.0.0.1 :/». Autorisation refusée](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR : échec du montage de '127.0.0.1 :/'. Connexion réinitialisée par un pair](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR : erreur EC2 inattendue : UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR : échec du montage de « 127.0.0.1 :/». Autorisation refusée
<a name="sample-efs-troubleshooting.permission-denied"></a>

L'autorisation IAM n'est pas prise en charge pour le montage d'Amazon EFS avec CodeBuild. Si vous utilisez une politique de système de fichiers Amazon EFS personnalisée, vous devez accorder un accès en lecture et en écriture à tous les principaux IAM. Par exemple :

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR : échec du montage de '127.0.0.1 :/'. Connexion réinitialisée par un pair
<a name="sample-efs-troubleshooting.connection-reset"></a>

Cette erreur peut avoir deux causes :
+ Le sous-réseau CodeBuild VPC se trouve dans une zone de disponibilité différente de celle de la cible de montage Amazon EFS. Vous pouvez résoudre ce problème en ajoutant un sous-réseau VPC dans la même zone de disponibilité que la cible de montage Amazon EFS.
+ Le groupe de sécurité n'est pas autorisé à communiquer avec Amazon EFS. Vous pouvez résoudre ce problème en ajoutant une règle entrante pour autoriser tout le trafic provenant du VPC (ajoutez le bloc CIDR principal pour votre VPC) ou du groupe de sécurité lui-même.

## VPC\$1CLIENT\$1ERROR : erreur EC2 inattendue : UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

Cette erreur se produit lorsque tous les sous-réseaux de votre configuration VPC pour CodeBuild le projet sont des sous-réseaux publics. Vous devez disposer d'au moins un sous-réseau privé dans le VPC pour garantir la connectivité réseau. 

# AWS CodePipeline échantillons pour CodeBuild
<a name="sample-codepipeline"></a>

Cette section décrit des exemples d'intégrations entre CodePipeline et. CodeBuild


| Exemple | Description | 
| --- | --- | 
|  [Exemples d' CodePipeline/CodeBuild intégrations et de versions par lots](#sample-pipeline-batch)  |  Ces exemples montrent comment AWS CodePipeline créer un projet de génération utilisant des builds par lots.  | 
|  [Exemple d' CodePipeline/CodeBuild intégration avec plusieurs sources d'entrée et artefacts de sortie](#sample-pipeline-multi-input-output)  |  Cet exemple montre comment AWS CodePipeline créer un projet de génération qui utilise plusieurs sources d'entrée pour créer plusieurs artefacts de sortie.  | 

## Exemples d' CodePipeline/CodeBuild intégrations et de versions par lots
<a name="sample-pipeline-batch"></a>

AWS CodeBuild prend en charge les builds par lots. Les exemples suivants montrent comment AWS CodePipeline créer un projet de génération utilisant des builds par lots.

Vous pouvez utiliser un fichier au format JSON qui définit la structure de votre pipeline, puis l'utiliser avec le AWS CLI pour créer le pipeline. Pour plus d'informations, consultez la section [Référence sur la structure du AWS CodePipeline pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) dans le *guide de AWS CodePipeline l'utilisateur*.

### Construction par lots avec des artefacts individuels
<a name="sample-pipeline-batch.separate-artifacts"></a>

Utilisez le fichier JSON suivant comme exemple de structure de pipeline qui crée une construction par lots avec des artefacts distincts. Pour activer les intégrations par lots CodePipeline, définissez le `BatchEnabled` paramètre de l'`configuration`objet sur`true`.

```
{
  "pipeline": {
    "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "inputArtifacts": [],
            "name": "Source1",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source1"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-input-bucket-name>",
              "S3ObjectKey": "my-source-code-file-name.zip"
            },
            "runOrder": 1
          },
          {
            "inputArtifacts": [],
            "name": "Source2",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source2"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-other-input-bucket-name>",
              "S3ObjectKey": "my-other-source-code-file-name.zip"
            },
            "runOrder": 1
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "inputArtifacts": [
              {
                "name": "source1"
              },
              {
                "name": "source2"
              }
            ],
            "name": "Build",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "version": "1",
              "provider": "CodeBuild"
            },
            "outputArtifacts": [
              {
                "name": "build1"
              },
              {
                "name": "build1_artifact1"
              },
              {
                "name": "build1_artifact2"
              },
              {
                "name": "build2_artifact1"
              },
              {
                "name": "build2_artifact2"
              }
            ],
            "configuration": {
              "ProjectName": "my-build-project-name",
              "PrimarySource": "source1",
              "BatchEnabled": "true"
            },
            "runOrder": 1
          }
        ]
      }
    ],
    "artifactStore": {
      "type": "S3",
      "location": "<AWS-CodePipeline-internal-bucket-name>"
    },
    "name": "my-pipeline-name",
    "version": 1
  }
}
```

Voici un exemple de fichier CodeBuild buildspec qui fonctionnera avec cette configuration de pipeline.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
  secondary-artifacts:
    artifact1:
      files:
        - output_file
    artifact2:
      files:
        - output_file
```

Les noms des artefacts de sortie spécifiés dans le fichier JSON du pipeline doivent correspondre à l'identifiant des builds et des artefacts définis dans votre fichier buildspec. La syntaxe est *buildIdentifier* pour les artefacts principaux et *buildIdentifier* \$1 *artifactIdentifier* pour les artefacts secondaires.

Par exemple, pour le nom de l'artefact en sortie`build1`, CodeBuild téléchargera l'artefact principal de `build1` à l'emplacement de. `build1` Pour le nom de sortie`build1_artifact1`, CodeBuild téléchargera l'artefact secondaire `artifact1` de `build1` à l'emplacement de`build1_artifact1`, et ainsi de suite. Si un seul emplacement de sortie est spécifié, le nom doit être *buildIdentifier* uniquement.

Une fois que vous avez créé le fichier JSON, vous pouvez créer votre pipeline. Utilisez le AWS CLI pour exécuter la commande **create-pipeline** et transmettre le fichier au `--cli-input-json` paramètre. Pour plus d'informations, consultez la section [Créer un pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) dans le *guide de AWS CodePipeline l'utilisateur*. 

### Construction par lots avec des artefacts combinés
<a name="sample-pipeline-batch.combined-artifacts"></a>

Utilisez le fichier JSON suivant comme exemple de structure de pipeline qui crée une construction par lots avec des artefacts combinés. Pour activer les intégrations par lots CodePipeline, définissez le `BatchEnabled` paramètre de l'`configuration`objet sur`true`. Pour combiner les artefacts de construction au même endroit, définissez le `CombineArtifacts` paramètre de l'`configuration`objet sur`true`.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-input-bucket-name>",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-other-input-bucket-name>",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "output1 "
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1",
             "BatchEnabled": "true",
             "CombineArtifacts": "true"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "<AWS-CodePipeline-internal-bucket-name>"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

Voici un exemple de fichier CodeBuild buildspec qui fonctionnera avec cette configuration de pipeline.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
```

Si les artefacts combinés sont activés pour la génération par lots, une seule sortie est autorisée. CodeBuild combinera les principaux artefacts de toutes les versions dans un seul fichier ZIP.

Une fois que vous avez créé le fichier JSON, vous pouvez créer votre pipeline. Utilisez le AWS CLI pour exécuter la commande **create-pipeline** et transmettre le fichier au `--cli-input-json` paramètre. Pour plus d'informations, consultez la section [Créer un pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) dans le *guide de AWS CodePipeline l'utilisateur*. 

## Exemple d' CodePipeline/CodeBuild intégration avec plusieurs sources d'entrée et artefacts de sortie
<a name="sample-pipeline-multi-input-output"></a>

Un AWS CodeBuild projet peut utiliser plusieurs sources d'entrée. Il peut également créer plusieurs artefacts de sortie. Cet exemple montre comment AWS CodePipeline créer un projet de génération qui utilise plusieurs sources d'entrée pour créer plusieurs artefacts de sortie. Pour de plus amples informations, veuillez consulter [Exemples de projets avec plusieurs sources d'entrée et plusieurs artefacts de sortie](sample-multi-in-out.md).

Vous pouvez utiliser un fichier au format JSON qui définit la structure de votre pipeline, puis l'utiliser avec le AWS CLI pour créer le pipeline. Utilisez le fichier JSON suivant comme exemple de structure de pipeline qui crée une génération avec plusieurs sources d'entrée et plusieurs artefacts de sortie. Ultérieurement dans cet exemple, vous apprendrez comment ce fichier spécifie les différentes entrées et sorties. Pour plus d'informations, consultez [la référence sur la structure du CodePipeline pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) dans le *guide de AWS CodePipeline l'utilisateur*.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "my-input-bucket-name",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "my-other-input-bucket-name",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "AWS CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "artifact1"
            },
            {
              "name": "artifact2"
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "AWS-CodePipeline-internal-bucket-name"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

 Dans ce fichier JSON : 
+ L'une de vos sources d'entrée doit être désignée comme `PrimarySource`. Cette source est le répertoire dans lequel CodeBuild recherche et exécute votre fichier buildspec. Le mot clé `PrimarySource` est utilisé pour spécifier la source principale dans la `configuration` section du CodeBuild stage du fichier JSON. 
+ Chaque source d'entrée est installée dans son propre répertoire. Ce répertoire est stocké dans la variable d'environnement intégrée `$CODEBUILD_SRC_DIR` pour la source principale et `$CODEBUILD_SRC_DIR_yourInputArtifactName` pour toutes les autres sources. Pour le pipeline de cet exemple, les deux répertoires des sources d'entrée sont `$CODEBUILD_SRC_DIR` et `$CODEBUILD_SRC_DIR_source2`. Pour de plus amples informations, veuillez consulter [Variables d'environnement dans les environnements de génération](build-env-ref-env-vars.md). 
+ Les noms des artefacts de sortie spécifiés dans le fichier JSON du pipeline doivent correspondre aux noms des artefacts secondaires définis dans votre fichier buildspec. Ce pipeline utilise le fichier buildspec suivant. Pour de plus amples informations, veuillez consulter [Syntaxe d'un fichier buildspec](build-spec-ref.md#build-spec-ref-syntax). 

  ```
  version: 0.2
  
  phases:
    build:
      commands:
        - touch source1_file
        - cd $CODEBUILD_SRC_DIR_source2
        - touch source2_file
  
  artifacts:
    files:
      - '**/*'
    secondary-artifacts:
      artifact1:
        base-directory: $CODEBUILD_SRC_DIR
        files:
          - source1_file
      artifact2:
        base-directory: $CODEBUILD_SRC_DIR_source2
        files:
          - source2_file
  ```

 Une fois que vous avez créé le fichier JSON, vous pouvez créer votre pipeline. Utilisez le AWS CLI pour exécuter la commande **create-pipeline** et transmettre le fichier au `--cli-input-json` paramètre. Pour plus d'informations, consultez la section [Créer un pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) dans le *guide de AWS CodePipeline l'utilisateur*. 

# AWS Config échantillon avec CodeBuild
<a name="how-to-integrate-config"></a>

AWS Config fournit un inventaire de vos AWS ressources et un historique des modifications de configuration apportées à ces ressources. AWS Config prend désormais en charge en AWS CodeBuild tant que AWS ressource, ce qui signifie que le service peut suivre vos CodeBuild projets. Pour plus d'informations AWS Config, voir [Qu'est-ce que c'est AWS Config ?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) dans le *Guide AWS Config du développeur*.

Vous pouvez consulter les informations suivantes concernant les CodeBuild ressources sur la page **Inventaire des ressources** de la AWS Config console :
+ Chronologie de vos modifications CodeBuild de configuration.
+ Détails de configuration pour chaque CodeBuild projet.
+ Relations avec d'autres AWS ressources.
+ Liste des modifications apportées à vos CodeBuild projets.

**Topics**
+ [À utiliser CodeBuild avec AWS Config](#how-to-integrate-config-run)
+ [Étape 3 : Afficher AWS CodeBuild les données dans la AWS Config console](#viewing-config-details)

## À utiliser CodeBuild avec AWS Config
<a name="how-to-integrate-config-run"></a>

Les procédures décrites dans cette rubrique vous montrent comment configurer AWS Config et rechercher CodeBuild des projets.

**Topics**
+ [Conditions préalables](#how-to-create-a-build-project)
+ [Étape 1 : Configuration AWS Config](#setup-config)
+ [Étape 2 : Rechercher AWS CodeBuild des projets](#lookup-projects)

### Conditions préalables
<a name="how-to-create-a-build-project"></a>

Créez votre AWS CodeBuild projet. Pour obtenir des instructions, veuillez consulter [Création d'un projet de génération](create-project.md).

### Étape 1 : Configuration AWS Config
<a name="setup-config"></a>
+ [Configuration de AWS Config (console)](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [Configuration de AWS Config (AWS CLI)](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

**Note**  
Une fois la configuration terminée, l'affichage des AWS CodeBuild projets dans la AWS Config console peut prendre jusqu'à 10 minutes.

### Étape 2 : Rechercher AWS CodeBuild des projets
<a name="lookup-projects"></a>

1. Connectez-vous à la console de AWS gestion et ouvrez la AWS Config console à l'adresse [https://console.aws.amazon.com/config](https://console.aws.amazon.com/config). 

1. Sur la page **Inventaire des ressources**, sélectionnez **AWS CodeBuild Projet** sous **Type de ressource**. Faites défiler la page vers le bas et cochez la case **CodeBuilddu projet**.

1. Choisissez **Recherche**.

1. Une fois la liste des CodeBuild projets ajoutée, cliquez sur le lien du nom du CodeBuild projet dans la colonne **Config timeline**.

## Étape 3 : Afficher AWS CodeBuild les données dans la AWS Config console
<a name="viewing-config-details"></a>

Lorsque vous recherchez des ressources sur la page **Inventaire des ressources**, vous pouvez choisir la AWS Config chronologie pour afficher les détails de votre CodeBuild projet. La page des détails d'une ressource fournit des informations sur la configuration, les relations et le nombre de modifications apportées à cette ressource. 

Les blocs situés en haut de la page constituent la chronologie. La chronologie affiche la date et l'heure de l'enregistrement.

Pour plus d'informations, consultez la section [Affichage des détails de configuration dans la AWS Config console](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource-console.html) dans le *Guide du AWS Config développeur*.

# Créer un exemple de notifications pour CodeBuild
<a name="sample-build-notifications"></a>

Amazon CloudWatch Events dispose d'un support intégré pour AWS CodeBuild. CloudWatch Les événements sont un flux d'événements système décrivant les modifications apportées à vos AWS ressources. Avec CloudWatch Events, vous rédigez des règles déclaratives pour associer les événements intéressants aux actions automatisées à entreprendre. Cet exemple utilise Amazon CloudWatch Events et Amazon Simple Notification Service (Amazon SNS) pour envoyer des notifications de build aux abonnés chaque fois que les builds réussissent, échouent, passent d'une phase de construction à une autre, ou toute combinaison de ces événements.

**Important**  
L'exécution de cet échantillon peut entraîner des frais sur votre AWS compte. Cela inclut les éventuels frais pour CodeBuild et pour les AWS ressources et les actions liées à Amazon CloudWatch et Amazon SNS. Pour plus d'informations, consultez les [CodeBuild sections Tarification](https://aws.amazon.com/codebuild/pricing), [ CloudWatchTarification Amazon](https://aws.amazon.com/cloudwatch/pricing) et Tarification [Amazon SNS.](https://aws.amazon.com/sns/pricing)

**Topics**
+ [Exécutez l'exemple de notifications de build](#sample-build-notifications-running)
+ [Référence du format d'entrée des notifications de génération](sample-build-notifications-ref.md)

## Exécutez l'exemple de notifications de build
<a name="sample-build-notifications-running"></a>

Utilisez la procédure suivante pour exécuter l'exemple de notifications de génération.

**Pour exécuter cet exemple**

1. Si vous avez déjà configuré une rubrique et que vous êtes abonné sur Amazon SNS et que vous souhaitez utiliser pour cet exemple, passez à l'étape 4. Sinon, si vous utilisez un utilisateur IAM au lieu d'un compte AWS root ou un utilisateur administrateur pour travailler avec Amazon SNS, ajoutez la déclaration suivante (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1*entre *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1* et) à l'utilisateur (ou au groupe IAM auquel l'utilisateur est associé). L'utilisation d'un compte AWS root n'est pas recommandée. Cette déclaration permet de consulter, de créer, de s'abonner et de tester l'envoi de notifications à des rubriques sur Amazon SNS. Des ellipses (`...`) sont utilisées par souci de concision et pour vous aider à déterminer l'endroit où ajouter l'instruction. Ne supprimez aucune instruction, et n'entrez pas ces ellipses dans la stratégie existante.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:CreateTopic",
                   "sns:GetTopicAttributes",
                   "sns:List*",
                   "sns:Publish",
                   "sns:SetTopicAttributes",
                   "sns:Subscribe"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**Note**  
L'entité IAM qui modifie cette politique doit être autorisée dans IAM à modifier les politiques.  
Pour plus d'informations, consultez la section [Modification des politiques gérées par le client](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) ou la section « Pour modifier ou supprimer une politique intégrée pour un groupe, un utilisateur ou un rôle » dans [Utilisation des politiques intégrées (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) du guide de l'utilisateur *IAM*.

1. Créez ou identifiez un sujet dans Amazon SNS. AWS CodeBuild utilise CloudWatch Events pour envoyer des notifications de build à cette rubrique via Amazon SNS. 

   Pour créer une rubrique:

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

   1. Choisissez **Créer une rubrique**. 

   1. Dans **Create new topic (Créer une rubrique)**, pour **Topic name (Nom de rubrique)**, saisissez un nom de rubrique (par exemple, **CodeBuildDemoTopic**). (Si vous choisissez un autre nom, remplacez-le dans l'ensemble de cet exemple.) 

   1. Choisissez **Créer une rubrique**.

   1. Sur la CodeBuildDemoTopic page **Détails du sujet :**, copiez la valeur **ARN du sujet**. Vous avez besoin de cette valeur pour l’étape suivante. 

        
![\[La valeur ARN du sujet.\]](http://docs.aws.amazon.com/fr_fr/codebuild/latest/userguide/images/topic-arn.png)

      

   Pour plus d'informations, consultez la section [Créer une rubrique](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) dans le manuel *Amazon SNS Developer Guide*.

1. Abonnez un ou plusieurs destinataires à la rubrique pour recevoir des notifications par e-mail. 

   Pour abonner un destinataire à une rubrique :

   1. La console Amazon SNS étant ouverte depuis l'étape précédente, dans le volet de navigation, choisissez **Subscriptions**, puis **Create** subscription.

   1. Dans la boîte de dialogue **Create subscription (Créer un abonnement**, pour **Topic ARN (ARN de la rubrique)**, collez l'ARN de la rubrique que vous avez copié à l'étape précédente.

   1. Pour **Protocole**, choisissez **E-mail**.

   1. Indiquez l'adresse e-mail complète du destinataire dans **Endpoint (Point de terminaison)**. 

        
![\[Configuration de l'abonnement.\]](http://docs.aws.amazon.com/fr_fr/codebuild/latest/userguide/images/create-subscription.png)

      

   1. Choisissez **Create Subscription** (Créer un abonnement).

   1. Amazon SNS envoie un e-mail de confirmation d'abonnement au destinataire. Pour commencer à recevoir des notifications par e-mail, le destinataire doit choisir le lien **Confirmer l'abonnement** dans l'e-mail de confirmation d'abonnement. Une fois que le destinataire a cliqué sur le lien, s'il est correctement inscrit, Amazon SNS affiche un message de confirmation dans le navigateur Web du destinataire.

   Pour plus d'informations, consultez la section [S'abonner à une rubrique](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) du manuel *Amazon SNS Developer Guide*.

1. Si vous utilisez un utilisateur plutôt qu'un compte AWS root ou un utilisateur administrateur pour travailler avec CloudWatch Events, ajoutez l'instruction suivante (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* et*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) à l'utilisateur (ou au groupe IAM auquel l'utilisateur est associé). L'utilisation d'un compte AWS root n'est pas recommandée. Cette déclaration est utilisée pour permettre à l'utilisateur de travailler avec CloudWatch Events. Des ellipses (`...`) sont utilisées par souci de concision et pour vous aider à déterminer l'endroit où ajouter l'instruction. Ne supprimez aucune instruction, et n'entrez pas ces ellipses dans la stratégie existante.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "events:*",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------
**Note**  
L'entité IAM qui modifie cette politique doit être autorisée dans IAM à modifier les politiques.  
Pour plus d'informations, consultez la section [Modification des politiques gérées par le client](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) ou la section « Pour modifier ou supprimer une politique intégrée pour un groupe, un utilisateur ou un rôle » dans [Utilisation des politiques intégrées (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) du guide de l'utilisateur *IAM*.

1. Créez une règle dans CloudWatch Events. Pour ce faire, ouvrez la CloudWatch console, dans [https://console.aws.amazon.com/cloudwatch.](https://console.aws.amazon.com/cloudwatch)

1. Dans le volet de navigation, sous **Events**, choisissez **Rules**, puis **Create rule**. 

1. Sur la page **Step 1: Create rule page (Étape 1 : Créer une page de règle)**, les options **Event Pattern (Modèle d'événement)** et **Build event pattern to match events by service (Créer un modèle d'événement pour correspondre aux événements en fonction du service)** doivent toujours être activées. 

1. Pour **Service Name (Nom du service)**, choisissez **CodeBuild**. Pour **Event Type (Type d'événement)**, vous devez toujours choisir **All Events (Tous les événements)**.

1. Le code suivant doit être affiché dans l'**aperçu du modèle d'événement** :

   ```
   {
     "source": [ 
       "aws.codebuild"
     ]
   }
   ```

1. Choisissez **Edit (Modifier)** pour remplacer le code présent dans **Event Pattern Preview (Aperçu du modèle d'événement)** par l'un des deux modèles de règle suivants.

   Ce premier modèle de règle déclenche un événement chaque fois qu'une génération commence ou se termine, pour les projets de génération spécifiés dans AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build State Change"
     ],
     "detail": {
       "build-status": [
         "IN_PROGRESS",
         "SUCCEEDED", 
         "FAILED",
         "STOPPED" 
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   Dans la règle précédente, effectuez les modifications de code suivantes en fonction de vos besoins.
   + Pour déclencher un événement chaque fois qu'une génération commence ou se termine, laissez toutes les valeurs indiquées dans la zone `build-status` ou supprimez complètement la zone `build-status`. 
   + Pour déclencher un événement uniquement lorsqu'une génération est terminée, supprimez `IN_PROGRESS` dans la zone `build-status`. 
   + Pour déclencher un événement uniquement lorsqu'une génération commence, supprimez toutes les valeurs sauf `IN_PROGRESS` dans la zone `build-status`.
   + Pour déclencher des événements inhérents à tous les projets de génération, supprimez complètement la zone `project-name`.
   + Pour déclencher des événements uniquement pour les projets de génération individuels, spécifiez le nom de chaque projet de génération dans la zone `project-name`. 

   Ce second modèle de règle déclenche un événement chaque fois qu'une génération passe d'une phase à une autre pour les projets de génération spécifiés dans AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build Phase Change" 
     ],
     "detail": {
       "completed-phase": [
         "SUBMITTED",
         "PROVISIONING",
         "DOWNLOAD_SOURCE",
         "INSTALL",
         "PRE_BUILD",
         "BUILD",
         "POST_BUILD",
         "UPLOAD_ARTIFACTS",
         "FINALIZING"
       ],
       "completed-phase-status": [
         "TIMED_OUT",
         "STOPPED",
         "FAILED", 
         "SUCCEEDED",
         "FAULT",
         "CLIENT_ERROR"
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   Dans la règle précédente, effectuez les modifications de code suivantes en fonction de vos besoins.
   + Pour déclencher un événement à chaque changement de phase de génération (ce qui peut générer l'envoi de jusqu'à 9 notifications par génération), laissez toutes les valeurs indiquées dans la zone `completed-phase` ou supprimez complètement le tableau `completed-phase`.
   + Pour déclencher des événements uniquement lors des changements de phase de génération individuelle, supprimez le nom de chaque phase de génération pour laquelle vous ne souhaitez pas déclencher un événement dans la zone `completed-phase`.
   + Pour déclencher un événement à chaque changement de statut de phase de génération, laissez toutes les valeurs indiquées dans la zone `completed-phase-status` ou supprimez complètement la zone `completed-phase-status`.
   + Pour déclencher des événements uniquement lors des changements de statut de phase de génération individuelle, supprimez le nom de chaque statut de phase de génération pour lequel vous ne souhaitez pas déclencher un événement dans la zone `completed-phase-status`.
   + Pour déclencher des événements pour tous les projets de génération, supprimez la zone `project-name`.
   + Pour déclencher des événements pour les projets de génération individuels, spécifiez le nom de chaque projet de génération dans la zone `project-name`. 

   Pour plus d'informations sur les modèles d'événements, consultez la section [Modèles d'événements](https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html) dans le guide de EventBridge l'utilisateur Amazon.

   Pour plus d'informations sur le filtrage à l'aide de modèles d'événements, consultez la section [Filtrage basé sur le contenu avec des modèles d'événements](https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html) dans le guide de EventBridge l'utilisateur Amazon.
**Note**  
Si vous souhaitez déclencher des événements à la fois pour les changements d'état de génération et les changements de phase de génération, vous devez créer deux règles distinctes, une pour les changements d'état de génération et une autre pour les changements de phase de génération. Si vous essayez de combiner les deux règles en une seule, la règle combinée peut entraîner des résultats inattendus ou un arrêt de la procédure.

   Une fois que vous avez terminé le remplacement du code, choisissez **Save**.

1. Pour **Targets** (Cibles), choisissez **Add target** (Ajouter une cible). 

1. Dans la liste des cibles, sélectionnez **Rubrique SNS**. 

1. Pour **Topic**, choisissez la rubrique que vous avez identifiée ou créée précédemment. 

1. Développez **Configurer l'entrée**, puis choisissez **Transformateur d'entrée**. 

1. Dans la zone **Input Path (Chemin d'entrée)**, tapez l'un des chemins d'entrée ci-après.

   Pour une règle dont l'élément `detail-type` a pour valeur `CodeBuild Build State Change`, tapez ce qui suit.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
   ```

   Pour une règle dont l'élément `detail-type` a pour valeur `CodeBuild Build Phase Change`, tapez ce qui suit.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
   ```

   Pour obtenir d'autres types d'informations, consultez [Référence du format d'entrée des notifications de génération](sample-build-notifications-ref.md).

1. Dans la zone **Input Template (Modèle d'entrée)**, tapez l'un des modèles d'entrée ci-après.

   Pour une règle dont l'élément `detail-type` a pour valeur `CodeBuild Build State Change`, tapez ce qui suit.

   ```
   "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
   ```

   Pour une règle dont l'élément `detail-type` a pour valeur `CodeBuild Build Phase Change`, tapez ce qui suit.

   ```
   "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
   ```

1. Choisissez **Configure details** (Configurer les détails).

1. Sur la page **Step 2: Configure rule details (Étape 2 : Configurer les détails de la règle)**, tapez un nom et une description. Pour **State (État)**, la case **Enabled (Activé)** doit rester sélectionnée.

1. Choisissez **Créer une règle**. 

1. Créez des projets de build, exécutez les builds et consultez les informations de build.

1. Confirmez CodeBuild que les notifications de build sont désormais correctement envoyées. Par exemple, vérifiez si les e-mails de notification de build sont à présent dans votre boîte de réception.

Pour modifier le comportement d'une règle, dans la CloudWatch console, choisissez la règle que vous souhaitez modifier, sélectionnez **Actions**, puis sélectionnez **Modifier**. Modifiez la règle, choisissez **Configure details (Configurer les détails)**, puis choisissez **Mettre à jour la règle (Update rule)**.

Pour arrêter d'utiliser une règle pour envoyer des notifications de build, dans la CloudWatch console, choisissez la règle que vous souhaitez arrêter d'utiliser, choisissez **Actions**, puis choisissez **Désactiver**.

Pour supprimer complètement une règle, dans la CloudWatch console, choisissez la règle que vous souhaitez supprimer, choisissez **Actions**, puis choisissez **Supprimer**.

# Référence du format d'entrée des notifications de génération
<a name="sample-build-notifications-ref"></a>

CloudWatch fournit des notifications au format JSON.

Les notifications de changement d'état de génération utilisent le format suivant :

```
{
  "version": "0",
  "id": "c030038d-8c4d-6141-9545-00ff7b7153EX",
  "detail-type": "CodeBuild Build State Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:28Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "build-status": "SUCCEEDED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
         {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]
    },
    "current-phase": "COMPLETED",
    "current-phase-context": "[]",
    "version": "1"
  }
}
```

Les notifications de changement de phase de génération utilisent le format suivant :

```
{
  "version": "0",
  "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX",
  "detail-type": "CodeBuild Build Phase Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:21Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "completed-phase": "COMPLETED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "completed-phase-context": "[]",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]  
    },
    "completed-phase-status": "SUCCEEDED",
    "completed-phase-duration-seconds": 4,
    "version": "1",
    "completed-phase-start": "Sep 1, 2017 4:14:21 PM",
    "completed-phase-end": "Sep 1, 2017 4:14:26 PM"
  }
}
```