Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement automatique des ressources - AWS IoT Greengrass

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 AWS IoT Greengrass dans un conteneur Docker avec provisionnement automatique des ressources

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 plus d’informations, consultez Exécuter AWS IoT Greengrass dans un conteneur Docker avec provisionnement manuel des ressources.

Prérequis

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.

  • 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, consultezPolitique IAM minimale permettant au programme d'installation de provisionner les ressources.

  • Une image AWS IoT Greengrass Docker. Vous pouvez créer une image à partir du AWS IoT Greengrass Dockerfile.

  • L'ordinateur hôte sur lequel vous exécutez le conteneur Docker doit répondre aux exigences suivantes :

    • Système d'exploitation basé sur Linux doté d'une connexion Internet.

    • Docker Engine version 18.09 ou ultérieure.

    • (Facultatif) Docker Compose 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.

Configuration de vos informations d'identification pour l'AWS

Au cours de cette étape, vous créez un fichier d'informations d'identification sur l'ordinateur hôte contenant 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 votreCompte AWS. Pour plus d'informations sur la politique IAM minimale requise par le programme d'installation pour provisionner automatiquement les ressources, consultezPolitique IAM minimale permettant au programme d'installation de provisionner les ressources.

  1. Récupérez l'un des éléments suivants.

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

    mkdir ./greengrass-v2-credentials
  3. 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
  4. 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'AWSidentification, celles-ci resteront montées dans le conteneur. Pour plus d’informations, consultez Exécuter le logiciel de AWS IoT Greengrass base dans un conteneur.

Création d'un fichier d'environnement

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'--envargument -e or 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 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
  2. 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_ROOTenvironnement pour définir cette valeur.

    • région. L'Région AWSendroit où vous avez créé les ressources.

    • MyGreengrassCore. Nom de l'objet AWS IoT. 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 IoTobjet.

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

    • Greengrass V2 TokenExchangeRole. 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 GreengrassV2 Access TokenExchangeRole. Pour plus d’informations, consultez Autoriser les appareils principaux à interagir avec les AWS services.

    • 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

    Vous pouvez définir la variable d'DEPLOY_DEV_TOOLSenvironnement sur true pour déployer le composant Greengrass CLI, ce qui vous permet de développer des composants personnalisés dans le conteneur Docker. 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

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 :

    • --rm. Nettoie le conteneur à sa sortie.

    • --init. Utilise un processus d'initialisation dans le conteneur.

      Note

      L'--initargument est nécessaire pour arrêter le logiciel AWS IoT Greengrass Core lorsque vous arrêtez le conteneur Docker.

    • -it. (Facultatif) Exécute le conteneur Docker au premier plan en tant que processus interactif. Vous pouvez le remplacer par l'-dargument 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 dans la documentation Docker.

    • --name. Exécute un conteneur nommé aws-iot-greengrass

    • -v. 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.

    • --env-file. (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 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.

    • -p. (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

    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 dans la documentation Docker.

  2. 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 plus d’informations, consultez Interagissez avec les AWS services.

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.

  2. Ajoutez le contenu suivant au fichier Compose. Votre fichier doit être similaire à l'exemple suivant : Remplacez docker-image 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"

    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 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 pour définir les variables directement dans votre fichier Compose.

    Note

    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 dans la documentation Docker.

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

    docker-compose -f docker-compose.yml up
  4. 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 plus d’informations, consultez Interagissez avec les AWS services.

Étapes suivantes

AWS IoT GreengrassLe 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 Didacticiel : Commencer avec AWS IoT Greengrass V2

Note

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 plus d’informations, consultez Attachez un shell interactif au conteneur Docker.

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 plus d’informations, consultez Persister les logs Greengrass en dehors du conteneur Docker.

Pour arrêter un conteneur AWS IoT Greengrass Docker en cours d'exécution, exécutez docker stop oudocker-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-initexé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 dans la documentation Docker.

Pour plus d'informations sur la résolution des problèmes liés AWS IoT Greengrass à l'exécution dans un conteneur Docker, consultezRésolution des problèmes liés à AWS IoT Greengrass dans un conteneur Docker.