Golden-Image-Verfahren - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Golden-Image-Verfahren

In den folgenden Abschnitten wird das Verfahren zum Erstellen eines goldenen Images und zum Schreiben dieses Images auf jedes Gerät in der Produktionslinie beschrieben.

Erstellen Sie Ihr goldenes Gerät

Schritt 1: Installation und Bereitstellung von Greengrass.

Installieren Sie die Greengrass Edge-Runtime wie gewohnt auf Ihrem Golden Device und stellen Sie sie mit Ihrer bevorzugten Bereitstellungsmethode bereit.

Schritt 2: Stellen Sie Ihre Komponenten bereit.

Stellen Sie Ihre Anwendungskomponenten und die Konfiguration von der Cloud aus auf Ihrem bevorzugten Gerät bereit, wie Sie es normalerweise tun würden.

Lesen Sie das goldene Bild von Ihrem goldenen Gerät

Sie können jetzt einen Snapshot Ihres goldenen Geräts erstellen, um ein goldenes Bild zu erstellen.

Schritt 1: Fahren Sie Greengrass herunter.

Fahren Sie den Greengrass-Dienst auf Ihrem goldenen Gerät herunter. Zum Beispiel:

sudo systemctl stop greengrass.service

Schritt 2: Erstellen Sie einen Snapshot des Greengrass-Dateibaums.

Machen Sie je nach Ihrer bevorzugten goldenen Methode einen vollständigen oder teilweisen Schnappschuss des Greengrass-Dateibaums und nehmen Sie ihn in Ihr goldenes Image auf.

Schritt 3: Kopieren Sie Ihre Docker-Images.

Wenn Ihre Komponenten Docker-Images als Artefakte verwenden, machen Sie einen Snapshot der Docker-Image-Registry und nehmen Sie ihn in Ihr Golden Image auf.

Alternativ können Sie docker save damit ein Archiv für jedes Docker-Image erstellen und diese vom Golden Device kopieren. Zum Beispiel:

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

Im Allgemeinen ist dieser Ansatz langsamer als das Hinzufügen der Docker-Image-Registry zu Ihrem Golden Image.

Schreiben Sie das goldene Image auf Ihre Produktionsgeräte

Sie müssen jetzt das goldene Bild auf jedes Ihrer Produktionsgeräte schreiben, das Ihre Fertigungslinie durchläuft. Die folgenden Schritte würden normalerweise mithilfe von Skripten automatisiert.

Schritt 1: Schreiben Sie das Bild.

Schreiben Sie Ihr goldenes Bild auf das Produktionsgerät. Stellen Sie sicher, dass es den vollständigen oder teilweisen Snapshot des Greengrass-Verzeichnisbaums und gegebenenfalls der Docker-Image-Registry enthält.

Schritt 2: Docker-Images laden.

Wenn Sie sich dafür entschieden haben, Docker-Image-Artefakte von Ihrem goldenen Gerät docker save zu kopieren, verwenden Sie diese Option, docker load um diese Bilder auf Ihr Produktionsgerät zu laden. Zum Beispiel:

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

Im Allgemeinen ist dieser Ansatz langsamer als das Hinzufügen der Docker-Image-Registry zu Ihrem Golden Image.

Schritt 3: Anmeldeinformationen hinzufügen.

Wenn Ihr Gerät Fleet Provisioning nicht verwendet, installieren Sie das eindeutige X.509-Zertifikat und den privaten Schlüssel für das Produktionsgerät und ersetzen Sie damit die goldenen Geräteanmeldedaten. Die genaue Methode, um dies zu erreichen, hängt davon ab, ob Sie ein Hardware-Sicherheitsmodul (HSM) und Ihre spezielle Public-Key-Infrastruktur (PKI) verwenden.

Konfigurieren Sie Ihre Produktionsgeräte

Nachdem Sie das goldene Image geschrieben haben, müssen Sie jedes Produktionsgerät konfigurieren. Diese Konfiguration hängt davon ab, ob Sie die vollständige oder teilweise Greengrass-Snapshot-Methode verwenden. Die Schritte sollten automatisiert werden.

Vollständige Greengrass-Snapshot-Methode

Wichtig

Folgen Sie diesen Schritten nur, wenn Sie die vollständige Greengrass-Snapshot-Methode verwenden.

Schritt 1: Bearbeiten Sie die Konfiguration.

Bearbeiten Sie die config/effectiveConfig.yaml-Datei. Zum Beispiel:

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

Schritt 2: Lege den Namen der Sache fest.

Die Aktionen, die erforderlich sind, um den Ding-Namen des neuen Produktionsgeräts festzulegen, hängen davon ab, ob Sie Fleet Provisioning verwenden. Nehmen Sie die richtigen Änderungen für Ihren Anwendungsfall vor.

Wenn Sie Fleet Provisioning nicht verwenden, können Sie den Dingnamen Ihres Produktionsgeräts festlegen, indem Sie die thingName Eigenschaft so bearbeiten, dass der goldene Gerätename durch den Dingnamen des Produktionsgeräts ersetzt wird. Zum Beispiel:

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

Wenn Sie Fleet Provisioning verwenden, müssen Sie zuerst einen Teil der Golden Device-Konfiguration löschen, um sicherzustellen, dass das Fleet Provisioning-Plugin auf dem Produktionsgerät ausgeführt werden kann. Sie können dies tun, indem Sie den goldenen Gerätenamen in der thingName Eigenschaft durch eine leere Zeichenfolge ersetzen. Zum Beispiel:

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

Darüber hinaus müssen Sie der services Eigenschaft die Konfiguration des Fleet Provisioning-Plug-ins hinzufügen und den Dingnamen des Produktionsgeräts als Eigenschaft innerhalb der templateParameters Eigenschaft übergeben. Im folgenden Beispiel wird davon ausgegangen, dass die Flottenbereitstellungsvorlage einen Parameter mit dem Namen ThingName hat und dass es daher eine ThingName Eigenschaft innerhalb templateParameters der Plugin-Konfiguration gibt:

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"

Ihr Anwendungsfall erfordert möglicherweise andere Konfigurationsparameter für das Flottenbereitstellungs-Plugin als die hier gezeigten. Weitere Informationen finden Sie in der Dokumentation unter Konfigurieren des AWS IoT Fleet Provisioning-Plug-ins AWS IoT Greengrass .

Schritt 3: Aktualisieren Sie die Namen der interpolierten Dinge.

Wenn Sie Komponenten haben, die die iot:thingName Rezeptvariable verwenden, um den Dingnamen zu interpolieren, verfügen Sie wahrscheinlich über Zugriffskontrollanweisungen, in denen der Name des Golden Device-Dings interpoliert wurde. Zum Beispiel im Fall der Community-Komponente 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"

In all diesen Fällen müssen Sie alle Instanzen des goldenen Gerätenamens durch den Dingnamen Ihres Produktionsgeräts ersetzen.

Schritt 4: Entfernen Sie goldene Gerätegeheimnisse.

effectiveConfig.yamlSuchen Sie nach verschlüsselten Geheimnissen, die auf Ihrem goldenen Gerät gespeichert wurden. Diese werden in der Secret Manager-Komponentenkonfiguration gespeichert. Zum Beispiel:

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"

Sie sollten dieses Geheimnis löschen, um sicherzustellen, dass Ihr Produktionsgerät nicht versucht, ein Geheimnis zu entschlüsseln, das mit dem goldenen Gerät verschlüsselt wurde. Löschen Sie die secretResponse Immobilie. Zum Beispiel:

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"

Schritt 5: Wenden Sie die geänderte Konfiguration an.

Wenden Sie die geänderte Konfiguration an, um sie zu aktualisierenconfig/config.tlog. Zum Beispiel:

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

Partielle Greengrass-Snapshot-Methode

Die Konfiguration Ihrer Produktionsgeräte ist trivial, wenn Sie die partielle Greengrass-Snapshot-Methode verwenden. Das Verfahren ist identisch mit dem normalen Bootstrap-Teilkonfigurationsverfahren bei der Installation von Greengrass, mit der Ausnahme, dass die Erstkonfiguration an die Greengrass-Laufzeit übergeben wird, die bereits installiert ist.

Wichtig

Folgen Sie diesen Schritten nur, wenn Sie die partielle Greengrass-Snapshot-Methode verwenden.

Schritt 1: Erstellen Sie die Konfiguration.

Die erforderliche Teilkonfiguration hängt davon ab, ob Sie Fleet Provisioning verwenden. Stellen Sie sicher, dass Sie die richtigen Änderungen für Ihren Anwendungsfall vornehmen.

Wenn Sie Fleet Provisioning nicht verwenden, können Sie eine Teilkonfigurationsdatei erstellen, die keine Konfiguration für das Fleet Provisioning-Plugin enthält. Stellen Sie die thingName Eigenschaft auf den Dingnamen Ihres Produktionsgeräts ein. Zum Beispiel:

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"

Wenn Sie Fleet Provisioning verwenden, sollte die Teilkonfiguration die Konfiguration für das Fleet Provisioning-Plugin beinhalten. Bei dieser Konfiguration sollte der Dingname des Produktionsgeräts als Eigenschaft innerhalb der templateParameters Eigenschaft übergeben werden. Im folgenden Beispiel wird davon ausgegangen, dass die Flottenbereitstellungsvorlage einen Parameter mit dem Namen ThingName hat und dass es daher eine ThingName Eigenschaft in templateParameters der Plugin-Konfiguration gibt:

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"

Ihr Anwendungsfall erfordert möglicherweise andere Konfigurationsparameter für das Fleet Provisioning-Plugin als hier gezeigt. Weitere Informationen finden Sie in der Dokumentation unter Konfigurieren des AWS IoT Fleet Provisioning-Plug-ins AWS IoT Greengrass .

Schritt 2: Wenden Sie die Konfiguration an.

Wenden Sie die zu erstellende Konfiguration anconfig/config.tlog. Zum Beispiel:

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