

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.

# Exécuter le logiciel AWS IoT Greengrass Core dans un conteneur Docker
<a name="run-greengrass-docker"></a>

AWS IoT Greengrass peut être configuré pour fonctionner dans un conteneur Docker. Docker est une plate-forme qui fournit les outils nécessaires pour créer, exécuter, tester et déployer des applications basées sur des conteneurs Linux. Lorsque vous exécutez une image AWS IoT Greengrass Docker, vous pouvez choisir de fournir vos AWS informations d'identification au conteneur Docker et d'autoriser le programme d'installation du logiciel AWS IoT Greengrass Core à provisionner automatiquement les AWS ressources dont un périphérique principal Greengrass a besoin pour fonctionner. Si vous ne souhaitez pas fournir AWS d'informations d'identification, vous pouvez provisionner manuellement les AWS ressources et exécuter le logiciel AWS IoT Greengrass Core dans le conteneur Docker.

**Topics**
+ [Exigences et plateformes prises en charge](#greengrass-docker-supported-platforms)
+ [Téléchargements de logiciels](#greengrass-docker-downloads)
+ [Choisissez le mode de provisionnement AWS des ressources](#greengrass-docker-resource-provisioning)
+ [Construire l' AWS IoT Greengrass image à partir d'un Dockerfile](build-greengrass-dockerfile.md)
+ [Exécuter AWS IoT Greengrass dans Docker avec provisionnement automatique](run-greengrass-docker-automatic-provisioning.md)
+ [Exécuter AWS IoT Greengrass dans Docker avec provisionnement manuel](run-greengrass-docker-manual-provisioning.md)
+ [Résolution des problèmes AWS IoT Greengrass dans un conteneur Docker](docker-troubleshooting.md)

## Exigences et plateformes prises en charge
<a name="greengrass-docker-supported-platforms"></a>

Les ordinateurs hôtes doivent répondre aux exigences minimales suivantes pour installer et exécuter le logiciel AWS IoT Greengrass Core dans un conteneur Docker :
+ <a name="docker-host-reqs"></a>Système d'exploitation basé sur Linux doté d'une connexion Internet.
+ <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) version 18.09 ou ultérieure.
+ <a name="docker-compose-reqs"></a>(Facultatif) [Docker Compose](https://docs.docker.com/compose/install/) version 1.22 ou ultérieure. Docker Compose n'est requis que si vous souhaitez utiliser la CLI Docker Compose pour exécuter vos images Docker.

Pour exécuter les composants de la fonction Lambda dans le conteneur Docker, vous devez configurer le conteneur pour répondre à des exigences supplémentaires. Pour de plus amples informations, veuillez consulter [Exigences relatives à la fonction Lambda](setting-up.md#greengrass-v2-lambda-requirements).

### Exécuter les composants en mode processus
<a name="docker-container-mode-limitation"></a>

AWS IoT Greengrass ne prend pas en charge l'exécution de fonctions Lambda ou de composants AWS fournis par Lambda dans un environnement d'exécution isolé à l'intérieur du AWS IoT Greengrass conteneur Docker. Vous devez exécuter ces composants en mode processus sans aucune isolation.

Lorsque vous configurez un composant de fonction Lambda, définissez le mode d'isolation sur **Aucun** conteneur. Pour de plus amples informations, veuillez consulter [Exécuter AWS Lambda des fonctions](run-lambda-functions.md). 

Lorsque vous déployez l'un des composants AWS fournis ci-dessous, mettez à jour la configuration de chaque composant pour définir le `containerMode` paramètre sur. `NoContainer` Pour plus d'informations sur les mises à jour de configuration, consultez[Mettre à jour les configurations des composants](update-component-configurations.md).
+ [CloudWatch métriques](cloudwatch-metrics-component.md)
+ [Défenseur de l'appareil](device-defender-component.md)
+ [Firehose](kinesis-firehose-component.md)
+ [Adaptateur de protocole Modbus-RTU](modbus-rtu-protocol-adapter-component.md)
+ [Amazon SNS](sns-component.md)

## AWS IoT Greengrass Téléchargements du logiciel Docker
<a name="greengrass-docker-downloads"></a>

AWS IoT Greengrass fournit un Dockerfile pour créer une image de conteneur sur laquelle le logiciel AWS IoT Greengrass Core et ses dépendances sont installés sur une image de base Amazon Linux 2 (x86\$164). Vous pouvez modifier l'image de base dans le Dockerfile pour l'exécuter AWS IoT Greengrass sur une architecture de plate-forme différente.

Téléchargez le package Dockerfile depuis. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker)

Le Dockerfile utilise une ancienne version de Greengrass. Vous devez mettre à jour le fichier pour utiliser la version de Greengrass que vous souhaitez. Pour plus d'informations sur la création de l'image du AWS IoT Greengrass conteneur à partir du Dockerfile, consultez. [Créez l'image du AWS IoT Greengrass conteneur à partir d'un Dockerfile](build-greengrass-dockerfile.md)

## Choisissez le mode de provisionnement AWS des ressources
<a name="greengrass-docker-resource-provisioning"></a>

Lorsque vous installez le logiciel AWS IoT Greengrass Core dans un conteneur Docker, vous pouvez choisir de provisionner automatiquement les AWS ressources dont un appareil Greengrass a besoin pour fonctionner ou d'utiliser des ressources que vous provisionnez manuellement.
+ **Approvisionnement automatique des ressources** : le programme d'installation AWS IoT provisionne l' AWS IoT objet, le groupe d'objets, le rôle IAM et l'alias de AWS IoT rôle lorsque vous exécutez l'image du AWS IoT Greengrass conteneur pour la première fois. Le programme d'installation peut également déployer les outils de développement locaux sur le périphérique principal, afin que vous puissiez utiliser l'appareil pour développer et tester des composants logiciels personnalisés. Pour provisionner automatiquement ces ressources, vous devez fournir des AWS informations d'identification en tant que variables d'environnement à l'image Docker.

  Pour utiliser le provisionnement automatique, vous devez définir la variable d'environnement Docker `PROVISION=true` et monter un fichier d'informations d'identification pour fournir vos AWS informations d'identification au conteneur.
+ **Approvisionnement manuel des ressources** : si vous ne souhaitez pas fournir AWS d'informations d'identification au conteneur, vous pouvez configurer manuellement les AWS ressources avant d'exécuter l'image du AWS IoT Greengrass conteneur. Vous devez créer un fichier de configuration pour fournir des informations sur ces ressources au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker.

  Pour utiliser le provisionnement manuel, vous devez définir la variable d'environnement Docker. `PROVISION=false` Le provisionnement manuel est l'option par défaut.

Pour de plus amples informations, veuillez consulter [Créez l'image du AWS IoT Greengrass conteneur à partir d'un Dockerfile](build-greengrass-dockerfile.md).

# Créez l'image du AWS IoT Greengrass conteneur à partir d'un Dockerfile
<a name="build-greengrass-dockerfile"></a>

AWS fournit un Dockerfile que vous pouvez télécharger et utiliser pour exécuter le logiciel AWS IoT Greengrass Core dans un conteneur Docker. Les Dockerfiles contiennent le code source permettant de créer des images de AWS IoT Greengrass conteneurs. 

Avant de créer une image de AWS IoT Greengrass conteneur, vous devez configurer votre Dockerfile pour sélectionner la version du logiciel AWS IoT Greengrass Core que vous souhaitez installer. Vous pouvez également configurer des variables d'environnement pour choisir le mode de provisionnement des ressources lors de l'installation et personnaliser d'autres options d'installation. Cette section décrit comment configurer et créer une image AWS IoT Greengrass Docker à partir d'un Dockerfile. 



## Téléchargez le package Dockerfile
<a name="download-dockerfile-package"></a>

Vous pouvez télécharger le package AWS IoT Greengrass Dockerfile à l'adresse suivante : GitHub

[Référentiel Docker AWS Greengrass](https://github.com/aws-greengrass/aws-greengrass-docker)

Après avoir téléchargé le package, extrayez le contenu `download-directory/aws-greengrass-docker-nucleus-version` dans le dossier de votre ordinateur. Le Dockerfile utilise une ancienne version de Greengrass. Vous devez mettre à jour le fichier pour utiliser la version de Greengrass que vous souhaitez.

## Spécifiez la version du logiciel AWS IoT Greengrass Core
<a name="set-dockerfile-build-argument"></a>

Utilisez l'argument build suivant dans le Dockerfile pour spécifier la version du logiciel AWS IoT Greengrass Core que vous souhaitez utiliser dans l'image AWS IoT Greengrass Docker. Par défaut, le Dockerfile utilise la dernière version du logiciel AWS IoT Greengrass Core.

`GREENGRASS_RELEASE_VERSION`  
Version du logiciel AWS IoT Greengrass Core. Par défaut, le Dockerfile télécharge la dernière version disponible du noyau Greengrass. Définissez la valeur sur la version du noyau que vous souhaitez télécharger.

## Définir les variables d'environnement
<a name="set-dockerfile-environment-variables"></a>

Les variables d'environnement vous permettent de personnaliser la façon dont le logiciel AWS IoT Greengrass Core est installé dans le conteneur Docker. Vous pouvez définir des variables d'environnement pour votre image AWS IoT Greengrass Docker de différentes manières. 
+ Pour utiliser les mêmes variables d'environnement pour créer plusieurs images, définissez les variables d'environnement directement dans le Dockerfile.
+ Si vous avez l'`docker run`habitude de démarrer votre conteneur, transmettez des variables d'environnement en tant qu'arguments dans la commande ou définissez des variables d'environnement dans un fichier de variables d'environnement, puis transmettez le fichier en argument. Pour plus d'informations sur la définition des variables d'environnement dans Docker, consultez les [variables d'environnement](https://docs.docker.com/engine/reference/commandline/run/#env) dans la documentation Docker.
+ Si vous avez l'`docker-compose up`habitude de démarrer votre conteneur, définissez les variables d'environnement dans un fichier de variables d'environnement, puis transmettez le fichier en argument. Pour plus d'informations sur la définition des variables d'environnement dans Compose, consultez la [documentation Docker](https://docs.docker.com/compose/environment-variables/).

Vous pouvez configurer les variables d'environnement suivantes pour l'image AWS IoT Greengrass Docker.

**Note**  
Ne modifiez pas la `TINI_KILL_PROCESS_GROUP` variable dans le Dockerfile. Cette variable permet le transfert `SIGTERM` PIDs à tous les membres du groupe PID afin que le logiciel AWS IoT Greengrass Core puisse s'arrêter correctement lorsque le conteneur Docker est arrêté.

`GGC_ROOT_PATH`  
(Facultatif) Le chemin d'accès au dossier du conteneur à utiliser comme racine pour le logiciel AWS IoT Greengrass Core.  
Valeur par défaut : `/greengrass/v2`

`PROVISION`  
(Facultatif) Détermine si le AWS IoT Greengrass Core fournit AWS des ressources.   
+ Si vous le spécifiez`true`, le logiciel AWS IoT Greengrass Core enregistre l'image du conteneur en tant qu' AWS IoT objet et fournit les AWS ressources dont le périphérique principal Greengrass a besoin. Le logiciel de AWS IoT Greengrass base fournit n' AWS IoT importe quel objet, (facultatif) un AWS IoT groupe d'objets, un rôle IAM et un alias de AWS IoT rôle. Pour de plus amples informations, veuillez consulter [Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement automatique des ressources](run-greengrass-docker-automatic-provisioning.md).
+ Si vous le spécifiez`false`, vous devez créer un fichier de configuration à fournir au programme d'installation AWS IoT Greengrass Core qui indique d'utiliser les AWS ressources et les certificats que vous avez créés manuellement. Pour de plus amples informations, veuillez consulter [Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement manuel des ressources](run-greengrass-docker-manual-provisioning.md).
Par défaut: `false`

`AWS_REGION`  
(Facultatif) Le Région AWS logiciel AWS IoT Greengrass Core utilise pour récupérer ou créer les AWS ressources requises.   
Valeur par défaut : `us-east-1`.

`THING_NAME`  
(Facultatif) Le nom de l' AWS IoT objet que vous enregistrez en tant que périphérique principal. Si l'objet portant ce nom n'existe pas dans votre ordinateur Compte AWS, c'est le logiciel AWS IoT Greengrass Core qui le crée.   
Vous devez spécifier `PROVISION=true` pour appliquer cet argument.  
Par défaut : `GreengrassV2IotThing_` plus un UUID aléatoire.

`THING_GROUP_NAME`  
(Facultatif) Le nom du groupe d'objets auquel vous ajoutez ce périphérique principal est. AWS IoT Si un déploiement cible ce groupe d'objets, celui-ci et les autres appareils principaux de ce groupe reçoivent ce déploiement lorsqu'ils se connectent à celui-ci AWS IoT Greengrass. AWS IoT Si le groupe d'objets portant ce nom n'existe pas dans votre Compte AWS répertoire, le logiciel AWS IoT Greengrass Core le crée.  
Vous devez spécifier `PROVISION=true` pour appliquer cet argument.

`TES_ROLE_NAME`  
(Facultatif) Nom du rôle IAM à utiliser pour obtenir des AWS informations d'identification permettant à l'appareil principal de Greengrass d'interagir avec les AWS services. Si le rôle portant ce nom n'existe pas dans votre répertoire Compte AWS, le logiciel AWS IoT Greengrass Core le crée avec la `GreengrassV2TokenExchangeRoleAccess` politique. Ce rôle n'a pas accès à vos compartiments S3 dans lesquels vous hébergez des artefacts de composants. Vous devez donc ajouter des autorisations aux compartiments et objets S3 de vos artefacts lorsque vous créez un composant. Pour de plus amples informations, veuillez consulter [Autoriser les appareils principaux à interagir avec les AWS services](device-service-role.md).  
Par défaut: `GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
(Facultatif) Le nom de l'alias de AWS IoT rôle qui pointe vers le rôle IAM qui fournit les AWS informations d'identification pour le périphérique principal de Greengrass. Si l'alias de rôle portant ce nom n'existe pas dans votre répertoire Compte AWS, le logiciel AWS IoT Greengrass Core le crée et le pointe vers le rôle IAM que vous spécifiez.  
Valeur par défaut : `GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
(Facultatif) Le nom ou l'ID de l'utilisateur et du groupe du système que le logiciel AWS IoT Greengrass Core utilise pour exécuter les composants. Spécifiez l'utilisateur et le groupe, séparés par deux points. Le groupe est facultatif. Par exemple, vous définissez **ggc\$1user:ggc\$1group** ou **ggc\$1user**.  
+ Si vous exécutez en tant que root, l'utilisateur et le groupe définis par le fichier de configuration sont utilisés par défaut. Si le fichier de configuration ne définit pas d'utilisateur ni de groupe, la valeur par défaut est. `ggc_user:ggc_group` S'ils `ggc_group` existent `ggc_user` ou non, le logiciel les crée.
+ Si vous l'exécutez en tant qu'utilisateur non root, le logiciel AWS IoT Greengrass Core utilise cet utilisateur pour exécuter les composants.
+ Si vous ne spécifiez aucun groupe, le logiciel AWS IoT Greengrass Core utilise le groupe principal de l'utilisateur du système.
Pour de plus amples informations, veuillez consulter [Configurer l'utilisateur qui exécute les composants](configure-greengrass-core-v2.md#configure-component-user).

`DEPLOY_DEV_TOOLS`  
Définit s'il faut télécharger et déployer le [composant Greengrass CLI](greengrass-cli-component.md) dans l'image du conteneur. Vous pouvez utiliser la CLI Greengrass pour développer et déboguer des composants localement.  
 <a name="local-dev-tools-production-environment-warning"></a>Nous vous recommandons d'utiliser ce composant uniquement dans les environnements de développement, et non dans les environnements de production. Ce composant permet d'accéder aux informations et aux opérations dont vous n'avez généralement pas besoin dans un environnement de production. Suivez le principe du moindre privilège en déployant ce composant uniquement sur les appareils principaux là où vous en avez besoin. 
Valeur par défaut : `false`

`INIT_CONFIG`  
(Facultatif) Le chemin d'accès au fichier de configuration à utiliser pour installer le logiciel AWS IoT Greengrass Core. Vous pouvez utiliser cette option pour configurer de nouveaux appareils principaux Greengrass avec une configuration de noyau spécifique, ou pour spécifier des ressources provisionnées manuellement, par exemple. Vous devez monter votre fichier de configuration sur le chemin que vous spécifiez dans cet argument. 

`TRUSTED_PLUGIN`  
Cette fonctionnalité est disponible pour les versions 2.4.0 et ultérieures du composant [Greengrass](greengrass-nucleus-component.md) nucleus.  
(Facultatif) Le chemin d'accès à un fichier JAR à charger en tant que plugin sécurisé. Utilisez cette option pour fournir des fichiers JAR de plug-in de provisionnement, par exemple à installer avec le provisionnement de [flotte ou le provisionnement](fleet-provisioning.md) [personnalisé](custom-provisioning.md). 

`THING_POLICY_NAME`  
Cette fonctionnalité est disponible pour les versions 2.4.0 et ultérieures du composant [Greengrass](greengrass-nucleus-component.md) nucleus.  
(Facultatif) Nom de la AWS IoT politique à associer au certificat d' AWS IoT objet de ce périphérique principal. Si la AWS IoT politique portant ce nom n'existe pas dans votre ordinateur, Compte AWS le logiciel AWS IoT Greengrass Core la crée.   
Vous devez spécifier `PROVISION=true` pour appliquer cet argument.  
Le logiciel AWS IoT Greengrass Core crée une AWS IoT politique permissive par défaut. Vous pouvez limiter cette politique ou créer une politique personnalisée dans laquelle vous limitez les autorisations pour votre cas d'utilisation. Pour de plus amples informations, veuillez consulter [AWS IoT Politique minimale pour les appareils AWS IoT Greengrass V2 principaux](device-auth.md#greengrass-core-minimal-iot-policy). 

## Spécifiez les dépendances à installer
<a name="dockerfile-run-instruction"></a>

L'instruction RUN du AWS IoT Greengrass Dockerfile prépare l'environnement du conteneur pour exécuter le programme d'installation du logiciel AWS IoT Greengrass Core. Vous pouvez personnaliser les dépendances installées avant que le programme d'installation du logiciel AWS IoT Greengrass Core ne s'exécute dans le conteneur Docker. 

## Construisez l' AWS IoT Greengrass image
<a name="build-greengrass-docker-image"></a>

Utilisez le AWS IoT Greengrass Dockerfile pour créer une image de AWS IoT Greengrass conteneur. Vous pouvez utiliser la CLI Docker ou la CLI Docker Compose pour créer l'image et démarrer le conteneur. Vous pouvez également utiliser la CLI Docker pour créer l'image, puis utiliser Docker Compose pour démarrer votre conteneur à partir de cette image.

------
#### [ Docker ]

1. Sur la machine hôte, exécutez la commande suivante pour passer au répertoire contenant le Dockerfile configuré.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Exécutez la commande suivante pour créer l'image du AWS IoT Greengrass conteneur à partir du Dockerfile.

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. Sur la machine hôte, exécutez la commande suivante pour passer au répertoire contenant le Dockerfile et le fichier Compose.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Exécutez la commande suivante pour utiliser le fichier Compose pour créer l'image du AWS IoT Greengrass conteneur.

   ```
   docker-compose -f docker-compose.yml build
   ```

------

Vous avez créé avec succès l'image du AWS IoT Greengrass conteneur. Le logiciel AWS IoT Greengrass Core est installé sur l'image Docker. Vous pouvez désormais exécuter le logiciel AWS IoT Greengrass Core dans un conteneur Docker.

# Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement automatique des ressources
<a name="run-greengrass-docker-automatic-provisioning"></a>

Ce didacticiel explique comment installer et exécuter le logiciel AWS IoT Greengrass Core dans un conteneur Docker avec des AWS ressources automatiquement provisionnées et des outils de développement locaux. Vous pouvez utiliser cet environnement de développement pour explorer les AWS IoT Greengrass fonctionnalités d'un conteneur Docker. Le logiciel nécessite des AWS informations d'identification pour fournir ces ressources et déployer les outils de développement locaux.

Si vous ne pouvez pas fournir AWS d'informations d'identification au conteneur, vous pouvez fournir les AWS ressources dont le périphérique principal a besoin pour fonctionner. Vous pouvez également déployer les outils de développement sur un appareil principal pour l'utiliser comme périphérique de développement. Cela vous permet de fournir moins d'autorisations à l'appareil lorsque vous exécutez le conteneur. Pour de plus amples informations, veuillez consulter [Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement manuel des ressources](run-greengrass-docker-manual-provisioning.md).



## Conditions préalables
<a name="docker-automatic-provisioning-prereqs"></a>

Pour terminer ce didacticiel, vous avez besoin des éléments suivants.
+ Un Compte AWS. Si vous n'en avez pas, veuillez consulter [Configurez un Compte AWS](setting-up.md#set-up-aws-account). 
+ Un utilisateur AWS IAM autorisé à fournir les ressources AWS IoT et IAM pour un appareil principal Greengrass. Le programme d'installation du logiciel AWS IoT Greengrass Core utilise vos AWS informations d'identification pour provisionner automatiquement ces ressources. Pour plus d'informations sur la politique IAM minimale permettant de provisionner automatiquement les ressources, consultez[Politique IAM minimale permettant au programme d'installation de provisionner les ressources](provision-minimal-iam-policy.md).
+ Une image AWS IoT Greengrass Docker. Vous pouvez [créer une image à partir du AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ L'ordinateur hôte sur lequel vous exécutez le conteneur Docker doit répondre aux exigences suivantes :
  + <a name="docker-host-reqs"></a>Système d'exploitation basé sur Linux doté d'une connexion Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) version 18.09 ou ultérieure.
  + <a name="docker-compose-reqs"></a>(Facultatif) [Docker Compose](https://docs.docker.com/compose/install/) version 1.22 ou ultérieure. Docker Compose n'est requis que si vous souhaitez utiliser la CLI Docker Compose pour exécuter vos images Docker.

## Configurez vos AWS informations d'identification
<a name="configure-aws-credentials-for-docker"></a>

Au cours de cette étape, vous créez un fichier d'informations d'identification sur l'ordinateur hôte qui contient vos informations AWS de sécurité. Lorsque vous exécutez l'image AWS IoT Greengrass Docker, vous devez monter le dossier contenant ce fichier d'identification `/root/.aws/` dans le conteneur Docker. Le AWS IoT Greengrass programme d'installation utilise ces informations d'identification pour provisionner des ressources dans votre Compte AWS. Pour plus d'informations sur la politique IAM minimale requise par le programme d'installation pour provisionner automatiquement les ressources, consultez[Politique IAM minimale permettant au programme d'installation de provisionner les ressources](provision-minimal-iam-policy.md).

1. Récupérez l'un des éléments suivants.
   + Informations d'identification à long terme pour un utilisateur IAM. Pour plus d'informations sur la façon de récupérer des informations d'identification à long terme, consultez [la section Gestion des clés d'accès pour les utilisateurs IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) dans le guide de l'*utilisateur IAM*.
   + (Recommandé) Informations d'identification temporaires pour un rôle IAM. Pour plus d'informations sur la façon de récupérer des informations d'identification temporaires, consultez la section [Utilisation des informations d'identification de sécurité temporaires AWS CLI dans le](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli) *guide de l'utilisateur IAM*.

1. Créez un dossier dans lequel vous placerez votre fichier d'informations d'identification.

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. Utilisez un éditeur de texte pour créer un fichier de configuration nommé `credentials` dans le `./greengrass-v2-credentials` dossier.

   Par exemple, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour créer le `credentials` fichier. 

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. Ajoutez vos AWS informations d'identification au `credentials` fichier au format suivant.

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   Inclure uniquement `aws_session_token` pour les informations d'identification temporaires.

**Important**  
Supprimez le fichier d'informations d'identification de l'ordinateur hôte après avoir démarré le AWS IoT Greengrass conteneur. Si vous ne supprimez pas le fichier d'informations d' AWS identification, celles-ci resteront montées dans le conteneur. Pour de plus amples informations, veuillez consulter [Exécuter le logiciel de AWS IoT Greengrass base dans un conteneur](#run-greengrass-image-automatic-provisioning).

## Création d'un fichier d'environnement
<a name="create-env-file-automatic-provisioning"></a>

Ce didacticiel utilise un fichier d'environnement pour définir les variables d'environnement qui seront transmises au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker. Vous pouvez également utiliser [l'`--env`argument `-e` or](https://docs.docker.com/engine/reference/commandline/run/#env) dans votre `docker run` commande pour définir des variables d'environnement dans le conteneur Docker ou vous pouvez définir les variables dans [un `environment` bloc](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) du `docker-compose.yml` fichier.

1. Utilisez un éditeur de texte pour créer un fichier d'environnement nommé`.env`.

   Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano afin de créer le `.env` dans le répertoire actuel.

   ```
   nano .env
   ```

1. Copiez le contenu suivant dans le fichier.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   Remplacez ensuite les valeurs suivantes.
   + `/greengrass/v2`. Le dossier racine de Greengrass que vous souhaitez utiliser pour l'installation. Vous utilisez la variable d'`GGC_ROOT`environnement pour définir cette valeur.
   + *region*. L' Région AWS endroit où vous avez créé les ressources.
   + *MyGreengrassCore*. Le nom du AWS IoT truc. Si l'objet n'existe pas, le programme d'installation le crée. Le programme d'installation télécharge les certificats pour s'authentifier en tant qu' AWS IoT objet. 
   + *MyGreengrassCoreGroup*. Le nom du groupe AWS IoT d'objets. Si le groupe d'objets n'existe pas, le programme d'installation le crée et y ajoute l'objet. Si le groupe d'objets existe et fait l'objet d'un déploiement actif, le périphérique principal télécharge et exécute le logiciel spécifié par le déploiement.
   +  *GreengrassV2TokenExchangeRole*. Remplacez-le par le nom du rôle d'échange de jetons IAM qui permet au périphérique principal de Greengrass d'obtenir AWS des informations d'identification temporaires. Si le rôle n'existe pas, le programme d'installation le crée, puis crée et attache une politique nommée *GreengrassV2TokenExchangeRole* Access. Pour de plus amples informations, veuillez consulter [Autoriser les appareils principaux à interagir avec les AWS services](device-service-role.md).
   + *GreengrassCoreTokenExchangeRoleAlias*. Alias du rôle d'échange de jetons. Si l'alias de rôle n'existe pas, le programme d'installation le crée et le pointe vers le rôle d'échange de jetons IAM que vous spécifiez. Pour plus d’informations, veuillez consulter la rubrique 
**Note**  <a name="docker-local-dev-tools-production-environment-warning"></a>
Vous pouvez définir la variable d'`DEPLOY_DEV_TOOLS`environnement sur `true` pour déployer le [composant Greengrass CLI](greengrass-cli-component.md), ce qui vous permet de développer des composants personnalisés dans le conteneur Docker. <a name="local-dev-tools-production-environment-warning"></a>Nous vous recommandons d'utiliser ce composant uniquement dans les environnements de développement, et non dans les environnements de production. Ce composant permet d'accéder à des informations et à des opérations dont vous n'avez généralement pas besoin dans un environnement de production. Respectez le principe du moindre privilège en déployant ce composant uniquement sur les appareils principaux là où vous en avez besoin. 

## Exécuter le logiciel de AWS IoT Greengrass base dans un conteneur
<a name="run-greengrass-image-automatic-provisioning"></a>

Ce didacticiel vous montre comment démarrer l'image Docker que vous avez créée dans un conteneur Docker. Vous pouvez utiliser la CLI Docker ou la CLI Docker Compose pour exécuter l'image logicielle AWS IoT Greengrass Core dans un conteneur Docker. 

------
#### [ Docker ]

1. Exécutez la commande suivante pour démarrer le conteneur Docker. 

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   Cet exemple de commande utilise les arguments suivants pour [docker run](https://docs.docker.com/engine/reference/commandline/run/) :
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Nettoie le conteneur à sa sortie.
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Utilise un processus d'initialisation dans le conteneur. 
**Note**  
L'`--init`argument est nécessaire pour arrêter le logiciel AWS IoT Greengrass Core lorsque vous arrêtez le conteneur Docker.
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Facultatif) Exécute le conteneur Docker au premier plan en tant que processus interactif. Vous pouvez le remplacer par l'`-d`argument pour exécuter le conteneur Docker en mode détaché à la place. Pour plus d'informations, consultez la section [Détachée ou avant-plan](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) dans la documentation Docker.
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Exécute un conteneur nommé `aws-iot-greengrass` 
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monte un volume dans le conteneur Docker pour que le fichier de configuration et les fichiers de certificat puissent être AWS IoT Greengrass exécutés dans le conteneur.
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Facultatif) Spécifie le fichier d'environnement pour définir les variables d'environnement qui seront transmises au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker. Cet argument n'est obligatoire que si vous avez créé un [fichier d'environnement](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) pour définir des variables d'environnement. Si vous n'avez pas créé de fichier d'environnement, vous pouvez utiliser des `--env` arguments pour définir des variables d'environnement directement dans votre commande Docker run.
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Facultatif) Publie le port du conteneur 8883 sur la machine hôte. Cet argument est obligatoire si vous souhaitez vous connecter et communiquer via MQTT car il AWS IoT Greengrass utilise le port 8883 pour le trafic MQTT. Pour ouvrir d'autres ports, utilisez des `-p` arguments supplémentaires.
**Note**  <a name="docker-run-cap-drop"></a>
Pour exécuter votre conteneur Docker avec une sécurité accrue, vous pouvez utiliser les `--cap-add` arguments `--cap-drop` et pour activer de manière sélective les fonctionnalités Linux de votre conteneur. Pour plus d'informations, consultez les sections [Privilèges d'exécution et fonctionnalités Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dans la documentation Docker.

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Supprimez les informations d'identification `./greengrass-v2-credentials` de l'appareil hôte.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**Important**  
Vous supprimez ces informations d'identification, car elles fournissent des autorisations étendues dont le périphérique principal n'a besoin que lors de la configuration. Si vous ne supprimez pas ces informations d'identification, les composants Greengrass et les autres processus exécutés dans le conteneur peuvent y accéder. Si vous devez fournir des AWS informations d'identification à un composant Greengrass, utilisez le service d'échange de jetons. Pour de plus amples informations, veuillez consulter [Interagissez avec les AWS services](interact-with-aws-services.md).

------
#### [ Docker Compose ]

1. Utilisez un éditeur de texte pour créer un fichier Docker Compose nommé`docker-compose.yml`.

   Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano afin de créer le `docker-compose.yml` dans le répertoire actuel.

   ```
   nano docker-compose.yml
   ```
**Note**  
Vous pouvez également télécharger et utiliser la dernière version du fichier Compose AWS fourni à partir de [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/).

1. Ajoutez le contenu suivant au fichier Compose. Votre fichier doit être similaire à l'exemple suivant : *docker-image*Remplacez-le par le nom de votre image Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Les paramètres suivants de cet exemple de fichier Compose sont facultatifs :
   + `ports`—Publie les ports du conteneur 8883 sur la machine hôte. Ce paramètre est obligatoire si vous souhaitez vous connecter et communiquer via MQTT car il AWS IoT Greengrass utilise le port 8883 pour le trafic MQTT. 
   + `env_file`—Spécifie le fichier d'environnement pour définir les variables d'environnement qui seront transmises au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker. Ce paramètre n'est obligatoire que si vous avez créé un [fichier d'environnement](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) pour définir des variables d'environnement. Si vous n'avez pas créé de fichier d'environnement, vous pouvez utiliser le paramètre d'[environnement](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) pour définir les variables directement dans votre fichier Compose.
**Note**  <a name="docker-compose-cap-drop"></a>
Pour exécuter votre conteneur Docker avec une sécurité accrue, vous pouvez utiliser `cap_drop` et `cap_add` dans votre fichier Compose pour activer de manière sélective les fonctionnalités Linux de votre conteneur. Pour plus d'informations, consultez les sections [Privilèges d'exécution et fonctionnalités Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dans la documentation Docker.

1. Exécutez la commande suivante pour démarrer le conteneur Docker.

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Supprimez les informations d'identification `./greengrass-v2-credentials` de l'appareil hôte.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**Important**  
Vous supprimez ces informations d'identification, car elles fournissent des autorisations étendues dont le périphérique principal n'a besoin que lors de la configuration. Si vous ne supprimez pas ces informations d'identification, les composants Greengrass et les autres processus exécutés dans le conteneur peuvent y accéder. Si vous devez fournir des AWS informations d'identification à un composant Greengrass, utilisez le service d'échange de jetons. Pour de plus amples informations, veuillez consulter [Interagissez avec les AWS services](interact-with-aws-services.md).

------

## Étapes suivantes
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Le logiciel de base s'exécute désormais dans un conteneur Docker. Exécutez la commande suivante pour récupérer l'ID du conteneur en cours d'exécution.

```
docker ps
```

Vous pouvez ensuite exécuter la commande suivante pour accéder au conteneur et explorer les logiciels AWS IoT Greengrass principaux exécutés à l'intérieur du conteneur.

```
docker exec -it container-id /bin/bash
```

Pour plus d'informations sur la création d'un composant simple, voir [Étape 4 : développer et tester un composant sur votre appareil](create-first-component.md) [Tutoriel : Débuter avec AWS IoT Greengrass V2](getting-started.md)

**Note**  <a name="run-greengrass-commands-in-docker-note"></a>
Lorsque vous exécutez `docker exec` des commandes dans le conteneur Docker, ces commandes ne sont pas enregistrées dans les journaux Docker. Pour enregistrer vos commandes dans les journaux Docker, attachez un shell interactif au conteneur Docker. Pour de plus amples informations, veuillez consulter [Attachez un shell interactif au conteneur Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

Le fichier journal AWS IoT Greengrass Core est appelé `greengrass.log` et se trouve dans`/greengrass/v2/logs`. Les fichiers journaux des composants se trouvent également dans le même répertoire. Pour copier les journaux de Greengrass dans un répertoire temporaire de l'hôte, exécutez la commande suivante :

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Si vous souhaitez conserver les journaux après la sortie ou la suppression d'un conteneur, nous vous recommandons de lier uniquement le `/greengrass/v2/logs` répertoire au répertoire des journaux temporaires sur l'hôte au lieu de monter l'intégralité du répertoire Greengrass. Pour de plus amples informations, veuillez consulter [Persister les logs Greengrass en dehors du conteneur Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Pour arrêter un conteneur AWS IoT Greengrass Docker en cours d'exécution, exécutez `docker stop` ou`docker-compose -f docker-compose.yml stop`. Cette action est envoyée `SIGTERM` au processus Greengrass et arrête tous les processus associés qui ont été lancés dans le conteneur. Le conteneur Docker est initialisé avec l'`docker-init`exécutable en tant que processus PID 1, ce qui permet de supprimer les processus zombies restants. Pour plus d'informations, consultez la section [Spécifier un processus d'initialisation](https://docs.docker.com/engine/reference/run/#specify-an-init-process) dans la documentation Docker.

<a name="see-docker-troubleshooting"></a>Pour plus d'informations sur la résolution des problèmes liés AWS IoT Greengrass à l'exécution dans un conteneur Docker, consultez[Résolution des problèmes AWS IoT Greengrass dans un conteneur Docker](docker-troubleshooting.md).

# Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement manuel des ressources
<a name="run-greengrass-docker-manual-provisioning"></a>

Ce didacticiel explique comment installer et exécuter le logiciel AWS IoT Greengrass Core dans un conteneur Docker avec des ressources provisionnées AWS manuellement.

**Topics**
+ [Conditions préalables](#docker-manual-provisioning-prereqs)
+ [Récupérer des points de AWS IoT terminaison](#retrieve-iot-endpoints)
+ [Créez n'importe AWS IoT quoi](#create-iot-thing)
+ [Créez le certificat d'objet](#create-thing-certificate-mp)
+ [Création d'un rôle d'échange de jetons](#create-token-exchange-role)
+ [Télécharger les certificats sur l'appareil](#download-thing-certificates)
+ [Création d'un fichier de configuration](#create-docker-install-configuration-file)
+ [Création d'un fichier d'environnement](#create-env-file-manual-provisioning)
+ [Exécuter le logiciel de AWS IoT Greengrass base dans un conteneur](#run-greengrass-image-manual-provisioning)
+ [Étapes suivantes](#run-greengrass-docker-next-steps)

## Conditions préalables
<a name="docker-manual-provisioning-prereqs"></a>

Pour suivre ce didacticiel, vous aurez besoin des éléments suivants :
+ Un Compte AWS. Si vous n'en avez pas, veuillez consulter [Configurez un Compte AWS](setting-up.md#set-up-aws-account). 
+ Une image AWS IoT Greengrass Docker. Vous pouvez [créer une image à partir du AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ L'ordinateur hôte sur lequel vous exécutez le conteneur Docker doit répondre aux exigences suivantes :
  + <a name="docker-host-reqs"></a>Système d'exploitation basé sur Linux doté d'une connexion Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) version 18.09 ou ultérieure.
  + <a name="docker-compose-reqs"></a>(Facultatif) [Docker Compose](https://docs.docker.com/compose/install/) version 1.22 ou ultérieure. Docker Compose n'est requis que si vous souhaitez utiliser la CLI Docker Compose pour exécuter vos images Docker.

## Récupérer des points de AWS IoT terminaison
<a name="retrieve-iot-endpoints"></a>

Obtenez les AWS IoT points de terminaison qui vous Compte AWS conviennent et enregistrez-les pour les utiliser ultérieurement. Votre appareil utilise ces points de terminaison pour se connecter à AWS IoT. Procédez comme suit :

1. Obtenez le point de terminaison de AWS IoT données pour votre Compte AWS.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   La réponse ressemble à l'exemple suivant, si la demande aboutit.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Obtenez le point de terminaison des informations d' AWS IoT identification pour votre Compte AWS.

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   La réponse ressemble à l'exemple suivant, si la demande aboutit.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## Créez n'importe AWS IoT quoi
<a name="create-iot-thing"></a>

AWS IoT *les objets* représentent les appareils et les entités logiques auxquels ils se connectent AWS IoT. Les appareils Greengrass Core sont AWS IoT des objets. Lorsque vous enregistrez un appareil en tant qu' AWS IoT objet, celui-ci peut utiliser un certificat numérique pour s'authentifier. AWS

Dans cette section, vous allez créer un AWS IoT objet qui représente votre appareil.

**Pour créer AWS IoT quelque chose**

1. Créez n'importe AWS IoT quel objet pour votre appareil. Sur votre ordinateur de développement, exécutez la commande suivante.
   + Remplacez *MyGreengrassCore* par le nom de l'objet à utiliser. Ce nom est également le nom de votre appareil principal Greengrass.
**Note**  <a name="install-argument-thing-name-constraint"></a>
Le nom de l'objet ne peut pas contenir de caractères deux-points (`:`).

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   La réponse ressemble à l'exemple suivant, si la demande aboutit.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (Facultatif) Ajoutez l' AWS IoT objet à un nouveau groupe d'objets ou à un groupe d'objets existant. Vous utilisez des groupes d'objets pour gérer des flottes d'appareils principaux de Greengrass. Lorsque vous déployez des composants logiciels sur vos appareils, vous pouvez cibler des appareils individuels ou des groupes d'appareils. Vous pouvez ajouter un appareil à un groupe d'objets avec un déploiement Greengrass actif pour déployer les composants logiciels de ce groupe d'objets sur l'appareil. Procédez comme suit :

   1. (Facultatif) Créez un AWS IoT groupe d'objets.
      + Remplacez *MyGreengrassCoreGroup* par le nom du groupe d'objets à créer.
**Note**  <a name="install-argument-thing-group-name-constraint"></a>
Le nom du groupe d'objets ne peut pas contenir de deux-points (`:`).

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      La réponse ressemble à l'exemple suivant, si la demande aboutit.

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Ajoutez l' AWS IoT objet à un groupe d'objets.
      + Remplacez *MyGreengrassCore* par le nom de votre AWS IoT objet.
      + Remplacez *MyGreengrassCoreGroup* par le nom du groupe d'objets.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      La commande n'a aucune sortie si la demande aboutit.

## Créez le certificat d'objet
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>Lorsque vous enregistrez un appareil en tant qu' AWS IoT objet, celui-ci peut utiliser un certificat numérique pour s'authentifier. AWS Ce certificat permet à l'appareil de communiquer avec AWS IoT et AWS IoT Greengrass.

<a name="create-thing-certificate-intro-2"></a>Dans cette section, vous allez créer et télécharger des certificats que votre appareil peut utiliser pour se connecter AWS.<a name="create-thing-certificate-cloud-steps"></a>

**Pour créer le certificat d'objet**

1. Créez un dossier dans lequel vous téléchargerez les certificats de l' AWS IoT objet.

   ```
   mkdir greengrass-v2-certs
   ```

1. Créez et téléchargez les certificats AWS IoT correspondants.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   La réponse ressemble à l'exemple suivant, si la demande aboutit.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   Enregistrez le nom de ressource Amazon (ARN) du certificat afin de l'utiliser pour configurer le certificat ultérieurement.

Configurez ensuite le certificat d'objet. Pour de plus amples informations, veuillez consulter [Configurer le certificat d'objet](manual-installation.md#configure-thing-certificate).

## Création d'un rôle d'échange de jetons
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Les appareils principaux de Greengrass utilisent un rôle de service IAM, appelé rôle d'*échange de jetons*, pour autoriser les appels aux services. AWS L'appareil utilise le fournisseur AWS IoT d'informations d'identification pour obtenir des AWS informations d'identification temporaires pour ce rôle, ce qui lui permet d'interagir avec Amazon Logs AWS IoT, d'envoyer des journaux à Amazon CloudWatch Logs et de télécharger des artefacts de composants personnalisés depuis Amazon S3. Pour de plus amples informations, veuillez consulter [Autoriser les appareils principaux à interagir avec les AWS services](device-service-role.md).

<a name="installation-create-token-exchange-role-alias-intro"></a>Vous utilisez un *alias de AWS IoT rôle* pour configurer le rôle d'échange de jetons pour les appareils principaux de Greengrass. Les alias de rôle vous permettent de modifier le rôle d'échange de jetons d'un appareil tout en conservant la même configuration de l'appareil. Pour plus d'informations, consultez la section [Autorisation des appels directs vers AWS des services](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html) dans le *Guide du AWS IoT Core développeur*.

Dans cette section, vous allez créer un rôle IAM d'échange de jetons et un alias de AWS IoT rôle pointant vers le rôle. Si vous avez déjà configuré un appareil principal Greengrass, vous pouvez utiliser son rôle d'échange de jetons et son alias de rôle au lieu d'en créer de nouveaux. Ensuite, vous configurez l'appareil pour AWS IoT qu'il utilise ce rôle et cet alias.

**Pour créer un rôle IAM d'échange de jetons**

1. <a name="create-token-exchange-role-create-iam-role"></a>Créez un rôle IAM que votre appareil peut utiliser comme rôle d'échange de jetons. Procédez comme suit :

   1. Créez un fichier contenant le document de politique de confiance requis par le rôle d'échange de jetons.

      <a name="nano-command-intro"></a>Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour créer le fichier.

      ```
      nano device-role-trust-policy.json
      ```

      Copiez le code JSON suivant dans le fichier.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Créez le rôle d'échange de jetons avec le document de politique de confiance.
      + Remplacez *GreengrassV2TokenExchangeRole* par le nom du rôle IAM à créer.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      La réponse ressemble à l'exemple suivant, si la demande aboutit.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. Créez un fichier contenant le document de politique d'accès requis par le rôle d'échange de jetons.

      <a name="nano-command-intro"></a>Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour créer le fichier.

      ```
      nano device-role-access-policy.json
      ```

      Copiez le code JSON suivant dans le fichier.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**Note**  
Cette politique d'accès n'autorise pas l'accès aux artefacts des composants dans les compartiments S3. Pour déployer des composants personnalisés qui définissent des artefacts dans Amazon S3, vous devez ajouter des autorisations au rôle afin de permettre à votre appareil principal de récupérer les artefacts des composants. Pour de plus amples informations, veuillez consulter [Autoriser l'accès aux compartiments S3 pour les artefacts des composants](device-service-role.md#device-service-role-access-s3-bucket).  
Si vous ne possédez pas encore de compartiment S3 pour les artefacts des composants, vous pouvez ajouter ces autorisations ultérieurement après avoir créé un compartiment.

   1. Créez la politique IAM à partir du document de stratégie.
      + Remplacez *GreengrassV2TokenExchangeRoleAccess* par le nom de la politique IAM à créer.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      La réponse ressemble à l'exemple suivant, si la demande aboutit.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. Associez la politique IAM au rôle d'échange de jetons.
      + Remplacez *GreengrassV2TokenExchangeRole* par le nom du rôle IAM.
      + Remplacez l'ARN de la stratégie par l'ARN de la stratégie IAM que vous avez créée à l'étape précédente.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      La commande n'a aucune sortie si la demande aboutit.

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>Créez un alias de AWS IoT rôle qui pointe vers le rôle d'échange de jetons.
   + Remplacez *GreengrassCoreTokenExchangeRoleAlias* par le nom de l'alias de rôle à créer.
   + Remplacez l'ARN du rôle par l'ARN du rôle IAM que vous avez créé à l'étape précédente.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   La réponse ressemble à l'exemple suivant, si la demande aboutit.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**Note**  
Pour créer un alias de rôle, vous devez être autorisé à transmettre le rôle IAM d'échange de jetons à AWS IoT. Si vous recevez un message d'erreur lorsque vous essayez de créer un alias de rôle, vérifiez que votre AWS utilisateur dispose de cette autorisation. Pour plus d'informations, consultez la section [Octroi à un utilisateur des autorisations lui permettant de transférer un rôle à un AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) dans le *Guide de Gestion des identités et des accès AWS l'utilisateur*.

1. Créez et attachez une AWS IoT politique qui permet à votre appareil principal Greengrass d'utiliser l'alias de rôle pour assumer le rôle d'échange de jetons. Si vous avez déjà configuré un appareil principal Greengrass, vous pouvez associer sa AWS IoT politique d'alias de rôle au lieu d'en créer une nouvelle. Procédez comme suit :

   1. (Facultatif) Créez un fichier contenant le document AWS IoT de politique requis par l'alias de rôle.

      <a name="nano-command-intro"></a>Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour créer le fichier.

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      Copiez le code JSON suivant dans le fichier.
      + Remplacez l'ARN de la ressource par l'ARN de votre alias de rôle.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. Créez une AWS IoT politique à partir du document de stratégie.
      + Remplacez *GreengrassCoreTokenExchangeRoleAliasPolicy* par le nom de la AWS IoT politique à créer.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      La réponse ressemble à l'exemple suivant, si la demande aboutit.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. Joignez la AWS IoT politique au certificat de l' AWS IoT objet.
      + Remplacez *GreengrassCoreTokenExchangeRoleAliasPolicy* par le nom de la AWS IoT politique d'alias de rôle.
      + Remplacez l'ARN cible par l'ARN du certificat associé à votre AWS IoT objet.

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      La commande n'a aucune sortie si la demande aboutit.

## Télécharger les certificats sur l'appareil
<a name="download-thing-certificates"></a>

Auparavant, vous avez téléchargé le certificat de votre appareil sur votre ordinateur de développement. Dans cette section, vous allez télécharger le certificat de l'autorité de certification racine (CA) Amazon. Ensuite, si vous prévoyez d'exécuter le logiciel AWS IoT Greengrass Core dans Docker sur un autre ordinateur que votre ordinateur de développement, vous copiez les certificats sur cet ordinateur hôte. Le logiciel AWS IoT Greengrass Core utilise ces certificats pour se connecter au service AWS IoT cloud.

**Pour télécharger des certificats sur l'appareil**

1. Sur votre ordinateur de développement, téléchargez le certificat Amazon Root Certificate Authority (CA). AWS IoT les certificats sont associés par défaut au certificat de l'autorité de certification racine d'Amazon.

------
#### [ Linux or Unix ]

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. Si vous prévoyez d'exécuter le logiciel AWS IoT Greengrass Core dans Docker sur un appareil différent de celui de votre ordinateur de développement, copiez les certificats sur l'ordinateur hôte. Si SSH et SCP sont activés sur l'ordinateur de développement et sur l'ordinateur hôte, vous pouvez utiliser la `scp` commande de votre ordinateur de développement pour transférer les certificats. Remplacez *device-ip-address* par l'adresse IP de votre ordinateur hôte.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## Création d'un fichier de configuration
<a name="create-docker-install-configuration-file"></a>

1. Sur l'ordinateur hôte, créez un dossier dans lequel vous placez votre fichier de configuration.

   ```
   mkdir ./greengrass-v2-config
   ```

1. Utilisez un éditeur de texte pour créer un fichier de configuration nommé `config.yaml` dans le `./greengrass-v2-config` dossier.

   Par exemple, vous pouvez exécuter la commande suivante pour utiliser GNU nano afin de créer le`config.yaml`. 

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. Copiez le contenu YAML suivant dans le fichier. Ce fichier de configuration partiel spécifie les paramètres du système et les paramètres du noyau de Greengrass.

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   Remplacez ensuite les valeurs suivantes :
   + */tmp/certs*. Le répertoire du conteneur Docker dans lequel vous montez les certificats téléchargés lorsque vous démarrez le conteneur.
   + `/greengrass/v2`. Le dossier racine de Greengrass que vous souhaitez utiliser pour l'installation. Vous utilisez la variable d'`GGC_ROOT`environnement pour définir cette valeur.
   + *MyGreengrassCore*. Le nom du AWS IoT truc.
   + *nucleus-version*. Version du logiciel AWS IoT Greengrass Core à installer. Cette valeur doit correspondre à la version de l'image Docker ou du Dockerfile que vous avez téléchargé. Si vous avez téléchargé l'image Greengrass Docker avec la `latest` balise, utilisez-la ****docker inspect *image-id***** pour voir la version de l'image.
   + *region*. L' Région AWS endroit où vous avez créé vos AWS IoT ressources. Vous devez également spécifier la même valeur pour la variable d'`AWS_REGION`environnement dans votre [fichier d'environnement](#create-env-file-manual-provisioning).
   + *GreengrassCoreTokenExchangeRoleAlias*. Alias du rôle d'échange de jetons.
   + *device-data-prefix*. Le préfixe de votre point de terminaison AWS IoT de données.
   + *device-credentials-prefix*. Le préfixe du point de terminaison de vos AWS IoT informations d'identification.

## Création d'un fichier d'environnement
<a name="create-env-file-manual-provisioning"></a>

Ce didacticiel utilise un fichier d'environnement pour définir les variables d'environnement qui seront transmises au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker. Vous pouvez également utiliser [l'`--env`argument `-e` or](https://docs.docker.com/engine/reference/commandline/run/#env) dans votre `docker run` commande pour définir des variables d'environnement dans le conteneur Docker ou vous pouvez définir les variables dans [un `environment` bloc](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) du `docker-compose.yml` fichier.

1. Utilisez un éditeur de texte pour créer un fichier d'environnement nommé`.env`.

   Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano afin de créer le `.env` dans le répertoire actuel.

   ```
   nano .env
   ```

1. Copiez le contenu suivant dans le fichier.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   Remplacez ensuite les valeurs suivantes.
   + `/greengrass/v2`. Le chemin d'accès au dossier racine à utiliser pour installer le logiciel AWS IoT Greengrass Core.
   + *region*. L' Région AWS endroit où vous avez créé vos AWS IoT ressources. Vous devez spécifier la même valeur pour le paramètre `awsRegion` de configuration dans votre [fichier de configuration](#create-docker-install-configuration-file).
   + */tmp/config/*. Le dossier dans lequel vous montez le fichier de configuration lorsque vous démarrez le conteneur Docker.
**Note**  <a name="docker-local-dev-tools-production-environment-warning"></a>
Vous pouvez définir la variable d'`DEPLOY_DEV_TOOLS`environnement sur `true` pour déployer le [composant Greengrass CLI](greengrass-cli-component.md), ce qui vous permet de développer des composants personnalisés dans le conteneur Docker. <a name="local-dev-tools-production-environment-warning"></a>Nous vous recommandons d'utiliser ce composant uniquement dans les environnements de développement, et non dans les environnements de production. Ce composant permet d'accéder à des informations et à des opérations dont vous n'avez généralement pas besoin dans un environnement de production. Respectez le principe du moindre privilège en déployant ce composant uniquement sur les appareils principaux là où vous en avez besoin. 

## Exécuter le logiciel de AWS IoT Greengrass base dans un conteneur
<a name="run-greengrass-image-manual-provisioning"></a>

Ce didacticiel explique comment démarrer l'image Docker que vous avez créée dans un conteneur Docker. Vous pouvez utiliser la CLI Docker ou la CLI Docker Compose pour exécuter l'image logicielle AWS IoT Greengrass Core dans un conteneur Docker. 

------
#### [ Docker ]
+ Ce didacticiel vous montre comment démarrer l'image Docker que vous avez créée dans un conteneur Docker. 

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  Cet exemple de commande utilise les arguments suivants pour [docker run](https://docs.docker.com/engine/reference/commandline/run/) :
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Nettoie le conteneur à sa sortie.
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Utilise un processus d'initialisation dans le conteneur. 
**Note**  
L'`--init`argument est nécessaire pour arrêter le logiciel AWS IoT Greengrass Core lorsque vous arrêtez le conteneur Docker.
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Facultatif) Exécute le conteneur Docker au premier plan en tant que processus interactif. Vous pouvez le remplacer par l'`-d`argument pour exécuter le conteneur Docker en mode détaché à la place. Pour plus d'informations, consultez la section [Détachée ou avant-plan](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) dans la documentation Docker.
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Exécute un conteneur nommé `aws-iot-greengrass` 
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monte un volume dans le conteneur Docker pour que le fichier de configuration et les fichiers de certificat puissent être AWS IoT Greengrass exécutés dans le conteneur.
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Facultatif) Spécifie le fichier d'environnement pour définir les variables d'environnement qui seront transmises au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker. Cet argument n'est obligatoire que si vous avez créé un [fichier d'environnement](#create-env-file-manual-provisioning) pour définir des variables d'environnement. Si vous n'avez pas créé de fichier d'environnement, vous pouvez utiliser des `--env` arguments pour définir des variables d'environnement directement dans votre commande Docker run.
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Facultatif) Publie le port du conteneur 8883 sur la machine hôte. Cet argument est obligatoire si vous souhaitez vous connecter et communiquer via MQTT car il AWS IoT Greengrass utilise le port 8883 pour le trafic MQTT. Pour ouvrir d'autres ports, utilisez des `-p` arguments supplémentaires.
**Note**  <a name="docker-run-cap-drop"></a>
Pour exécuter votre conteneur Docker avec une sécurité accrue, vous pouvez utiliser les `--cap-add` arguments `--cap-drop` et pour activer de manière sélective les fonctionnalités Linux de votre conteneur. Pour plus d'informations, consultez [Privilèges d'exécution et fonctionnalités Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dans la documentation Docker.

------
#### [ Docker Compose ]

1. Utilisez un éditeur de texte pour créer un fichier Docker Compose nommé`docker-compose.yml`.

   Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano afin de créer le `docker-compose.yml` dans le répertoire actuel.

   ```
   nano docker-compose.yml
   ```
**Note**  
Vous pouvez également télécharger et utiliser la dernière version du fichier Compose AWS fourni à partir de [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/).

1. Ajoutez le contenu suivant au fichier Compose. Votre fichier doit être similaire à l'exemple suivant : *your-container-name:version*Remplacez-le par le nom de votre image Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Les paramètres suivants de cet exemple de fichier Compose sont facultatifs :
   + `ports`—Publie les ports du conteneur 8883 sur la machine hôte. Ce paramètre est obligatoire si vous souhaitez vous connecter et communiquer via MQTT car il AWS IoT Greengrass utilise le port 8883 pour le trafic MQTT. 
   + `env_file`—Spécifie le fichier d'environnement pour définir les variables d'environnement qui seront transmises au programme d'installation du logiciel AWS IoT Greengrass Core dans le conteneur Docker. Ce paramètre n'est obligatoire que si vous avez créé un [fichier d'environnement](#create-env-file-manual-provisioning) pour définir des variables d'environnement. Si vous n'avez pas créé de fichier d'environnement, vous pouvez utiliser le paramètre d'[environnement](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) pour définir les variables directement dans votre fichier Compose.
**Note**  <a name="docker-compose-cap-drop"></a>
Pour exécuter votre conteneur Docker avec une sécurité accrue, vous pouvez utiliser `cap_drop` et `cap_add` dans votre fichier Compose pour activer de manière sélective les fonctionnalités Linux de votre conteneur. Pour plus d'informations, consultez [Privilèges d'exécution et fonctionnalités Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) dans la documentation Docker.

1. Exécutez la commande suivante pour démarrer le conteneur.

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## Étapes suivantes
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Le logiciel de base s'exécute désormais dans un conteneur Docker. Exécutez la commande suivante pour récupérer l'ID du conteneur en cours d'exécution.

```
docker ps
```

Vous pouvez ensuite exécuter la commande suivante pour accéder au conteneur et explorer les logiciels AWS IoT Greengrass principaux exécutés à l'intérieur du conteneur.

```
docker exec -it container-id /bin/bash
```

Pour plus d'informations sur la création d'un composant simple, voir [Étape 4 : développer et tester un composant sur votre appareil](create-first-component.md) [Tutoriel : Débuter avec AWS IoT Greengrass V2](getting-started.md)

**Note**  <a name="run-greengrass-commands-in-docker-note"></a>
Lorsque vous exécutez `docker exec` des commandes dans le conteneur Docker, ces commandes ne sont pas enregistrées dans les journaux Docker. Pour enregistrer vos commandes dans les journaux Docker, attachez un shell interactif au conteneur Docker. Pour de plus amples informations, veuillez consulter [Attachez un shell interactif au conteneur Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

Le fichier journal AWS IoT Greengrass Core est appelé `greengrass.log` et se trouve dans`/greengrass/v2/logs`. Les fichiers journaux des composants se trouvent également dans le même répertoire. Pour copier les journaux de Greengrass dans un répertoire temporaire de l'hôte, exécutez la commande suivante :

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Si vous souhaitez conserver les journaux après la sortie ou la suppression d'un conteneur, nous vous recommandons de lier uniquement le `/greengrass/v2/logs` répertoire au répertoire des journaux temporaires sur l'hôte au lieu de monter l'intégralité du répertoire Greengrass. Pour de plus amples informations, veuillez consulter [Persister les logs Greengrass en dehors du conteneur Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Pour arrêter un conteneur AWS IoT Greengrass Docker en cours d'exécution, exécutez `docker stop` ou`docker-compose -f docker-compose.yml stop`. Cette action est envoyée `SIGTERM` au processus Greengrass et arrête tous les processus associés qui ont été lancés dans le conteneur. Le conteneur Docker est initialisé avec l'`docker-init`exécutable en tant que processus PID 1, ce qui permet de supprimer les processus zombies restants. Pour plus d'informations, consultez la section [Spécifier un processus d'initialisation](https://docs.docker.com/engine/reference/run/#specify-an-init-process) dans la documentation Docker.

<a name="see-docker-troubleshooting"></a>Pour plus d'informations sur la résolution des problèmes liés AWS IoT Greengrass à l'exécution dans un conteneur Docker, consultez[Résolution des problèmes AWS IoT Greengrass dans un conteneur Docker](docker-troubleshooting.md).

# Résolution des problèmes AWS IoT Greengrass dans un conteneur Docker
<a name="docker-troubleshooting"></a>

Utilisez les informations suivantes pour résoudre les problèmes liés à l'exécution AWS IoT Greengrass dans un conteneur Docker et pour résoudre les problèmes liés AWS IoT Greengrass au conteneur Docker.

**Topics**
+ [Résolution des problèmes liés à l'exécution du conteneur Docker](#troubleshooting-container-errors)
+ [Débogage AWS IoT Greengrass dans un conteneur Docker](#debugging-greengrass-in-docker)

## Résolution des problèmes liés à l'exécution du conteneur Docker
<a name="troubleshooting-container-errors"></a>

Utilisez les informations suivantes pour résoudre les problèmes liés à l'exécution AWS IoT Greengrass dans un conteneur Docker.

**Topics**
+ [Erreur : impossible d'effectuer une connexion interactive à partir d'un appareil autre que TTY](#docker-troubleshootin-ecr-get-login-password)
+ [Erreur : options inconnues : - no-include-email](#docker-troubleshooting-cli-version)
+ [Erreur : Un pare-feu bloque le partage de fichiers entre les fenêtres et les conteneurs.](#docker-troubleshooting-firewall)
+ [Erreur : une erreur s'est produite (AccessDeniedException) lors de l'appel de l' GetAuthorizationToken opération : L'utilisateur : arn:aws:iam : ::user/ <user-name>n'*account-id*est pas autorisé à effectuer : ecr : on resource : \$1 GetAuthorizationToken](#docker-troubleshooting-ecr-perms)
+ [Erreur : vous avez atteint votre limite de taux d'attraction](#docker-troubleshooting-too-many-requests)

### Erreur : impossible d'effectuer une connexion interactive à partir d'un appareil autre que TTY
<a name="docker-troubleshootin-ecr-get-login-password"></a>

Cette erreur peut se produire lorsque vous exécutez la `aws ecr get-login-password` commande. Assurez-vous d'avoir installé la dernière AWS CLI version 2 ou version 1. Nous vous recommandons d'utiliser la AWS CLI version 2. Pour plus d’informations, consultez [Installation d’ AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dans le *Guide de l’utilisateur AWS Command Line Interface *.

### Erreur : options inconnues : - no-include-email
<a name="docker-troubleshooting-cli-version"></a>

Cette erreur peut se produire lorsque vous exécutez la `aws ecr get-login` commande. Assurez-vous que la dernière AWS CLI version est installée (par exemple, Run :`pip install awscli --upgrade --user`). Pour plus d'informations, consultez la section [Installation du AWS Command Line Interface sous Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) dans le *Guide de AWS Command Line Interface l'utilisateur*.

### Erreur : Un pare-feu bloque le partage de fichiers entre les fenêtres et les conteneurs.
<a name="docker-troubleshooting-firewall"></a>

Vous pouvez recevoir cette erreur ou un `Firewall Detected` message lors de l'exécution de Docker sur un ordinateur Windows. Ce problème peut également survenir si vous êtes connecté à un réseau privé virtuel (VPN) et que vos paramètres réseau empêchent le montage du lecteur partagé. Dans ce cas, désactivez le VPN et réexécutez le conteneur Docker.

### Erreur : une erreur s'est produite (AccessDeniedException) lors de l'appel de l' GetAuthorizationToken opération : L'utilisateur : arn:aws:iam : ::user/ <user-name>n'*account-id*est pas autorisé à effectuer : ecr : on resource : \$1 GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

Vous pouvez recevoir cette erreur lors de l'exécution de la `aws ecr get-login-password` commande si vous ne disposez pas des autorisations suffisantes pour accéder à un référentiel Amazon ECR. Pour plus d'informations, consultez les [exemples de politiques relatives aux référentiels Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) et [l'accès à un référentiel Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) dans le guide de l'utilisateur *Amazon ECR.*

### Erreur : vous avez atteint votre limite de taux d'attraction
<a name="docker-troubleshooting-too-many-requests"></a>

Docker Hub limite le nombre de pull requests que les utilisateurs anonymes et gratuits de Docker Hub peuvent effectuer. Si vous dépassez les limites de débit pour les pull requests anonymes ou gratuites destinées aux utilisateurs, vous recevez l'une des erreurs suivantes : 

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

Pour résoudre ces erreurs, vous pouvez attendre quelques heures avant d'essayer une autre pull request. Si vous prévoyez de soumettre régulièrement un grand nombre de pull requests, consultez le [site Web de Docker Hub](https://www.docker.com/increase-rate-limits) pour obtenir des informations sur les limites de débit et les options d'authentification et de mise à niveau de votre compte Docker. 

## Débogage AWS IoT Greengrass dans un conteneur Docker
<a name="debugging-greengrass-in-docker"></a>

Pour déboguer les problèmes avec un conteneur Docker, vous pouvez conserver les journaux d'exécution Greengrass ou attacher un shell interactif au conteneur Docker.

### Persister les logs Greengrass en dehors du conteneur Docker
<a name="debugging-docker-persist-logs"></a>

Après avoir arrêté un AWS IoT Greengrass conteneur, vous pouvez utiliser la `docker cp ` commande suivante pour copier les journaux Greengrass du conteneur Docker vers un répertoire de journaux temporaire. 

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Pour conserver les journaux même après la sortie ou la suppression d'un conteneur, vous devez exécuter le conteneur AWS IoT Greengrass Docker après avoir monté le répertoire par liaison. `/greengrass/v2/logs` 

Pour monter le `/greengrass/v2/logs` répertoire par liaison, effectuez l'une des opérations suivantes lorsque vous exécutez un nouveau conteneur AWS IoT Greengrass Docker.
+ Incluez `-v /tmp/logs:/greengrass/v2/logs:ro` dans votre `docker run` commande.

  Modifiez le `volumes` bloc dans le fichier Compose pour inclure la ligne suivante avant d'exécuter votre `docker-compose up` commande.

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

Vous pouvez ensuite consulter vos journaux `/tmp/logs` sur votre hôte pour voir les journaux de Greengrass lorsqu' AWS IoT Greengrass il est exécuté dans le conteneur Docker.

Pour plus d'informations sur l'exécution des conteneurs Greengrass Docker, consultez et [Exécuter AWS IoT Greengrass dans Docker avec provisionnement manuel](run-greengrass-docker-manual-provisioning.md) [Exécuter AWS IoT Greengrass dans Docker avec provisionnement automatique](run-greengrass-docker-automatic-provisioning.md)

### Attachez un shell interactif au conteneur Docker
<a name="debugging-docker-attach-shell"></a>

Lorsque vous exécutez `docker exec` des commandes dans le conteneur Docker, ces commandes ne sont pas capturées dans les journaux Docker. L'enregistrement de vos commandes dans les journaux Docker peut vous aider à étudier l'état du conteneur Greengrass Docker. Effectuez l’une des actions suivantes :
+ Exécutez la commande suivante dans un terminal séparé pour associer l'entrée, la sortie et l'erreur standard de votre terminal au conteneur en cours d'exécution. Cela vous permet de visualiser et de contrôler le conteneur Docker depuis votre terminal actuel.

  ```
  docker attach container-id
  ```
+ Exécutez la commande suivante dans un terminal séparé. Cela vous permet d'exécuter vos commandes en mode interactif, même si le conteneur n'est pas attaché.

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

Pour un AWS IoT Greengrass dépannage général, voir[Résolution des problèmes AWS IoT Greengrass V2](troubleshooting.md).