Procédure Golden Image - AWS Conseils prescriptifs

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.

Procédure Golden Image

Les sections suivantes décrivent la procédure de création d'une image dorée et d'écriture de cette image sur chaque appareil de la chaîne de production.

Créez votre appareil doré

Étape 1 : Installation et approvisionnement de Greengrass.

Installez le moteur d'exécution Greengrass Edge sur votre appareil doré comme vous le feriez habituellement, et provisionnez-le en utilisant votre méthode de provisionnement préférée.

Étape 2 : Déployez vos composants

Depuis le cloud, déployez les composants et la configuration de votre application sur votre appareil doré, comme vous le feriez habituellement.

Lisez l'image dorée depuis votre appareil doré

Vous pouvez désormais prendre un instantané de votre appareil doré pour créer une image dorée.

Étape 1 : Arrêtez Greengrass.

Arrêtez le service Greengrass sur votre appareil Golden. Par exemple :

sudo systemctl stop greengrass.service

Étape 2 : capture d'écran de l'arborescence des fichiers Greengrass.

Selon votre méthode préférée, prenez un instantané complet ou partiel de l'arborescence des fichiers Greengrass et incluez-le dans votre image dorée.

Étape 3 : Copiez vos images Docker.

Si vos composants utilisent des images Docker comme artefacts, prenez un instantané du registre d'images Docker et incluez-le dans votre image dorée.

Vous pouvez également docker save créer une archive de chaque image Docker et les copier depuis le périphérique doré. Par exemple :

user@machine:~/environment $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE homeassistant/home-assistant 2024.6 2b4c9de733f1 9 days ago 1.6GB user@machine:~/environment $ docker save homeassistant/home-assistant | gzip > home-assistant.tar.gz

En général, cette approche est plus lente que l'ajout du registre d'images Docker à votre image dorée.

Écrivez l'image dorée sur vos appareils de production

Vous devez maintenant écrire l'image dorée sur chacun de vos appareils de production qui passent par votre chaîne de fabrication. Les étapes suivantes sont généralement automatisées à l'aide de scripts.

Étape 1 : Écrivez l'image.

Écrivez votre image dorée sur l'appareil de production. Assurez-vous qu'il inclut l'instantané complet ou partiel de l'arborescence des répertoires Greengrass et du registre d'images Docker, le cas échéant.

Étape 2 : Chargez les images Docker

Si vous avez choisi de copier des artefacts d'image Docker docker save à partir de votre appareil doré, utilisez-le docker load pour charger ces images sur votre appareil de production. Par exemple :

user@machine:~/environment $ docker load < home-assistant.tar.gz user@machine:~/environment $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE homeassistant/home-assistant 2024.6 2b4c9de733f1 9 days ago 1.6GB

En général, cette approche est plus lente que l'ajout du registre d'images Docker à votre image dorée.

Étape 3 : Ajoutez des informations d'identification

Si votre appareil n'utilise pas le provisionnement du parc, installez le certificat X.509 et la clé privée uniques pour le périphérique de production, en remplacement des informations d'identification de l'appareil en or. La méthode exacte pour y parvenir dépend de l'utilisation d'un module de sécurité matériel (HSM) et de votre infrastructure à clé publique (PKI) particulière.

Configurez vos appareils de production

Après avoir écrit l'image dorée, vous devez configurer chaque appareil de production. Cette configuration varie selon que vous utilisez la méthode de capture instantanée complète ou partielle de Greengrass. Les étapes doivent être automatisées.

Méthode de capture instantanée complète de Greengrass

Important

Suivez ces étapes uniquement si vous utilisez la méthode de capture instantanée complète de Greengrass.

Étape 1 : modifier la configuration

Modifiez le fichier config/effectiveConfig.yaml. Par exemple :

sudo nano /greengrass/v2/config/effectiveConfig.yaml

Étape 2 : Définissez le nom de l'objet.

Les actions requises pour définir le nom d'objet du nouvel appareil de production varient selon que vous utilisez ou non le provisionnement de flotte. Apportez les modifications appropriées à votre cas d'utilisation.

Si vous n'utilisez pas le provisionnement de flotte, vous pouvez définir le nom d'objet de votre appareil de production en modifiant la thingName propriété pour remplacer le nom d'objet du périphérique principal par le nom de l'objet de l'appareil de production. Par exemple :

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "ProductionDeviceThingName1"

Si vous utilisez le provisionnement de flotte, vous devez d'abord effacer une partie de la configuration de l'appareil principal pour garantir que le plug-in de provisionnement du parc fonctionnera sur l'appareil de production. Vous pouvez le faire en remplaçant le nom du périphérique doré dans la thingName propriété par une chaîne vide. Par exemple :

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: ""

En outre, vous devez ajouter la configuration du plugin de provisionnement du parc à la services propriété et transmettre le nom de l'objet du périphérique de production en tant que propriété au sein de la templateParameters propriété. L'exemple suivant suppose que le modèle de provisionnement de flotte possède un paramètre nommé ThingName et qu'il existe donc une ThingName propriété dans la configuration templateParameters du plugin :

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "" services: aws.greengrass.FleetProvisioningByClaim: configuration: rootPath: "/greengrass/v2" awsRegion: "us-east-1" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" provisioningTemplate: "GreengrassFleetProvisioningTemplate" claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt" claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key" rootCaPath: "/greengrass/v2/rootCA.pem" templateParameters: ThingName: "ProductionDeviceThingName1"

Votre cas d'utilisation peut nécessiter des paramètres de configuration du plugin de provisionnement de flotte différents de ceux présentés ici. Pour plus d'informations, consultez la section Configurer le plug-in de provisionnement de AWS IoT flotte dans la AWS IoT Greengrass documentation.

Étape 3 : Mettez à jour les noms d'objets interpolés.

Si certains composants utilisent la variable de iot:thingName recette pour interpoler le nom de l'objet, vous aurez probablement des instructions de contrôle d'accès dans lesquelles le nom de l'objet Golden Device a été interpolé. Par exemple, dans le cas du composant communautaire Certificate Rotator :

services: aws.greengrass.labs.CertificateRotator: componentType: "GENERIC" configuration: accessControl: aws.greengrass.ipc.mqttproxy: aws.greengrass.labs.CertificateRotator:mqttproxy:1: operations: - "aws.greengrass#PublishToIoTCore" policyDescription: "Allows access to publish to relevant topics" resources: - "$aws/things/GoldenDeviceThingName/jobs/+/get" - "$aws/things/GoldenDeviceThingName/jobs/+/update" - "awslabs/things/GoldenDeviceThingName/certificate/create" - "awslabs/things/GoldenDeviceThingName/certificate/commit" aws.greengrass.labs.CertificateRotator:mqttproxy:2: operations: - "aws.greengrass#SubscribeToIoTCore" policyDescription: "Allows access to subscribe to relevant topics" resources: - "$aws/things/GoldenDeviceThingName/jobs/notify-next" - "$aws/things/GoldenDeviceThingName/jobs/+/get/accepted" - "$aws/things/GoldenDeviceThingName/jobs/+/get/rejected" - "$aws/things/GoldenDeviceThingName/jobs/+/update/accepted" - "$aws/things/GoldenDeviceThingName/jobs/+/update/rejected" - "awslabs/things/GoldenDeviceThingName/certificate/create/accepted" - "awslabs/things/GoldenDeviceThingName/certificate/create/rejected" - "awslabs/things/GoldenDeviceThingName/certificate/commit/accepted" - "awslabs/things/GoldenDeviceThingName/certificate/commit/rejected" keyAlgorithm: "RSA-2048" signingAlgorithm: "SHA256WITHRSA"

Dans tous ces cas, vous devez remplacer toutes les instances du nom d'objet Golden Device par le nom d'objet de votre appareil de production.

Étape 4 : supprimez les secrets dorés de l'appareil.

Vérifiez effectiveConfig.yaml s'il y a des secrets chiffrés qui ont été stockés par votre appareil doré. Ils seront stockés dans la configuration des composants du gestionnaire de secrets. Par exemple :

aws.greengrass.SecretManager: componentType: "PLUGIN" configuration: cloudSecrets: - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ" dependencies: - "aws.greengrass.Nucleus:SOFT" lifecycle: {} runtime: secretResponse: "{\"secrets\":[{\"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\"\ ,\"name\":\"greengrass-home-assistant\",\"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\"\ ,\"encryptedSecretString\":\"AgV4Rpc9 ... MYeVALYQ==\"\ ,\"versionStages\":[\"AWSCURRENT\"],\"createdDate\":1660648425915}]}" version: "2.1.8"

Vous devez supprimer ce secret pour vous assurer que votre appareil de production ne tentera pas de déchiffrer un secret chiffré par le périphérique doré. Supprimez la secretResponse propriété. Par exemple :

aws.greengrass.SecretManager: componentType: "PLUGIN" configuration: cloudSecrets: - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ" dependencies: - "aws.greengrass.Nucleus:SOFT" lifecycle: {} runtime: version: "2.1.8"

Étape 5 : appliquez la configuration modifiée.

Appliquez la configuration modifiée pour la mettre à jourconfig/config.tlog. Par exemple :

sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml

Méthode de capture partielle de Greengrass

La configuration de vos appareils de production est triviale si vous utilisez la méthode de capture instantanée partielle de Greengrass. La procédure est identique à la procédure normale de configuration partielle du bootstrap lorsque vous installez Greengrass, sauf que la configuration initiale est transmise au moteur d'exécution Greengrass déjà installé.

Important

Suivez ces étapes uniquement si vous utilisez la méthode de capture instantanée partielle de Greengrass.

Étape 1 : Création de la configuration

La configuration partielle requise varie selon que vous utilisez ou non le provisionnement de flotte. Assurez-vous d'apporter les modifications appropriées à votre cas d'utilisation.

Si vous n'utilisez pas le provisionnement de flotte, vous pouvez créer un fichier de configuration partiel qui n'inclut aucune configuration pour le plug-in de provisionnement de flotte. Définissez la thingName propriété sur le nom de l'objet de votre appareil de production. Par exemple :

system: certificateFilePath: "/greengrass/v2/device.pem.crt" privateKeyPath: "/greengrass/v2/private.pem.key" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "ProductionDeviceThingName1" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.12.6" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com"

Si vous utilisez le provisionnement de flotte, la configuration partielle doit inclure la configuration du plugin de provisionnement de flotte. Cette configuration doit transmettre le nom de l'objet du périphérique de production en tant que propriété au sein de la templateParameters propriété. L'exemple suivant suppose que le modèle de provisionnement de flotte possède un paramètre nommé ThingName et qu'il existe donc une ThingName propriété dans la configuration templateParameters du plugin :

services: aws.greengrass.Nucleus: version: "2.12.6" aws.greengrass.FleetProvisioningByClaim: configuration: rootPath: "/greengrass/v2" awsRegion: "us-east-1" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" provisioningTemplate: "GreengrassFleetProvisioningTemplate" claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt" claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" templateParameters: ThingName: "ProductionDeviceThingName1"

Votre cas d'utilisation peut nécessiter des paramètres de configuration du plugin de provisionnement de flotte différents de ceux présentés ici. Pour plus d'informations, consultez la section Configurer le plug-in de provisionnement de AWS IoT flotte dans la AWS IoT Greengrass documentation.

Étape 2 : appliquer la configuration

Appliquez la configuration à créerconfig/config.tlog. Par exemple :

sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config config.yaml