Mises à jour OTA du logiciel AWS IoT Greengrass Core - AWS IoT Greengrass

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.

Mises à jour OTA du logiciel AWS IoT Greengrass Core

Le package logiciel AWS IoT Greengrass Core inclut un agent de mise à jour qui peut effectuer des mises à jour over-the-air (OTA) du AWS IoT Greengrass logiciel. Vous pouvez utiliser les mises à jour OTA pour installer la dernière version du logiciel AWS IoT Greengrass Core ou du logiciel de l'agent de mise à jour OTA sur un ou plusieurs cœurs. Avec les mises à jour OTA, vos appareils principaux n'ont pas besoin d'être physiquement présents.

Nous vous recommandons d'utiliser les mises à jour OTA dès que possible. Elles fournissent un mécanisme que vous pouvez utiliser pour suivre l'état et l'historique des mises à jour. En cas d'échec de la mise à jour, l'agent de mise à jour OTA revient à la version logicielle précédente.

Note

Les mises à jour OTA ne sont pas prises en charge lorsque vous utilisez apt pour installer le logiciel AWS IoT Greengrass Core. Pour ces installations, nous vous recommandons d'utiliser apt pour mettre à niveau le logiciel. Pour plus d'informations, veuillez consulter Installer le logiciel AWS IoT Greengrass Core à partir d'un référentiel APT.

Les mises à jour OTA permettent de mieux :

  • Corriger les vulnérabilités de sécurité.

  • Prendre en charge des problèmes de stabilité logicielle.

  • Déployer de nouvelles fonctionnalités ou des fonctionnalités améliorées.

Cette fonction s'intègre aux tâches AWS IoT.

Prérequis

Les conditions suivantes s'appliquent aux mises à jour OTA du logiciel AWS IoT Greengrass.

  • Le cœur de Greengrass doit disposer d'au moins 400 Mo d'espace disque disponible dans le stockage local. L'agent de mise à jour OTA nécessite environ trois fois plus d'espace d'exécution que le logiciel AWS IoT Greengrass Core. Pour de plus amples informations, veuillez consulter Quotas de service pour le noyau Greengrass dans le Référence générale d'Amazon Web Services.

  • Le noyau Greengrass doit être connecté auAWS Cloud.

  • Le noyau Greengrass doit être correctement configuré et provisionné avec des certificats et des clés pour l'authentification avec AWS IoT Core et AWS IoT Greengrass. Pour plus d'informations, veuillez consulter Certificats X.509.

  • Le noyau Greengrass ne peut pas être configuré pour utiliser un proxy réseau.

    Note

    À partir de la version AWS IoT Greengrass 1.9.3, les mises à jour OTA sont prises en charge sur les noyaux qui configurent le trafic MQTT sur le port 443 au lieu du port par défaut 8883. Toutefois, l'agent de mise à jour OTA ne prend pas en charge les mises à jour via un proxy réseau. Pour plus d'informations, veuillez consulter Connexion au port 443 ou via un proxy réseau.

  • Le démarrage de confiance ne peut pas être activé dans la partition qui contient le logiciel AWS IoT Greengrass Core.

    Note

    Vous pouvez installer et exécuter le logiciel AWS IoT Greengrass Core sur une partition dont le démarrage de confiance est activé, mais les mises à jour OTA ne sont pas prises en charge.

  • AWS IoT Greengrass doit avoir des autorisations de lecture/écriture sur la partition qui contient le logiciel AWS IoT Greengrass Core.

  • Si vous utilisez un système d'initialisation pour gérer votre noyau Greengrass, vous devez configurer les mises à jour OTA pour qu'elles s'intègrent au système d'initialisation. Pour plus d'informations, veuillez consulter Intégration à des systèmes d'initialisation.

  • Vous devez créer un rôle utilisé pour présigner les URL Amazon S3 vers les artefacts de mise à jour AWS IoT Greengrass logicielle. Ce rôle de signataire vous permet d'accéder AWS IoT Core aux artefacts de mise à jour logicielle stockés dans Amazon S3 en votre nom. Pour plus d'informations, veuillez consulter Autorisations IAM pour les mises à jour OTA.

Autorisations IAM pour les mises à jour OTA

Lors AWS IoT Greengrass de la publication d'une nouvelle version du logiciel AWS IoT Greengrass Core, AWS IoT Greengrass met à jour les artefacts logiciels stockés dans Amazon S3 qui sont utilisés pour la mise à jour OTA.

Vous Compte AWS devez inclure un rôle de signataire d'URL Amazon S3 qui peut être utilisé pour accéder à ces artefacts. Le rôle doit disposer d'une politique d'autorisations qui autorise l's3:GetObjectaction sur les compartiments des ciblesRégion AWS. Le rôle doit également avoir une stratégie d'approbation qui permet à iot.amazonaws.com d'assumer le rôle en tant qu'entité approuvée.

Politique d'autorisations

Pour les autorisations de rôle, vous pouvez utiliser la stratégie gérée par AWS ou créer une stratégie personnalisée.

  • Utiliser la stratégie gérée par AWS

    La politique UpdateArtifactAccess gérée de GreenGrassota est fournie par. AWS IoT Greengrass Utilisez cette politique si vous souhaitez autoriser l'accès à toutes les régions Amazon Web Services prises en charge parAWS IoT Greengrass, actuelles et futures.

  • Création d'une politique personnalisée

    Vous devez créer une politique personnalisée si vous souhaitez spécifier explicitement les régions Amazon Web Services dans lesquelles vos cœurs sont déployés. L'exemple de stratégie suivant autorise l'accès aux mises à jour du logiciel AWS IoT Greengrass dans six régions.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToGreengrassOTAUpdateArtifacts", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::us-east-1-greengrass-updates/*", "arn:aws:s3:::us-west-2-greengrass-updates/*", "arn:aws:s3:::ap-northeast-1-greengrass-updates/*", "arn:aws:s3:::ap-southeast-2-greengrass-updates/*", "arn:aws:s3:::eu-central-1-greengrass-updates/*", "arn:aws:s3:::eu-west-1-greengrass-updates/*" ] } ] }
Politique d'approbation

La stratégie d'approbation attachée au rôle doit autoriser l'action sts:AssumeRole et définir iot.amazonaws.com comme élément principal. Cela autorise AWS IoT Core à assumer le rôle en tant qu'entité de confiance. Voici un exemple de document de stratégie :

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

En outre, l'utilisateur qui initie une mise à jour OTA doit être autorisé à utiliser greengrass:CreateSoftwareUpdateJob et iot:CreateJob, et à utiliser iam:PassRole pour transmettre les autorisations du rôle de signataire. Voici un exemple de politique IAM :

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "greengrass:CreateSoftwareUpdateJob" ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:CreateJob" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn-of-s3-url-signer-role" } ] }

Considérations

Avant de lancer une mise à jour OTA du logiciel Greengrass Core, vous devez connaître l'impact sur les appareils de votre groupe Greengrass, tant sur l'appareil principal que sur les appareils clients connectés localement à ce noyau :

  • Le cœur s'arrête au cours de la mise à jour.

  • Toutes les fonctions Lambda s'exécutant sur le noyau seront arrêtées. Si ces fonctions procèdent à des écritures dans des ressources locales, elles peuvent laisser ces ressources dans un état incorrect si elles ne sont pas fermées correctement.

  • Pendant les temps d'arrêt du cœur, toutes ses connexions avec le cœur AWS Cloud sont perdues. Les messages qui lui sont envoyés par des appareils clients sont perdus.

  • Les caches des informations d'identification sont perdus.

  • Les files d'attente qui fonctionnent en attente des fonctions Lambda sont perdues.

  • Les fonctions Lambda à longue durée de vie perdent leurs informations d'état dynamique et toutes les tâches en attente sont abandonnées.

Les informations d'état suivantes sont conservées pendant une mise à jour OTA :

  • Configuration de Core

  • Configuration du groupe Greengrass

  • Instances shadows locales

  • Journaux Greengrass

  • Journaux des agents de mise à jour OTA

Agent de mise à jour OTA Greengrass

L'agent de mise à jour Greengrass OTA est le composant logiciel de l'appareil qui gère les tâches de mise à jour créées et déployées dans le cloud. L'agent de mise à jour OTA est distribué dans le même progiciel que le logiciel AWS IoT Greengrass Core. Cet agent est situé dans /greengrass-root/ota/ota_agent/ggc-ota. Il écrit les journaux dans /var/log/greengrass/ota/ggc_ota.txt.

Note

greengrass-root indique le chemin d'installation du logiciel AWS IoT Greengrass Core sur votre appareil. Généralement, il s'agit du répertoire /greengrass.

Vous pouvez démarrer l'agent de mise à jour OTA en exécutant le fichier binaire manuellement ou en l'intégrant dans un script d'initialisation, tel qu'un fichier de service systemd. Si vous exécutez le binaire manuellement, il doit être exécuté en tant que root. Au démarrage, l'agent de mise à jour OTA écoute les tâches de mise à jour AWS IoT Greengrass logicielle AWS IoT Core et les exécute de manière séquentielle. L'agent de mise à jour OTA ignore tous les autres types de AWS IoT tâches.

L'extrait suivant montre un exemple de fichier de service systemd permettant de démarrer, d'arrêter et de redémarrer l'agent de mise à jour OTA :

[Unit] Description=Greengrass OTA Daemon [Service] Type=forking Restart=on-failure ExecStart=/greengrass/ota/ota_agent/ggc-ota [Install] WantedBy=multi-user.target

Un cœur qui est la cible d'une mise à jour ne doit pas exécuter deux instances de l'agent de mise à jour OTA. Cela conduirait les deux agents à traiter les mêmes tâches, ce qui créerait des conflits.

Intégration à des systèmes d'initialisation

Lors d'une mise à jour OTA, l'agent de mise à jour OTA redémarre les fichiers binaires sur le périphérique principal. Si les fichiers binaires sont en cours d'exécution, cela peut entraîner des conflits lorsqu'un système d'initialisation surveille l'état du logiciel AWS IoT Greengrass Core ou l'agent pendant la mise à jour. Pour vous aider à intégrer le mécanisme de mise à jour OTA à vos stratégies de surveillance d'initialisation, vous pouvez écrire des scripts shell qui s'exécutent avant et après une mise à jour. Par exemple, vous pouvez utiliser le ggc_pre_update.sh script pour sauvegarder des données ou arrêter des processus avant que l'appareil ne s'arrête.

Pour demander à l'agent de mise à jour OTA d'exécuter ces scripts, vous devez inclure l'"managedRespawn" : trueindicateur dans le fichier config.json. Ce paramètre est illustré dans l'extrait suivant :

{ "coreThing": { … }, "runtime": { … }, "managedRespawn": true … }

Commande managedRespawn avec mises à jour OTA

Les exigences suivantes s'appliquent aux mises à jour OTA managedRespawn définies sur true :

  • Les scripts shell suivants doivent être présents dans le /greengrass-root/usr/scripts répertoire :

    • ggc_pre_update.sh

    • ggc_post_update.sh

    • ota_pre_update.sh

    • ota_post_update.sh

  • Les scripts doivent renvoyer un code de retour indiquant la réussite.

  • Les scripts doivent être détenus par la racine et être exécutables par la racine uniquement.

  • Le ggc_pre_update.sh script doit arrêter le démon Greengrass.

  • Le ggc_post_update.sh script doit démarrer le démon Greengrass.

Note

Comme l'agent de mise à jour OTA gère son propre processus, les ota_post_update.sh scripts ota_pre_update.sh et n'ont pas besoin d'arrêter ou de démarrer le service OTA.

L'agent de mise à jour OTA exécute les scripts du/greengrass-root/usr/scripts. L'arborescence doit être similaire à ce qui suit :

<greengrass_root> |-- certs |-- config | |-- config.json |-- ggc |-- usr/scripts | |-- ggc_pre_update.sh | |-- ggc_post_update.sh | |-- ota_pre_update.sh | |-- ota_post_update.sh |-- ota

Lorsque managedRespawn ce paramètre est défini surtrue, l'agent de mise à jour OTA vérifie la présence de ces scripts dans le /greengrass-root/usr/scripts répertoire avant et après la mise à jour logicielle. Si les scripts n'existent pas, la mise à jour échoue. AWS IoT Greengrassne valide pas le contenu de ces scripts. La meilleure pratique consiste à vérifier que vos scripts fonctionnent correctement et à émettre les codes de sortie appropriés en cas d'erreur.

Pour les mises à jour OTA du logiciel AWS IoT Greengrass Core :
  • Avant de démarrer la mise à jour, l'agent exécute le script ggc_pre_update.sh. Utilisez ce script pour les commandes qui doivent être exécutées avant que l'agent de mise à jour OTA ne lance la mise à jour logicielle AWS IoT Greengrass Core, par exemple pour sauvegarder des données ou arrêter tout processus en cours d'exécution. L'exemple suivant montre un script simple pour arrêter le démon Greengrass.

    #!/bin/bash set -euo pipefail systemctl stop greengrass
  • Après avoir terminé la mise à jour, l'agent exécute le script ggc_post_update.sh. Utilisez ce script pour les commandes qui doivent être exécutées après que l'agent de mise à jour OTA a lancé la mise à jour logicielle AWS IoT Greengrass Core, par exemple pour redémarrer les processus. L'exemple suivant montre un script simple pour démarrer le démon Greengrass.

    #!/bin/bash set -euo pipefail systemctl start greengrass
Pour les mises à jour OTA de l'agent de mise à jour OTA :
  • Avant de démarrer la mise à jour, l'agent exécute le script ota_pre_update.sh. Utilisez ce script pour les commandes qui doivent être exécutées avant que l'agent de mise à jour OTA ne se mette à jour, par exemple pour sauvegarder des données ou arrêter tout processus en cours d'exécution.

  • Après avoir terminé la mise à jour, l'agent exécute le script ota_post_update.sh. Utilisez ce script pour les commandes qui doivent être exécutées après la mise à jour de l'agent de mise à jour OTA, par exemple pour redémarrer des processus.

Note

S'il managedRespawn est défini surfalse, l'agent de mise à jour OTA n'exécute pas les scripts.

Création d'une mise à jour OTA

Procédez comme suit pour effectuer une mise à jour OTA du logiciel AWS IoT Greengrass sur un ou plusieurs noyaux :

  1. Assurez-vous que vos noyaux répondent aux conditions requises pour les mises à jour OTA.

    Note

    Si vous avez configuré un système d'initialisation pour gérer le logiciel AWS IoT Greengrass Core ou l'agent de mise à jour OTA, vérifiez les points suivants sur vos cœurs :

    • Le fichier config.json spécifie "managedRespawn" : true.

    • Le répertoire/greengrass-root /usr/scripts contient les scripts suivants :

      • ggc_pre_update.sh

      • ggc_post_update.sh

      • ota_pre_update.sh

      • ota_post_update.sh

    Pour plus d'informations, veuillez consulter Intégration à des systèmes d'initialisation.

  2. Dans le terminal d'un appareil principal, démarrez l'agent de mise à jour OTA.

    cd /greengrass-root/ota/ota_agent sudo ./ggc-ota
    Note

    greengrass-root indique le chemin d'installation du logiciel AWS IoT Greengrass Core sur votre appareil. Généralement, il s'agit du répertoire /greengrass.

    Ne démarrez pas plusieurs instances de l'agent de mise à jour OTA sur un noyau car cela pourrait provoquer des conflits.

  3. Utilisez l'AWS IoT GreengrassAPI pour créer une tâche de mise à jour logicielle.

    1. Appelez l'API CreateSoftwareUpdateJob. Dans cet exemple de procédure, nous utilisons les commandes de l'AWS CLI.

      La commande suivante crée une tâche qui met à jour le logiciel AWS IoT Greengrass Core sur un seul noyau. Remplacez les exemples de valeur, puis exécutez la commande.

      Linux or macOS terminal
      aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1
      Windows command prompt
      aws greengrass create-software-update-job ^ --update-targets-architecture x86_64 ^ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] ^ --update-targets-operating-system ubuntu ^ --software-to-update core ^ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole ^ --update-agent-log-level WARN ^ --amzn-client-token myClientToken1

      Cette commande renvoie la réponse suivante.

      { "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.10.1" }
    2. Copiez l'élément IoTJobId de la réponse.

    3. Appelez DescribeJobl'AWS IoT CoreAPI pour voir l'état de la tâche. Remplacez les exemples de valeur par l'ID de votre tâche, puis exécutez la commande.

      aws iot describe-job --job-id GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE

      La commande renvoie un objet de réponse qui contient des informations sur la tâche, y compris status et jobProcessDetails.

      { "job": { "jobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "jobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "targetSelection": "SNAPSHOT", "status": "IN_PROGRESS", "targets": [ "arn:aws:iot:region:123456789012:thing/myCoreDevice" ], "description": "This job was created by Greengrass to update the Greengrass Cores in the targets with version 1.10.1 of the core software running on x86_64 architecture.", "presignedUrlConfig": { "roleArn": "arn:aws::iam::123456789012:role/myS3UrlSignerRole", "expiresInSec": 3600 }, "jobExecutionsRolloutConfig": {}, "createdAt": 1588718249.079, "lastUpdatedAt": 1588718253.419, "jobProcessDetails": { "numberOfCanceledThings": 0, "numberOfSucceededThings": 0, "numberOfFailedThings": 0, "numberOfRejectedThings": 0, "numberOfQueuedThings": 1, "numberOfInProgressThings": 0, "numberOfRemovedThings": 0, "numberOfTimedOutThings": 0 }, "timeoutConfig": {} } }

    Pour bénéficier d'une aide à la résolution des problèmes, consultez Résolution des problèmes de AWS IoT Greengrass.

API CreateSoftwareUpdateJob

Vous pouvez utiliser l'CreateSoftwareUpdateJobAPI pour mettre à jour le logiciel AWS IoT Greengrass Core ou le logiciel de l'agent de mise à jour OTA sur vos appareils principaux. Cette API crée une tâche d'instantané AWS IoT qui avertit les périphériques lorsqu'une mise à jour est disponible. Après avoir appelé CreateSoftwareUpdateJob, vous pouvez utiliser d'autres commandes de tâche AWS IoT pour suivre la mise à jour logicielle. Pour plus d'informations, consultez la section Jobs du Guide du AWS IoT développeur.

L'exemple suivant montre comment utiliser l'AWS CLI pour créer une tâche de mise à jour du logiciel AWS IoT Greengrass Core sur un appareil principal :

aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1

La commande create-software-update-job renvoie une réponse JSON qui contient l'ID de tâche, l'ARN de la tâche et la version du logiciel qui a été installée par la mise à jour :

{ "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.9.2" }

Pour consulter les étapes pour utiliser create-software-update-job afin de mettre à jour un appareil principal, veuillez consulter Création d'une mise à jour OTA.

La commande create-software-update-job est paramétrée comme suit :

--update-targets-architecture

Architecture de l'appareil du noyau.

Valeurs valides : armv7l, armv6l, x86_64 ou aarch64

--update-targets

Noyaux à mettre à jour. La liste peut contenir les ARN de noyaux individuels et les ARN de groupes d'objets dont les membres sont des noyaux. Pour plus d'informations sur les groupes d'objets, consultez la section Groupes d'objets statiques dans le Guide du AWS IoT développeur.

--update-targets-operating-system

Système d'exploitation de l'appareil du noyau.

Valeurs valides : ubuntu, amazon_linux, raspbian ou openwrt

--software-to-update

Spécifie si le logiciel principal ou le logiciel de l'agent de mise à jour OTA doit être mis à jour.

Valeurs valides : core ou ota_agent

--s3-url-signer-role

L'ARN du rôle IAM utilisé pour présigner l'URL Amazon S3 qui renvoie aux artefacts de mise à jour AWS IoT Greengrass logicielle. La politique d'autorisations attachée au rôle doit autoriser l's3:GetObjectaction sur les compartiments des ciblesRégion AWS. Le rôle doit également autoriser iot.amazonaws.com à assumer le rôle en tant qu'entité approuvée. Pour plus d'informations, veuillez consulter Autorisations IAM pour les mises à jour OTA.

--amzn-client-token

(Facultatif) Jeton client utilisé pour effectuer des requêtes idempotentes. Fournissez un jeton unique pour empêcher la création de mises à jour en double à la suite de tentatives internes.

--update-agent-log-level

(Facultatif) Le niveau de journalisation des instructions de journal générées par l'agent de mise à jour OTA. La valeur par défaut est ERROR.

Valeurs valides : NONE, TRACE, DEBUG, VERBOSE, INFO, WARN, ERROR ou FATAL

Note

CreateSoftwareUpdateJob accepte les demandes uniquement pour les combinaisons d'architecture et de système d'exploitation prises en charge suivantes :

  • ubuntu/x86_64

  • ubuntu/aarch64

  • amazon_linux/x86_64

  • raspbian/armv7l

  • raspbian/armv6l

  • openwrt/aarch64

  • openwrt/armv7l