View a markdown version of this page

Déployez des applications conteneurisées lorsqu'elles AWS IoT Greengrass V2 s'exécutent en tant que conteneur Docker - Recommandations AWS

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

Déployez des applications conteneurisées lorsqu'elles AWS IoT Greengrass V2 s'exécutent en tant que conteneur Docker

Salih Bakir, Giuseppe Di Bella et Gustav Svalander, Amazon Web Services

Résumé

AWS IoT Greengrass Version 2, lorsqu'il est déployé en tant que conteneur Docker, ne prend pas en charge nativement l'exécution de conteneurs d'applications Docker. Ce modèle vous montre comment créer une image de conteneur personnalisée basée sur la dernière version AWS IoT Greengrass V2 qui active la fonctionnalité Docker-in-Docker (DinD). Avec DinD, vous pouvez exécuter des applications conteneurisées au sein de l'environnement. AWS IoT Greengrass V2

Vous pouvez déployer ce modèle en tant que solution autonome ou l'intégrer à des plateformes d'orchestration de conteneurs telles qu'Amazon ECS Anywhere. Quel que soit le modèle de déploiement, vous conservez toutes les AWS IoT Greengrass V2 fonctionnalités, y compris les capacités de traitement AWS IoT SiteWise Edge, tout en permettant des déploiements évolutifs basés sur des conteneurs.

Conditions préalables et limitations

Conditions préalables

  • Un actif Compte AWS.

  • Pour les AWS IoT Greengrass Version 2 prérequis généraux, consultez la section Conditions préalables dans la AWS IoT Greengrass Version 2 documentation.

  • Docker Engine, installé et configuré sous Linux, macOS ou Windows.

  • Docker Compose (si vous utilisez l'interface de ligne de commande (CLI) Docker Compose pour exécuter des images Docker).

  • Système d'exploitation Linux.

  • Un hyperviseur doté d'un serveur hôte qui prend en charge la virtualisation.

  • Exigences du système :

    • 2 Go de RAM (minimum)

    • 5 Go d'espace disque disponible (minimum)

    • Pour AWS IoT SiteWise Edge, un processeur quadricœur x86_64 avec 16 Go de RAM et 50 Go d'espace disque disponible. Pour plus d'informations sur le traitement AWS IoT SiteWise des données, consultez la section Exigences relatives aux packs de traitement des données dans la AWS IoT SiteWise documentation.

Versions du produit

  • AWS IoT Greengrass Version 2 version 2.5.3 ou ultérieure

  • Docker-in-Docker version 1.0.0 ou ultérieure

  • Docker Compose version 1.22 ou ultérieure

  • Docker Engine version 20.10.12 ou ultérieure

Limites

Architecture

Pile technologique cible

  • Sources de données : appareils IoT, capteurs ou équipements industriels qui génèrent des données à traiter

  • AWS IoT Greengrass V2— Fonctionnant comme un conteneur Docker doté de D-in-D fonctionnalités, déployé sur des infrastructures périphériques

  • Applications conteneurisées : applications personnalisées exécutées dans l' AWS IoT Greengrass V2 environnement sous forme de conteneurs Docker imbriqués

  • (Facultatif) Amazon ECS Anywhere : orchestration de conteneurs qui gère le déploiement des AWS IoT Greengrass V2 conteneurs

  • Autres Services AWS — AWS IoT Core AWS IoT SiteWise, et autres Services AWS pour le traitement et la gestion des données

Architecture cible

Le schéma suivant montre un exemple d'architecture de déploiement cible qui utilise Amazon ECS Anywhere, un outil de gestion de conteneurs.

Architecture de déploiement à l'aide d'Amazon ECS Anywhere.

Le schéma suivant illustre le flux de travail suivant :

1 : Stockage d'images de conteneurs — Amazon ECR stocke les images de AWS IoT Greengrass conteneurs et tous les conteneurs d'applications personnalisés nécessaires au traitement des bords.

2 et 3 : déploiement de conteneurs — Amazon ECS Anywhere déploie l'image du AWS IoT Greengrass conteneur depuis Amazon ECR vers l'emplacement périphérique, en gérant le cycle de vie du conteneur et le processus de déploiement.

4 : Déploiement des composants — Le AWS IoT Greengrass cœur déployé déploie automatiquement ses composants pertinents en fonction de sa configuration. Les composants incluent AWS IoT SiteWise Edge et les autres composants de traitement des bords nécessaires au sein de l'environnement conteneurisé.

5 : Ingestion des données — Une fois la configuration complète, AWS IoT Greengrass commence à ingérer les données de télémétrie et de capteurs provenant de diverses sources de données IoT situées à la périphérie.

6 : Traitement des données et intégration dans le cloud — Le AWS IoT Greengrass cœur conteneurisé traite les données localement à l'aide de ses composants déployés (y compris AWS IoT SiteWise Edge pour les données industrielles). Il envoie ensuite les données traitées aux AWS Cloud services pour une analyse et un stockage plus approfondis.

Outils

Services AWS

  • Amazon ECS Anywhere vous permet de déployer, d'utiliser et de gérer les tâches et les services Amazon ECS sur votre propre infrastructure.

  • Amazon Elastic Compute Cloud (Amazon EC2) fournit une capacité de calcul évolutive dans le AWS Cloud. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les augmenter ou les diminuer rapidement.

  • Amazon Elastic Container Registry (Amazon ECR) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.

  • AWS IoT Greengrassest un environnement d'exécution périphérique et un service cloud open source pour l'Internet des objets (IoT) qui vous aide à créer, déployer et gérer des applications IoT sur vos appareils.

  • AWS IoT SiteWisevous aide à collecter, modéliser, analyser et visualiser les données des équipements industriels à grande échelle.

Autres outils

  • Docker est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.

  • Docker Compose est un outil permettant de définir et d'exécuter des applications multi-conteneurs.

  • Docker Engine est une technologie de conteneurisation open source permettant de créer et de conteneuriser des applications.

Référentiel de code

Le code de ce modèle est disponible dans le Docker-in-Docker référentiel GitHub AWS IoT Greengrass v2.

Épopées

Sous-tâcheDescriptionCompétences requises

Clonez et naviguez vers le référentiel.

Pour cloner le dépôt, utilisez la commande suivante :

git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git

Pour accéder au docker répertoire, utilisez la commande suivante :

cd aws-iot-greengrass-v2-docker-in-docker/docker

DevOps ingénieur, AWS DevOps

Développez l’image Docker.

Pour créer l'image Docker avec la version par défaut (la plus récente), exécutez la commande suivante :

docker build -t x86_64/aws-iot-greengrass:latest .

Ou, pour créer l'image Docker avec une version spécifique, exécutez la commande suivante :

docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .

Pour vérifier le build, exécutez la commande suivante :

docker images | grep aws-iot-greengrass

 

AWS DevOps, DevOps ingénieur, développeur d'applications

(Facultatif) Transférez vers Amazon ECR.

  1. Pour créer le référentiel, exécutez la commande suivante :

    aws ecr create-repository --repository-name aws-iot-greengrass-dind --region us-east-1

  2. Pour vous authentifier, exécutez la commande suivante :

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com

  3. Pour étiqueter et appuyer, exécutez les commandes suivantes :

    docker tag x86_64/aws-iot-greengrass:latest <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

    docker push <ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

Développeur d'applications, AWS DevOps, DevOps ingénieur
Sous-tâcheDescriptionCompétences requises

Sélectionnez la méthode d'authentification.

Choisissez l’une des options suivantes :

  • Option 1 (recommandée) : rôles IAM : à utiliser si vous utilisez Amazon EC2, Amazon ECS ou Amazon EKS avec des rôles IAM appropriés. Aucune configuration supplémentaire n'est nécessaire.

  • Option 2 : variables d'environnement — Pour les tests et le développement.

  • Option 3 : fichier d'informations d'identification — Non recommandé pour la production.

  • Option 4 : env.cfg fichier d'ancienne génération.

Administrateur AWS

Configurez la méthode d'authentification.

Pour la méthode d'authentification que vous avez sélectionnée, suivez les instructions de configuration suivantes :

  • Option 2 (Variables d'environnement) — Préparer AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY, et éventuellementAWS_SESSION_TOKEN.

  • Option 3 (fichier d'informations d'identification) — Créez un répertoire et un fichier d'informations d'identification :

    • (a) Exécutez la commande suivante :

      mkdir -p ~/greengrass-v2-credentials

    • (b) Créez le fichier suivant à l'adresse ~/greengrass-v2-credentials/credentials :

      [default]

      aws_access_key_id=YourAccessKey

      aws_secret_access_key=YourSecretKey

    • (c) Sécurisez le fichier comme suit :

      chmod 600 ~/greengrass-v2-credentials/credentials

  • Option 4 (env.cfg) — Créez le env.cfg fichier dans le docker répertoire comme suit :

    GGC_ROOT_PATH=/greengrass/v2

    AWS_REGION=us-east-1

    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

Administrateur AWS
Sous-tâcheDescriptionCompétences requises

Configuration docker-compose.yml.

Mettez à jour le docker-compose.yml fichier avec les variables d'environnement comme suit :

  • Variables clés : PROVISION, AWS_REGIONTHING_NAME,THING_GROUP_NAME,TES_ROLE_NAME, TES_ROLE_ALIAS_NAME

  • Pour les informations d'identification via des variables d'environnement, décommentez ce qui suit :

    environment:

    - AWS_ACCESS_KEY_ID=YourKey

    - AWS_SECRET_ACCESS_KEY=YourSecret

  • Pour le fichier d'informations d'identification, décommentez ce qui suit :

    volumes:

    - ~/greengrass-v2-credentials:/root/.aws/:ro

  • Pour la persistance du journal, ajoutez ce qui suit :

    volumes:

    - ./logs:/greengrass/v2/logs

DevOps ingénieur

Démarrez et vérifiez le conteneur.

Pour commencer au premier plan, exécutez la commande suivante :

docker-compose up --build

Ou, pour démarrer en arrière-plan, exécutez la commande suivante :

docker-compose up --build -d

Pour vérifier l'état, exécutez la commande suivante :

docker-compose ps

Pour surveiller les journaux, exécutez la commande suivante :

docker-compose logs -f

DevOps ingénieur
Sous-tâcheDescriptionCompétences requises

Exécutez le conteneur avec Docker CLI.

  • Pour lancer une exécution de base sans provisionnement, exécutez la commande suivante :

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  • Pour lancer une exécution avec des variables d'environnement, exécutez la commande suivante :

    docker run --init --privileged -it --name aws-iot-greengrass -e PROVISION=true -e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=YourKey -e AWS_SECRET_ACCESS_KEY=YourSecret -e THING_NAME=MyGreengrassCore -e THING_GROUP_NAME=MyGreengrassCoreGroup -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Pour lancer une exécution avec un fichier d'informations d'identification, exécutez la commande suivante :

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro -e PROVISION=true -e AWS_REGION=us-east-1 -e THING_NAME=MyGreengrassCore -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Pour lancer une exécution avec un env.cfg fichier, exécutez la commande suivante :

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro --env-file env.cfg -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Pour lancer une exécution avec des journaux persistants, exécutez la commande suivante :

    docker run --init --privileged -it --name aws-iot-greengrass -v \$(pwd)/logs:/greengrass/v2/logs x86_64/aws-iot-greengrass:latest

DevOps ingénieur

Vérifiez le contenant.

  • Pour vérifier l'état du conteneur, exécutez la commande suivante :

    docker ps | grep aws-iot-greengrass

  • Pour surveiller les journaux, exécutez la commande suivante :

    docker logs -f aws-iot-greengrass

DevOps ingénieur
Sous-tâcheDescriptionCompétences requises

Déployez des applications.

  • Pour déployer le conteneur d'applications, exécutez la commande suivante :

    docker run -d --name my-app nginx:alpine

  • Pour vérifier le déploiement, exécutez la commande suivante :

    docker ps

  • Pour accéder aux journaux, exécutez la commande suivante :

    cd /greengrass/v2/logs && cat greengrass.log

Développeur d’applications

Accès et test Docker-in-Docker.

  1. Pour ouvrir un shell dans le conteneur, exécutez la commande suivante :

    docker exec -it aws-iot-greengrass sh

  2. Pour vérifier Docker, exécutez les commandes suivantes :

    docker --version

    docker ps

  3. Pour effectuer un test Docker-in-Docker, exécutez la commande suivante :

    docker run --rm hello-world

DevOps ingénieur
Sous-tâcheDescriptionCompétences requises

Configurez le cluster Amazon ECS.

  • Pour créer un cluster Amazon ECS, exécutez la commande suivante :

    aws ecs create-cluster --cluster-name greengrass-cluster --region us-east-1

  • Pour créer une activation SSM, exécutez la commande suivante :

    aws ssm create-activation --default-instance-name greengrass-edge --iam-role GreengrassECSAnywhereRole --registration-limit 10 --region us-east-1

  • Pour installer l'agent SSM sur un périphérique périphérique, exécutez la commande suivante :

    curl -o install.sh https://s3.amazonaws.com/aws-ssm-downloads/latest/linux_amd64/install.sh

    chmod +x install.sh

    ./install.sh activation-code activation-id us-east-1

Administrateur AWS

Déployez la tâche Amazon ECS.

  • Créez greengrass-task-definition.json à l'aide de la configuration des tâches, y compris containerDefinitions avecprivileged:true, des variables d'environnement et des montages de volume pour /var/lib/docker et pour les /greengrass/v2.Register tâches. Exécutez la commande suivante :

    aws ecs register-task-definition --cli-input-json file://greengrass-task-definition.json

  • Pour créer le service, exécutez la commande suivante :

    aws ecs create-service --cluster greengrass-cluster --service-name greengrass-service --task-definition greengrass-dind --desired-count 1 --launch-type EXTERNAL --region us-east-1

  • Pour vérifier le déploiement, exécutez la commande suivante :

    aws ecs describe-services --cluster greengrass-cluster --services greengrass-service --region us-east-1

Administrateur AWS
Sous-tâcheDescriptionCompétences requises

Arrêtez le conteneur.

  • Pour arrêter le conteneur à l'aide de Docker Compose, exécutez les commandes suivantes :

    docker-compose stop

    docker-compose down

    docker-compose down -v

  • Pour arrêter le conteneur (supprimer des volumes) à l'aide de la CLI Docker, exécutez les commandes suivantes :

    docker stop aws-iot-greengrass

    docker rm aws-iot-greengrass

  • Pour arrêter le conteneur à l'aide du retrait forcé, exécutez la commande suivante :

    docker rm -f aws-iot-greengrass

DevOps ingénieur

Résolution des problèmes

ProblèmeSolution

Le conteneur ne démarre pas avec des erreurs d'autorisation.

  1. Pour vous assurer que le conteneur fonctionne avec l'--privilegedindicateur requis pour Docker-in-Docker, exécutez la commande suivante :

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  2. Dans le docker-compose.yml fichier, définissez les paramètres suivants :

    privileged: true

Avertissement

--privilegedaccorde des privilèges étendus au conteneur.

Le provisionnement échoue en raison d'erreurs d'identification.

Pour vérifier que les informations d'identification sont correctement configurées, procédez comme suit :

  1. Vérifiez le rôle IAM :

    aws sts get-caller-identity

  2. Vérifiez les variables d'environnement :

    docker exec -it aws-iot-greengrass sh -c 'echo \$AWS_ACCESS_KEY_ID'

  3. Vérifiez le fichier d'informations d'identification :

    docker exec -it aws-iot-greengrass sh -c 'cat /root/.aws/credentials'

Assurez-vous que les autorisations IAM incluentiot:CreateThing,iot:CreatePolicy, iot:AttachPolicyiam:CreateRole, etiam:AttachRolePolicy.

Impossible de se connecter au démon Docker à l'intérieur du conteneur.

  1. Vérifiez l'état du démon Docker :

    docker exec -it aws-iot-greengrass sh -c 'ps aux | grep dockerd'

  2. Vérifiez que le socket Docker existe :

    docker exec -it aws-iot-greengrass sh -c 'ls -la /var/run/docker.sock'

  3. Démarrez manuellement si nécessaire :

    docker exec -it aws-iot-greengrass sh -c 'dockerd > /var/log/docker.log 2>&1 &'

Le conteneur manque d'espace disque.

  1. Vérifiez l'espace disque :

    df -h

  2. Ressources Docker propres :

    docker system prune -a --volumes

  3. Supprimez les anciens artefacts de Greengrass :

    docker exec -it aws-iot-greengrass sh -c 'rm -rf /greengrass/v2/work/*'

Garantir un espace disque minimal : 5 Go pour les opérations de base et 50 Go pour AWS IoT SiteWise Edge

Problèmes de construction.

  1. Vérifiez que vous êtes bien dans le docker répertoire :

    cd docker && pwd

  2. Vérifiez que cela Dockerfile existe :

    ls -la Dockerfile

  3. Vérifiez que Docker est installé et en cours d'exécution :

    docker --version && docker ps

Problèmes de connectivité réseau.

  1. Testez la résolution DNS :

    docker exec -it aws-iot-greengrass sh -c 'nslookup google.com'

  2. Testez AWS la connectivité :

    docker exec -it aws-iot-greengrass sh -c 'curl https://iot.us-east-1.amazonaws.com'

Vérifiez que le pare-feu autorise le trafic HTTPS (443) et MQTT (8883) sortant.

Les composants Greengrass ne se déploient pas.

  1. Consultez les journaux de Greengrass :

    docker exec -it aws-iot-greengrass sh -c 'cat /greengrass/v2/logs/greengrass.log'

  2. Vérifiez la configuration du rôle TES :

    aws iot describe-role-alias --role-alias TES_ROLE_ALIAS_NAME

Consultez les journaux spécifiques aux composants dans le /greengrass/v2/logs/ répertoire.

Le conteneur sort immédiatement après le démarrage.

  1. Vérifiez les journaux des conteneurs pour détecter les erreurs :

    docker logs aws-iot-greengrass

  2. Exécuter avec un shell interactif pour le débogage :

    docker run --init --privileged -it --entrypoint sh x86_64/aws-iot-greengrass:latest

Vérifiez que toutes les variables d'environnement requises sont correctement définies siPROVISION=true. Assurez-vous que le --init drapeau est utilisé lors du démarrage du conteneur.

Ressources connexes

AWS resources

Autres ressources

Informations supplémentaires

  • Pour le traitement des données AWS IoT SiteWise Edge, Docker doit être disponible dans l' AWS IoT Greengrass environnement.

  • Pour exécuter un conteneur imbriqué, vous devez exécuter le AWS IoT Greengrass conteneur avec des informations d'identification de niveau administrateur.