AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.
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.
Connecteur de déploiement d'applications Docker
Le connecteur de déploiement d'applications Greengrass Docker facilite l'exécution de vos images Docker sur un noyau. AWS IoT Greengrass Le connecteur utilise Docker Compose pour démarrer une application Docker multi-conteneur à partir d'un fichier docker-compose.yml
. Plus précisément, le connecteur exécute des commandes docker-compose
pour gérer les conteneurs Docker sur un appareil principal (noyau) unique. Pour de plus amples informations, veuillez consulter Overview of Docker Composer
Après avoir déployé le groupe Greengrass, le connecteur extrait les dernières images et démarre les conteneurs Docker. Il exécute la docker-compose
up
commande docker-compose pull
et. Le connecteur publie ensuite l'état de la commande dans une rubrique MQTT en sortie. Il enregistre également des informations d'état concernant l'exécution des conteneurs Docker. Cela vous permet de surveiller les journaux de vos applications sur Amazon CloudWatch. Pour plus d’informations, consultez Surveillance avec les journaux AWS IoT Greengrass. Le connecteur démarre également les conteneurs Docker à chaque redémarrage du démon Greengrass. Le nombre de conteneurs Docker pouvant s'exécuter sur le noyau dépend de votre matériel.
Les conteneurs Docker s'exécutent en dehors du domaine Greengrass sur l'appareil principal (noyau), de sorte qu'ils ne peuvent pas accéder à la communication inter-processus (IPC) du noyau. Cependant, vous pouvez configurer certains canaux de communication avec des composants Greengrass, tels que les fonctions Lambda locales. Pour plus d’informations, consultez Communication avec les conteneurs Docker.
Vous pouvez utiliser le connecteur pour des scénarios tels que l'hébergement d'un serveur web ou d'un serveur MySQL sur votre appareil principal (noyau). Les services locaux de vos applications Docker peuvent communiquer entre eux, avec d'autres processus dans l'environnement local et avec des services cloud. Par exemple, vous pouvez exécuter un serveur Web sur le cœur qui envoie des demandes provenant de fonctions Lambda à un service Web dans le cloud.
Ce connecteur s'exécute en mode d'isolation No container (Aucun conteneur), de sorte que vous pouvez le déployer dans un groupe Greengrass qui s'exécute sans conteneurisation Greengrass.
Ce connecteur est disponible dans les versions suivantes.
Version |
ARN |
---|---|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le Journal des modifications.
Prérequis
Ce connecteur possède les critères suivants :
-
AWS IoT GreengrassLogiciel de base v1.10 ou version ultérieure.
Note
Ce connecteur n'est pas pris en charge sur OpenWrt les distributions.
-
Python
version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH. Note
Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique entre le dossier d'installation par défaut de Python 3.7 et les fichiers binaires Python 3.8 installés.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Ceci configure votre appareil de sorte qu'il réponde aux exigence de Python pour AWS IoT Greengrass.
-
Un minimum de 36 Mo de RAM sur le noyau Greengrass pour que le connecteur surveille les conteneurs Docker en cours d'exécution. La mémoire totale requise dépend du nombre de conteneurs Docker qui s'exécutent sur le noyau.
-
Docker Engine
1.1.9.1 ou version ultérieure installé sur le noyau Greengrass. La version 19.0.3 est la dernière version vérifiée pour fonctionner avec le connecteur. L'exécutable
docker
doit se trouver dans le répertoire/usr/local/bin
ou/usr/bin
.Important
Nous vous recommandons d'installer un magasin d'informations d'identification pour sécuriser les copies locales de vos informations d'identification Docker. Pour plus d’informations, consultez Remarque de sécurité.
Pour plus d'informations sur l'installation de Docker sur les distributions Amazon Linux, consultez les bases de Docker pour Amazon ECS dans le manuel Amazon Elastic Container Service Developer Guide.
-
Docker Compose
installé sur le noyau Greengrass. L'exécutable docker-compose
doit se trouver dans le répertoire/usr/local/bin
ou/usr/bin
.Les versions suivantes de Docker Compose sont vérifiées pour fonctionner avec le connecteur.
Version du connecteur
Version vérifiée de Compose Docker
7
1.25.4
6
1.25.4
5
1.25.4
4
1.25.4
3
1.25.4
2
1.25.1
1
1.24.1
-
Un seul fichier Docker Compose (par exemple,
docker-compose.yml
), stocké dans Amazon Simple Storage Service (Amazon S3). Le format doit être compatible avec la version de Docker Compose installée sur le noyau. Vous devez tester le fichier avant de l'utiliser sur votre noyau. Si vous modifiez le fichier après avoir déployé le groupe Greengrass, vous devez redéployer le groupe pour mettre à jour votre copie locale sur le noyau. -
Un utilisateur Linux autorisé à appeler le démon Docker local et à écrire dans le répertoire qui stocke la copie locale de votre fichier Compose. Pour plus d’informations, consultez Configuration de l'utilisateur Docker sur le noyau.
-
Rôle de groupe Greengrass configuré pour autoriser l'action
s3:GetObject
sur le compartiment S3 qui contient votre fichier Compose. Cette autorisation est illustrée dans l'exemple de politique IAM suivant.{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::
bucket-name
/*" } ] }Note
Si votre compartiment S3 est activé pour la gestion des versions, le rôle doit être configuré pour autoriser également l'
s3:GetObjectVersion
action. Pour plus d'informations, consultez la section Utilisation du versionnement dans le guide de l'utilisateur d'Amazon Simple Storage Service.Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d’informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).
-
Si votre fichier Docker Compose fait référence à une image Docker stockée dans Amazon ECR, le rôle de groupe Greengrass est configuré pour autoriser ce qui suit :
-
ecr:GetDownloadUrlForLayer
etecr:BatchGetImage
des actions sur vos référentiels Amazon ECR contenant les images Docker. -
Action
ecr:GetAuthorizationToken
sur vos ressources.
Les référentiels doivent se trouver dans le même Compte AWS emplacement Région AWS que le connecteur.
Important
Les autorisations associées au rôle de groupe peuvent être assumées par toutes les fonctions et connecteurs Lambda du groupe Greengrass. Pour plus d’informations, consultez Remarque de sécurité.
Ces autorisations sont affichées dans l'exemple de stratégie suivant.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:
region
:account-id
:repository/repository-name
" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }Pour plus d'informations, consultez les exemples de politiques de dépôt Amazon ECR dans le guide de l'utilisateur Amazon ECR.
Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d’informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).
-
-
Si votre fichier Docker Compose fait référence à une image Docker provenant d'AWS Marketplace
, le connecteur requiert également le respect des conditions suivantes : -
Vous devez être abonné aux produits de conteneur AWS Marketplace. Pour de plus amples informations, veuillez consulter Rechercher et s'abonner à des produits de conteneur dans le Guide des abonnés AWS Marketplace.
-
AWS IoT Greengrassdoit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section Exigences relatives aux secrets. Le connecteur utilise cette fonctionnalité uniquement pour récupérer vos secretsAWS Secrets Manager, et non pour les stocker.
-
Vous devez créer un secret dans Secrets Manager pour chaque AWS Marketplace registre qui stocke une image Docker référencée dans votre fichier Compose. Pour plus d’informations, consultez Accès aux images Docker à partir de référentiels privés.
-
-
Si votre fichier Docker Compose fait référence à une image Docker provenant de référentiels privés dans des registres autres qu'Amazon ECR, tels que Docker Hub, le connecteur répond également aux exigences suivantes :
-
AWS IoT Greengrassdoit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section Exigences relatives aux secrets. Le connecteur utilise cette fonctionnalité uniquement pour récupérer vos secretsAWS Secrets Manager, et non pour les stocker.
-
Vous devez créer un secret dans Secrets Manager pour chaque dépôt privé qui stocke une image Docker référencée dans votre fichier Compose. Pour plus d’informations, consultez Accès aux images Docker à partir de référentiels privés.
-
-
Le démon Docker doit être en cours d'exécution lorsque vous déployez un groupe Greengrass contenant ce connecteur.
Accès aux images Docker à partir de référentiels privés
Si vous utilisez des informations d'identification pour accéder à vos images Docker, vous devez autoriser le connecteur à y accéder. La façon dont vous procédez dépend de l'emplacement de l'image Docker.
Pour les images Docker stockées sur Amazon ECR, vous autorisez l'obtention de votre jeton d'autorisation dans le rôle du groupe Greengrass. Pour plus d’informations, consultez Prérequis.
Pour les images Docker stockées dans d'autres référentiels privés ou registres, vous devez créer un secret dans AWS Secrets Manager pour stocker vos informations de connexion. Cela inclut les images Docker auxquelles vous vous êtes abonné dans AWS Marketplace. Créez un secret pour chaque référentiel. Si vous mettez à jour vos secrets dans Secrets Manager, les modifications se répercuteront sur le cœur la prochaine fois que vous déploierez le groupe.
Note
Secrets Manager est un service que vous pouvez utiliser pour stocker et gérer en toute sécurité vos informations d'identification, clés et autres secrets dans leAWS Cloud. Pour plus d'informations, consultez Présentation d'AWS Secrets Manager dans le Guide de l'utilisateur AWS Secrets Manager.
Chaque secret doit contenir les clés suivantes :
Clé |
Valeur |
---|---|
|
Nom d'utilisateur utilisé pour accéder au référentiel ou au registre. |
|
Mot de passe utilisé pour accéder au référentiel ou au registre. |
|
Point de terminaison du registre. Il doit correspondre à l'URL de registre correspondante dans le fichier Compose. |
Note
Pour permettre à AWS IoT Greengrass d'accéder à un secret par défaut, le nom du secret doit commencer par greengrass-. Sinon, c'est votre rôle de service Greengrass qui doit accorder l'accès. Pour plus d’informations, consultez Autoriser AWS IoT Greengrass à obtenir les valeurs secrètes.
- Pour obtenir les informations de connexion pour les images Docker à partir d'AWS Marketplace
-
-
Obtenez votre mot de passe pour les images Docker à AWS Marketplace l'aide de la
aws ecr get-login-password
commande. Pour plus d’informations, consultez la section get-login-password dans la référence des commandes AWS CLI.aws ecr get-login-password
-
Récupérez l'URL de registre pour l'image Docker. Ouvrez le AWS Marketplace site Web et ouvrez la page de lancement du produit conteneur. Sous Images du conteneur, choisissez Afficher les détails de l'image du conteneur pour localiser le nom d'utilisateur et l'URL du registre.
Utilisez le nom d'utilisateur, le mot de passe et l'URL de registre récupérés pour créer un secret pour chaque AWS Marketplace registre qui stocke les images Docker référencées dans votre fichier Compose.
-
- Pour créer des secrets (console)
-
Dans la console AWS Secrets Manager, choisissez Autre type de secrets. Sous Spécifiez les paires clé/valeur à stocker pour ce secret, ajoutez des lignes pour
username
,password
etregistryUrl
. Pour plus d'informations, consultez la section Création d'un secret de base dans le guide de AWS Secrets Manager l'utilisateur. - Pour créer des secrets (interface de ligne de commande)
-
Dans leAWS CLI, utilisez la
create-secret
commande Secrets Manager, comme indiqué dans l'exemple suivant. Pour plus d'informations, voir create-secret dans la référence des AWS CLIcommandes.aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
Important
Il est de votre responsabilité de sécuriser le répertoire DockerComposeFileDestinationPath
qui stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Pour plus d’informations, consultez Remarque de sécurité.
Paramètres
Ce connecteur fournit les paramètres suivants :
Exemple de création de connecteur (AWS CLI)
La commande CLI suivante crée une ConnectorDefinition
version initiale contenant le connecteur de déploiement d'applications Greengrass Docker.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "myS3Bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret1-hash
\",\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret2-hash
\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
Note
La fonction Lambda de ce connecteur a un cycle de vie prolongé.
Données d'entrée
Ce connecteur ne nécessite ni n'accepte les données d'entrée.
Données de sortie
Ce connecteur publie l'état de la commande docker-compose up
sous forme de données de sortie.
- Filtre de rubrique dans l'abonnement
-
dockerapplicationdeploymentconnector/message/status
- Exemple de sortie : réussite
-
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"myS3Bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
- Exemple de sortie : échec
-
{ "status":"fail", "error_message":"
description of error
", "error":"InvalidParameter" }Le type d'erreur peut être
InvalidParameter
ouInternalError
.
Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass
Le connecteur de déploiement de l'application Greengrass Docker s'exécute sous le nom d'utilisateur que vous spécifiez pour le paramètre. DockerUserId
Si vous ne spécifiez pas de valeur, le connecteur s'exécute en tant que ggc_user
(identité d'accès Greengrass par défaut).
Pour que le connecteur puisse interagir avec le démon Docker, l'utilisateur Docker doit appartenir au groupe Linux docker
sur le noyau. L'utilisateur Docker doit également disposer d'autorisations d'écriture dans le répertoire DockerComposeFileDestinationPath
. C'est à cet emplacement que le connecteur stocke votre fichier docker-compose.yml
local et les informations d'identification Docker.
Note
-
Nous vous recommandons de créer un utilisateur Linux au lieu d'utiliser la valeur par défaut
ggc_user
. Sinon, toute fonction Lambda du groupe Greengrass peut accéder au fichier Compose et aux informations d'identification Docker. -
Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour plus d’informations, consultez Exécution d'une fonction Lambda en tant que root.
-
Créez l'utilisateur. Vous pouvez exécuter la commande
useradd
et inclure l'option facultative-u
pour attribuer un UID. Par exemple :sudo useradd -u
1234
user-name
-
Ajoutez l'utilisateur au groupe
docker
sur le noyau. Par exemple :sudo usermod -aG docker
user-name
Pour de plus amples informations, notamment sur la création du groupe
docker
, veuillez consulter Manage Docker as a non-root userdans la documentation Docker. -
Accordez à l'utilisateur les autorisations en écriture dans le répertoire spécifié pour le paramètre
DockerComposeFileDestinationPath
. Par exemple :-
Pour définir l'utilisateur en tant que propriétaire du répertoire Cet exemple utilise l'UID de l'étape 1.
chown
1234
docker-compose-file-destination-path
-
Pour accorder les autorisations en lecture et en écriture au propriétaire
chmod 700
docker-compose-file-destination-path
Pour de plus amples informations, veuillez consulter How To Manage File And Folder Permissions In Linux
dans la documentation Linux Foundation. -
Si vous n'avez pas attribué d'UID lors de la création de l'utilisateur, ou si vous avez utilisé un utilisateur existant, exécutez la commande
id
pour rechercher l'UID.id -u
user-name
Vous utilisez l'UID pour configurer le paramètre
DockerUserId
pour le connecteur.
-
Informations d'utilisation
Lorsque vous utilisez le connecteur de déploiement d'applications Greengrass Docker, vous devez connaître les informations d'utilisation spécifiques à l'implémentation suivantes.
-
Préfixe fixe pour les noms de projets. Le connecteur ajoute le préfixe
greengrassdockerapplicationdeployment
aux noms des conteneurs Docker qu'il démarre. Le connecteur utilise ce préfixe comme nom de projet dans les commandesdocker-compose
qu'il exécute. -
Comportement de journalisation. Le connecteur écrit des informations d'état et de dépannage dans un fichier journal. Vous pouvez configurer AWS IoT Greengrass pour envoyer des CloudWatch journaux à Logs et pour écrire des journaux localement. Pour plus d’informations, consultez Journalisation des connecteurs. Voici le chemin d'accès au journal local du connecteur :
/
greengrass-root
/ggc/var/log/user/region
/aws/DockerApplicationDeployment.logVous devez disposer des autorisations root pour accéder aux journaux locaux.
-
Mise à jour des images Docker. Docker met en cache les images sur l'appareil principal (noyau). Si vous mettez à jour une image Docker et que vous souhaitez propager la modification à l'appareil principal (noyau), assurez-vous de modifier la balise de l'image dans le fichier Compose. Les modifications prennent effet après le déploiement du groupe Greengrass.
-
Délai d'attente de 10 minutes pour les opérations de nettoyage. Lorsque le daemon Greengrass s'arrête lors d'un redémarrage, la
docker-compose down
commande est lancée. Tous les conteneurs Docker disposent d'un maximum de 10 minutes aprèsdocker-compose down
leur lancement pour effectuer toute opération de nettoyage. Si le nettoyage n'est pas terminé dans les 10 minutes, vous devez nettoyer les conteneurs restants manuellement. Pour de plus amples informations, veuillez consulter docker rmdans la documentation de l'interface de ligne de commande Docker. -
Exécution de commandes Docker. Pour résoudre les problèmes, vous pouvez exécuter des commandes Docker dans une fenêtre de terminal sur l'appareil principal (noyau). Par exemple, exécutez la commande suivante pour afficher les conteneurs Docker qui ont été démarrés par le connecteur :
docker ps --filter name="greengrassdockerapplicationdeployment"
-
ID de ressource réservée. Le connecteur utilise l'ID
DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_
pour les ressources Greengrass qu'il crée dans le groupe Greengrass. Les ID de ressource doivent être uniques dans le groupe. Par conséquent, n'affectez pas un ID de ressource susceptible d'entrer en conflit avec cet ID de ressource réservé.index
-
Mode hors ligne. Lorsque vous définissez le paramètre de
DockerOfflineMode
configuration surTrue
, le connecteur Docker peut fonctionner en mode hors ligne. Cela peut se produire lorsqu'un déploiement de groupe Greengrass redémarre alors que l'appareil principal est hors ligne et que le connecteur ne peut pas établir de connexion avec Amazon S3 ou Amazon ECR pour récupérer le fichier Docker Compose.Lorsque le mode hors ligne est activé, le connecteur tente de télécharger votre fichier Compose et d'exécuter des
docker login
commandes comme il le ferait pour un redémarrage normal. Si ces tentatives échouent, le connecteur recherche un fichier Compose stocké localement dans le dossier spécifié à l'aide duDockerComposeFileDestinationPath
paramètre. S'il existe un fichier Compose local, le connecteur suit la séquence normale dedocker-compose
commandes et extrait des images locales. Si le fichier Compose ou les images locales ne sont pas présents, le connecteur échoue. Le comportement desStopContainersOnNewDeployment
paramètresForceDeploy
et reste le même en mode hors ligne.
Communication avec les conteneurs Docker
AWS IoT Greengrass prend en charge les canaux de communication suivants entre les composants Greengrass et les conteneurs Docker :
-
Les fonctions Greengrass Lambda peuvent utiliser les API REST pour communiquer avec les processus dans les conteneurs Docker. Vous pouvez configurer un serveur dans un conteneur Docker qui ouvre un port. Les fonctions Lambda peuvent communiquer avec le conteneur sur ce port.
-
Les processus dans les conteneurs Docker peuvent échanger des messages MQTT via le courtier de messages Greengrass local. Vous pouvez configurer le conteneur Docker en tant qu'appareil client dans le groupe Greengrass, puis créer des abonnements pour permettre au conteneur de communiquer avec les fonctions Lambda de Greengrass, les appareils clients et les autres connecteurs du groupe, AWS IoT ou avec le service parallèle local. Pour plus d’informations, consultez Configurer la communication MQTT avec les conteneurs Docker.
-
Les fonctions Greengrass Lambda peuvent mettre à jour un fichier partagé pour transmettre des informations aux conteneurs Docker. Vous pouvez utiliser le fichier Compose pour effectuer un montage lié du chemin d'accès du fichier partagé pour un conteneur Docker.
Configurer la communication MQTT avec les conteneurs Docker
Vous pouvez configurer un conteneur Docker en tant que périphérique client et l'ajouter à un groupe Greengrass. Ensuite, vous pouvez créer des abonnements permettant la communication MQTT entre le conteneur Docker et les composants Greengrass ou AWS IoT. Dans la procédure suivante, vous créez un abonnement qui permet à l'appareil du conteneur Docker de recevoir des messages de mise à jour shadow à partir du service shadow local. Vous pouvez suivre ce modèle pour créer d'autres abonnements.
Note
Cette procédure suppose que vous avez déjà créé un groupe Greengrass et un noyau Greengrass (v1.10 ou version ultérieure). Pour plus d'informations sur la création d'un groupe et d'un noyau Greengrass, consultez. Commencer avec AWS IoT Greengrass
Pour configurer un conteneur Docker en tant qu'appareil client et l'ajouter à un groupe Greengrass
-
Créez un dossier sur l'appareil principal pour stocker les certificats et les clés utilisés pour authentifier l'appareil Greengrass.
Le chemin d'accès du fichier doit être monté sur le conteneur Docker que vous souhaitez démarrer. L'extrait suivant montre comment monter un chemin d'accès de fichier dans votre fichier Compose. Dans cet exemple,
path-to-device-certs
représente le dossier que vous avez créé à cette étape.version: '3.3' services: myService: image:
user-name
/repo
:image-tag
volumes: - /path-to-device-certs
/:/path-accessible-in-container
Dans le volet de navigation de la AWS IoT console, sous Gérer, développez les appareils Greengrass, puis choisissez Groups (V1).
Choisissez le groupe cible.
-
Sur la page de configuration du groupe, choisissez Appareils clients, puis sélectionnez Associer.
-
Dans le mode Associer un appareil client à ce groupe, choisissez Create new AWS IoT thing.
La page Créer des objets s'ouvre dans un nouvel onglet.
-
Sur la page Créer des objets, choisissez Créer un objet unique, puis cliquez sur Suivant.
-
Sur la page Spécifier les propriétés de l'objet, entrez le nom de l'appareil, puis choisissez Suivant.
-
Sur la page Configurer le certificat de l'appareil, choisissez Next.
-
Sur la page Attacher des politiques au certificat, effectuez l'une des opérations suivantes :
-
Sélectionnez une politique existante qui accorde les autorisations requises par les appareils clients, puis choisissez Create thing.
Un modal s'ouvre dans lequel vous pouvez télécharger les certificats et les clés que l'appareil utilise pour se connecter au AWS Cloud et au noyau.
-
Créez et joignez une nouvelle politique qui accorde des autorisations aux appareils clients. Procédez comme suit :
-
Choisissez Créer une politique.
La page Créer une stratégie s'ouvre dans un nouvel onglet.
-
Sur la page Create policy (Créer une stratégie), procédez comme suit :
-
Dans Nom de la stratégie, entrez un nom qui décrit la stratégie, tel que
GreengrassV1ClientDevicePolicy
. -
Dans l'onglet Déclarations de politique, sous Document de stratégie, sélectionnez JSON.
-
Entrez le document de politique suivant. Cette politique permet à l'appareil client de découvrir les cœurs de Greengrass et de communiquer sur tous les sujets MQTT. Pour plus d'informations sur la façon de restreindre l'accès à cette politique, consultezAuthentification et autorisation d'appareil pour AWS IoT Greengrass.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
-
Choisissez Create (Créer) pour créer la politique.
-
-
Retournez à l'onglet du navigateur avec la page Joindre les politiques au certificat ouverte. Procédez comme suit :
-
Dans la liste des politiques, sélectionnez la politique que vous avez créée, telle que GreengrassV1ClientDevicePolicy.
Si vous ne voyez pas la politique, cliquez sur le bouton d'actualisation.
-
Choisissez Créer objet.
Un modal s'ouvre dans lequel vous pouvez télécharger les certificats et les clés que l'appareil utilise pour se connecter au AWS Cloud et au noyau.
-
-
-
-
Dans le modal Télécharger les certificats et les clés, téléchargez les certificats de l'appareil.
Important
Avant de choisir OK, téléchargez les ressources de sécurité.
Procédez comme suit :
-
Pour le certificat de l'appareil, choisissez Télécharger pour télécharger le certificat de l'appareil.
-
Pour le fichier de clé publique, choisissez Télécharger pour télécharger la clé publique du certificat.
-
Pour Fichier de clé privée, choisissez Télécharger pour télécharger le fichier de clé privée pour le certificat.
-
Passez en revue l'authentification du serveur dans le guide du AWS IoT développeur et choisissez le certificat CA racine approprié. Nous vous recommandons d'utiliser les points de terminaison Amazon Trust Services (ATS) et les certificats CA racine ATS. Sous Certificats de l'autorité de certification racine, choisissez Télécharger pour un certificat de l'autorité de certification racine.
-
Sélectionnez Exécuté.
Notez l'ID de certificat commun aux noms de fichiers du certificat et des clés de l'appareil. Vous en aurez besoin ultérieurement.
-
-
Copiez les certificats et les clés dans le dossier que vous avez créé à l'étape 1.
Ensuite, créez un abonnement dans le groupe. Pour cet exemple, vous créez un abonnement qui permet à l'appareil du conteneur Docker de recevoir des messages MQTT à partir du service shadow local.
Note
La taille maximale d'un document shadow est de 8 Ko. Pour plus d'informations, consultez la section sur AWS IoTles quotas dans le guide du AWS IoT développeur.
Pour créer un abonnement permettant à l'appareil de conteneur Docker de recevoir des messages MQTT du service shadow local
-
Sur la page Sélectionnez la source et la cible, configurez la source et la cible comme suit :
-
Dans Sélectionner une source, choisissez Services, puis Service shadow local.
-
Pour Sélectionnez une cible, choisissez Appareils, puis choisissez votre appareil.
-
Choisissez Suivant.
-
Sur la page Filtrer vos données à l'aide d'une rubrique, dans Filtrer par rubrique
$aws/things/
, sélectionnez, puis cliquez sur Suivant.MyDockerDevice
/shadow/update/acceptedMyDockerDevice
Remplacez-le par le nom de l'appareil que vous avez créé précédemment. -
Choisissez Finish (Terminer).
-
Incluez l'extrait de code suivant dans l'image Docker que vous référencez dans votre fichier Compose. C'est le code de l'appareil Greengrass. Ajoutez également du code dans votre conteneur Docker pour démarrer l'appareil Greengrass à l'intérieur du conteneur. Il peut s'exécuter comme un processus distinct dans l'image ou dans un thread distinct.
import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)
Remarque de sécurité
Lorsque vous utilisez le connecteur de déploiement d'applications Greengrass Docker, tenez compte des considérations de sécurité suivantes.
-
Stockage local du fichier Docker Compose
Le connecteur stocke une copie de votre fichier Compose dans le répertoire spécifié pour le paramètre
DockerComposeFileDestinationPath
.Il est de votre responsabilité de sécuriser ce répertoire. Vous devez utiliser les autorisations du système de fichiers pour restreindre l'accès au répertoire.
-
Stockage local des informations d'identification Docker
Si vos images Docker sont stockées dans des référentiels privés, le connecteur stocke vos informations d'identification Docker dans le répertoire spécifié pour le paramètre
DockerComposeFileDestinationPath
.Il est de votre responsabilité de sécuriser ces informations d'identification. Par exemple, vous devez utiliser l'assistant des informations d'identification (credential-helper)
sur l'appareil principal (noyau) lorsque vous installez Docker Engine. -
Installation de Docker Engine à partir d'une source fiable
Il est de votre responsabilité d'installer Docker Engine à partir d'une source fiable. Ce connecteur utilise le démon Docker sur l'appareil principal (noyau) pour accéder à vos ressources Docker et gérer les conteneurs Docker.
-
Portée des autorisations de rôle de groupe Greengrass
Les autorisations que vous ajoutez dans le rôle de groupe Greengrass peuvent être assumées par toutes les fonctions et connecteurs Lambda du groupe Greengrass. Ce connecteur nécessite l'accès à votre fichier Docker Compose stocké dans un compartiment S3. Cela nécessite également l'accès à votre jeton d'autorisation Amazon ECR si vos images Docker sont stockées dans un référentiel privé sur Amazon ECR.
Licences
Le connecteur de déploiement d'applications Greengrass Docker inclut les logiciels/licences tiers suivants :
-
AWS SDK for Python (Boto3)
/Licence Apache 2.0 -
botocore
/Licence Apache 2.0 -
dateutil
/Licence PSF -
docutils
/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public -
jmespath
/Licence MIT -
s3transfer
/Licence Apache 2.0 -
urllib3
/Licence MIT
Ce connecteur est publié dans le cadre du contrat de licence logicielle Greengrass Core
Journal des modifications
Le tableau suivant décrit les modifications apportées à chaque version du connecteur.
Version |
Modifications |
---|---|
7 |
Ajouté |
6 |
Ajouté |
5 |
Les images sont extraites avant de courir |
4 |
Ajout d' pull-before-up un comportement pour mettre à jour les images Docker. |
3 |
Correction d'un problème lié à la recherche des variables d'environnement. |
2 |
Ajout du paramètre |
1 |
Première version. |
Un groupe Greengrass ne peut contenir qu'une seule version du connecteur à la fois. Pour de plus amples informations sur la mise à niveau d'une version de connecteur, veuillez consulter Mise à niveau des versions du connecteur.