

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.

# Déboguer les builds avec le gestionnaire de session
<a name="session-manager"></a>

Dans AWS CodeBuild, vous pouvez suspendre une compilation en cours, puis utiliser le gestionnaire de AWS Systems Manager session pour vous connecter au conteneur de génération et afficher l'état du conteneur.

**Note**  
Cette fonctionnalité n'est pas disponible dans les environnements Windows.

**Topics**
+ [Conditions préalables](#ssm.prerequisites)
+ [Suspendre le build](#ssm-pause-build)
+ [Commencez la construction](#ssm-start-build)
+ [Connectez-vous au conteneur de construction](#ssm-connect)
+ [Reprendre le build](#ssm-resume-build)

## Conditions préalables
<a name="ssm.prerequisites"></a>

Pour autoriser l'utilisation du gestionnaire de session avec la session de génération, vous devez activer la connexion à la session pour la génération. Il existe deux prérequis :
+ CodeBuild L'agent SSM est déjà installé et l'agent SSM est activé sur les images sélectionnées standard de Linux. ContainerMode 

  Si vous utilisez une image personnalisée pour votre build, procédez comme suit :

  1. Installez SSM Agent. Pour plus d'informations, consultez la section [Installation manuelle de l'agent SSM sur les instances EC2 pour Linux](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) dans le guide de l' AWS Systems Manager utilisateur. La version de l'agent SSM doit être 3.0.1295.0 ou ultérieure.

  1. Copiez le fichier [https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json](https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json) dans le `/etc/amazon/ssm/` répertoire de votre image. Cela active le mode conteneur dans l'agent SSM.
**Note**  
Les images personnalisées nécessiteraient la mise à jour de l'agent SSM le plus récent pour que cette fonctionnalité fonctionne comme prévu.
+ Le rôle CodeBuild de service doit respecter la politique SSM suivante :

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	  
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
         ],
         "Resource": "*"
       }
     ]
  }
  ```

------

  Vous pouvez demander à la CodeBuild console d'associer automatiquement cette politique à votre rôle de service lorsque vous démarrez la génération. Vous pouvez également associer cette politique à votre rôle de service manuellement.
+ Si l'**audit et la journalisation de l'activité des sessions** sont activés dans les préférences de Systems Manager, le rôle de CodeBuild service doit également disposer d'autorisations supplémentaires. Les autorisations sont différentes en fonction de l'endroit où les journaux sont stockés.  
CloudWatch Journaux  
Si vous utilisez CloudWatch Logs pour stocker vos journaux, ajoutez l'autorisation suivante au rôle CodeBuild de service :    
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "logs:DescribeLogGroups",
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*:*"
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:MyLogGroup:*"
          }
      ]
  }
  ```  
Amazon S3  
Si vous utilisez Amazon S3 pour stocker vos journaux, ajoutez l'autorisation suivante au rôle CodeBuild de service :    
****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:GetEncryptionConfiguration",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::<bucket-name>",
          "arn:aws:s3:::<bucket-name>/*"
        ]
      }
    ]
  }
  ```

  Pour plus d'informations, consultez la section [Audit et journalisation de l'activité des sessions](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging-auditing.html) dans le *guide de AWS Systems Manager l'utilisateur*.

## Suspendre le build
<a name="ssm-pause-build"></a>

Pour suspendre la génération, insérez la **codebuild-breakpoint** commande dans l'une des phases de construction de votre fichier buildspec. La construction sera suspendue à ce stade, ce qui vous permettra de vous connecter au conteneur de construction et de visualiser le conteneur dans son état actuel. 

Par exemple, ajoutez ce qui suit aux phases de construction dans votre fichier buildspec.

```
phases:
  pre_build:
    commands:
      - echo Entered the pre_build phase...
      - echo "Hello World" > /tmp/hello-world
      - codebuild-breakpoint
```

Ce code crée le `/tmp/hello-world` fichier, puis suspend la compilation à ce stade.

## Commencez la construction
<a name="ssm-start-build"></a>

Pour autoriser l'utilisation du gestionnaire de session avec la session de génération, vous devez activer les connexions de session pour la génération. Pour ce faire, lors du démarrage de la compilation, procédez comme suit :

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

1. Dans le volet de navigation, choisissez **Projets de génération**. Choisissez le projet de construction, puis choisissez **Démarrer la construction avec des remplacements**.

1. Choisissez **Advanced build overrides (Remplacements avancés de génération)**.

1. Dans la section **Environnement**, choisissez l'option **Activer la connexion à la session**. Si cette option n'est pas sélectionnée, toutes les **codebuild-resume** commandes **codebuild-breakpoint** et sont ignorées.

1. Apportez les autres modifications souhaitées, puis choisissez **Démarrer la construction**. 

1. Surveillez l'état de construction dans la console. Lorsque la session est disponible, le lien du **gestionnaire de AWS session** apparaît dans la section **État de la création**.

## Connectez-vous au conteneur de construction
<a name="ssm-connect"></a>

Vous pouvez vous connecter au conteneur de construction de deux manières :

CodeBuild console  
Dans un navigateur Web, ouvrez le lien du **gestionnaire de AWS session** pour vous connecter au conteneur de construction. Une session de terminal s'ouvre pour vous permettre de parcourir et de contrôler le conteneur de construction. 

AWS CLI  
Le plug-in Session Manager doit être installé sur votre machine locale pour cette procédure. Pour plus d'informations, voir [Installer le plug-in du gestionnaire de session pour la AWS CLI](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) dans le guide de AWS Systems Manager l'utilisateur. 

1. Appelez l'**batch-get-builds**API avec l'ID de build pour obtenir des informations sur le build, y compris l'identifiant cible de session. Le nom de propriété de l'identifiant cible de session varie en fonction du type de sortie de la `aws` commande. C'est pourquoi `--output json` il est ajouté à la commande.

   ```
   aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
   ```

1. Copiez la valeur `sessionTarget` de la propriété. Le nom de la `sessionTarget` propriété peut varier en fonction du type de sortie de la `aws` commande. C'est pourquoi `--output json` il est ajouté à la commande à l'étape précédente.

1. Utilisez la commande suivante pour vous connecter au conteneur de construction.

   ```
   aws ssm start-session --target <sessionTarget> --region <region>
   ```

Pour cet exemple, vérifiez que le `/tmp/hello-world` fichier existe et contient le texte`Hello World`.

## Reprendre le build
<a name="ssm-resume-build"></a>

Une fois que vous avez terminé d'examiner le conteneur de construction, émettez la **codebuild-resume** commande depuis le shell du conteneur.

```
$ codebuild-resume
```