View a markdown version of this page

ゴールデンイメージの手順 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ゴールデンイメージの手順

以下のセクションでは、ゴールデンイメージを作成し、そのイメージを本番稼働用ライン上の各デバイスに書き込む手順について説明します。

ゴールデンデバイスを作成する

ステップ 1: Greengrass をインストールしてプロビジョニングします。

通常どおり、Greengrass エッジランタイムをゴールデンデバイスにインストールし、任意のプロビジョニング方法を使用してプロビジョニングします。

ステップ 2: コンポーネントをデプロイします。

クラウドから、通常どおり、アプリケーションコンポーネントと設定をゴールデンデバイスにデプロイします。

ゴールデンデバイスからゴールデンイメージを読み取る

これで、ゴールデンデバイスのスナップショットを作成してゴールデンイメージを作成できるようになりました。

ステップ 1: Greengrass をシャットダウンします。

golden デバイスで Greengrass サービスをシャットダウンします。例:

sudo systemctl stop greengrass.service

ステップ 2: Greengrass ファイルツリーをスナップショットします。

任意のゴールデンメソッドに応じて、Greengrass ファイルツリーの全体または一部のスナップショットを作成し、ゴールデンイメージに含めます。

ステップ 3: Docker イメージをコピーします。

コンポーネントがアーティファクトとして Docker イメージを使用する場合は、Docker イメージレジストリのスナップショットを作成し、ゴールデンイメージに含めます。

または、 docker saveを使用して各 Docker イメージのアーカイブを作成し、ゴールデンデバイスからコピーすることもできます。例:

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

一般的に、このアプローチは Docker イメージレジストリをゴールデンイメージに追加するよりも遅くなります。

ゴールデンイメージを本稼働デバイスに書き込む

これで、製造ラインを通過する各本番デバイスにゴールデンイメージを書き込む必要があります。通常、次の手順はスクリプトを使用して自動化されます。

ステップ 1: イメージを記述します。

ゴールデンイメージを本番デバイスに書き込みます。必要に応じて、Greengrass ディレクトリツリーと Docker イメージレジストリのスナップショット全体または一部が含まれていることを確認します。

ステップ 2: Docker イメージをロードします。

docker save を使用してゴールデンデバイスから Docker イメージアーティファクトをコピーすることを選択した場合は、 docker load を使用してこれらのイメージを本稼働デバイスにロードします。例:

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

一般的に、このアプローチは Docker イメージレジストリをゴールデンイメージに追加するよりも遅くなります。

ステップ 3: 認証情報を追加する。

デバイスがフリートプロビジョニングを使用しない場合は、本番稼働用デバイスの一意の X.509 証明書とプライベートキーをインストールし、ゴールデンデバイスの認証情報を置き換えます。これを実現する正確な方法は、ハードウェアセキュリティモジュール (HSM) と特定のパブリックキーインフラストラクチャ (PKI) を使用するかどうかによって異なります。

本番稼働用デバイスを設定する

ゴールデンイメージを書き込んだら、各本番稼働用デバイスを設定する必要があります。この設定は、Greengrass スナップショットメソッド全体を使用するか部分を使用するかによって異なります。ステップは自動化する必要があります。

完全な Greengrass スナップショットメソッド

重要

完全な Greengrass スナップショットメソッドを使用している場合にのみ、以下の手順に従います。

ステップ 1: 設定を編集します。

config/effectiveConfig.yaml ファイルを編集します。例:

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

ステップ 2: モノの名前を設定します。

新しい本番稼働用デバイスのモノの名前を設定するために必要なアクションは、フリートプロビジョニングを使用しているかどうかによって異なります。ユースケースに合わせて正しい変更を加えます。

フリートプロビジョニングを使用していない場合は、 thingNameプロパティを編集して、ゴールデンデバイスのモノの名前を本番デバイスのモノの名前に置き換えることで、本番デバイスのモノの名前を設定できます。例:

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

フリートプロビジョニングを使用している場合は、まずゴールデンデバイス設定の一部を消去して、フリートプロビジョニングプラグインが本番デバイスで実行されるようにする必要があります。これを行うには、 thingNameプロパティのゴールデンデバイスのモノの名前を空の文字列に置き換えます。例:

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

さらに、フリートプロビジョニングプラグイン設定を servicesプロパティに追加し、本番デバイスのモノの名前を templateParametersプロパティ内のプロパティとして渡す必要があります。次の例では、フリートプロビジョニングテンプレートに という名前のパラメータがあるためThingName、プラグイン設定templateParametersの 内に ThingNameプロパティがあることを前提としています。

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"

ユースケースでは、ここに示すものとは異なるフリートプロビジョニングプラグイン設定パラメータが必要になる場合があります。詳細については、 AWS IoT Greengrass ドキュメントの AWS IoT 「フリートプロビジョニングプラグインを設定する」を参照してください。

ステップ 3: 補間されたモノの名前を更新する。

iot:thingName レシピ変数を使用してモノの名前を補間するコンポーネントがある場合、ゴールデンデバイスのモノの名前が補間されたアクセスコントロールステートメントがある可能性があります。たとえば、 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"

このような場合はすべて、ゴールデンデバイスのモノの名前のすべてのインスタンスを本番デバイスのモノの名前に置き換える必要があります。

ステップ 4: ゴールデンデバイスシークレットを削除します。

ゴールデンデバイスによって保存された暗号化されたシークレットeffectiveConfig.yamlがないか調べます。これらはシークレットマネージャーコンポーネント設定内に保存されます。例:

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"

このシークレットを削除して、本番デバイスがゴールデンデバイスによって暗号化されたシークレットを復号しようとしないようにする必要があります。secretResponse プロパティを削除します。例:

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"

ステップ 5: 変更された設定を適用します。

変更された設定を適用して、 を更新しますconfig/config.tlog。例:

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

部分 Greengrass スナップショットメソッド

部分的な Greengrass スナップショット方式を使用する場合、本番稼働用デバイスの設定は簡単です。この手順は、Greengrass をインストールするときの通常のブートストラップ部分設定手順と同じですが、初期設定が既にインストールされている Greengrass ランタイムに渡される点が異なります。

重要

Greengrass スナップショットメソッドの一部を使用している場合にのみ、以下の手順に従います。

ステップ 1: 設定を作成します。

必要な部分設定は、フリートプロビジョニングを使用しているかどうかによって異なります。ユースケースに合わせて正しい変更を行ってください。

フリートプロビジョニングを使用していない場合は、フリートプロビジョニングプラグインの設定を含まない部分設定ファイルを作成できます。thingName プロパティを本番稼働用デバイスのモノの名前に設定します。例:

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"

フリートプロビジョニングを使用している場合、部分的な設定にはフリートプロビジョニングプラグインの設定を含める必要があります。この設定では、本番稼働用デバイスのモノの名前を プロパティ内のtemplateParametersプロパティとして渡す必要があります。次の例では、フリートプロビジョニングテンプレートに という名前のパラメータがありThingName、プラグイン設定templateParametersの 内に ThingNameプロパティがあることを前提としています。

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"

ユースケースでは、ここに示すものとは異なるフリートプロビジョニングプラグイン設定パラメータが必要になる場合があります。詳細については、 AWS IoT Greengrass ドキュメントの AWS IoT 「フリートプロビジョニングプラグインを設定する」を参照してください。

ステップ 2: 設定を適用します。

設定を適用して を作成しますconfig/config.tlog。例:

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