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-PluginthingName
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
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.yaml
Suchen 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-PlugintemplateParameters
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