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

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

ゴールデンイメージの構造

AWS IoT Greengrass 大規模に製造される コアデバイスは、一般的に Yocto などのツールを使用して構築された Linux ディストリビューションを持つ組み込み Linux デバイスです。通常、Meta AWS プロジェクトで示されているように、Greengrass エッジランタイムは ディストリビューションにベイクされます。

このようなデバイスは、多くの場合、ファイルシステムを複数のパーティションに整理します。このガイドでは、キャッチオール用語としてゴールデンイメージを使用します。デバイスには、さまざまなパーティションをフラッシュするためのゴールデンイメージがいくつかある場合があります。

ゴールデンイメージには、デバイスのファイルシステム全体またはその一部が含まれる場合があります。このガイドでは、イメージをより広範に組み立てる方法を規定せずに AWS IoT Greengrass、考慮する必要があるファイルシステムの部分に焦点を当てています。

Greengrass ディレクトリツリー

このガイドで説明されているゴールデンイメージの方法を理解するには、次の表に示す Greengrass ディレクトリツリーの構造を確認してください。

ディレクトリ

説明

alts

現在アクティブな Greengrass nucleus バージョンへのパラメータとシンボリックリンクを起動します。

bin

バイナリがインストールされている場合 (たとえば、そのコンポーネントがインストールされている場合は Greengrass CLI バイナリ)。このディレクトリは空であることが多いです。

cli_ipc_info

Greengrass CLI プロセス間通信 (IPC) 用のスクラッチパッド。Greengrass CLI をインストールしていない場合、このディレクトリは空です。

config

コンポーネント設定を含むすべての Greengrass 設定。

deployments

デプロイとロールバックの状態を管理するためのデータ。

logs

nucleus およびその他のコンポーネントのログファイル。

packages

すべてのコンポーネントのアーティファクトとレシピ。

plugins

手動でインストールaws.greengrass.pluginしたタイプのコンポーネントのストレージ。それ以外の場合、このディレクトリはデータを保持しません。

telemetry

Greengrass がテレメトリデータを集約して公開するために使用されるスクラッチパッド。

work

コンポーネントのスクラッチパッド。

logstelemetry、および work ディレクトリにはエフェメラルデータのみが含まれます。ゴールデンイメージに含める必要がないため、イメージのサイズを最小限に抑える場合は省略します。

Greengrass CLI は通常、本稼働デバイスにインストールされないため、 binおよび cli_ipc_info ディレクトリは空であることが多く、通常、ゴールデンイメージに含める必要はありません。

plugins ディレクトリには、Greengrass のインストール時に手動でプラグイン (フリートプロビジョニングプラグインやカスタムプロビジョニングプラグインなど) をインストールした場合にのみデータが含まれます。

deployments ディレクトリ内のデータは、デプロイが進行中の場合にのみ使用されるため、ゴールデンイメージでは必要ありません。

したがって、alts、、および config packages ディレクトリが最も重要です。イメージサイズを最小限に抑える場合、これらはゴールデンイメージに含める必要がある唯一の Greengrass ディレクトリであることがあります。

packages ディレクトリの内容

次の表に示すように、パッケージディレクトリには 3 つのサブディレクトリがあります。

サブディレクトリ

説明

artifacts

デプロイ中に Greengrass がダウンロードする圧縮コンポーネントアーティファクト。

artifacts-unarchived

.zip アーカイブであるアーティファクトの場合、このディレクトリには同じアーティファクトが含まれますが、コンポーネントがアーティファクトの内容を使用できるように解凍されます。

recipes

コンポーネントレシピファイル。

artifacts

次の のツリーリストの例は、アーティファクトの保存方法packages/artifactsを示しています。

user@machine:~$ sudo tree /greengrass/v2/packages/artifacts /greengrass/v2/packages/artifacts ├── aws.greengrass.DockerApplicationManager ├── aws.greengrass.LogManager │ └── 2.3.7 │ └── aws.greengrass.LogManager.jar ├── aws.greengrass.Nucleus │ └── 2.12.6 │ └── aws.greengrass.nucleus.zip ├── aws.greengrass.SecretManager │ └── 2.1.8 │ └── aws.greengrass.SecretManager.jar ├── aws.greengrass.SecureTunneling │ └── 1.0.19 │ └── GreengrassV2SecureTunnelingComponent-1.0-all.jar ├── aws.greengrass.labs.CertificateRotator │ └── 1.1.0 │ └── certificate-rotator.zip ├── aws.greengrass.labs.HomeAssistant │ └── 1.0.0 │ └── home-assistant.zip └── aws.greengrass.telemetry.NucleusEmitter └── 1.0.8 └── aws.greengrass.telemetry.NucleusEmitter.jar 15 directories, 7 files

artifacts-unarchived

次の のツリーリストの例は、.zipファイルから抽出されたアーティファクトpackages/artifacts-unarchivedを示しています。

user@machine:~$ sudo tree /greengrass/v2/packages/artifacts-unarchived /greengrass/v2/packages/artifacts-unarchived ├── aws.greengrass.Nucleus │ └── 2.12.6 │ └── aws.greengrass.nucleus │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── THIRD-PARTY-LICENSES │ ├── bin │ │ ├── greengrass.exe │ │ ├── greengrass.service │ │ ├── greengrass.service.procd.template │ │ ├── greengrass.service.template │ │ ├── greengrass.xml.template │ │ ├── loader │ │ └── loader.cmd │ ├── conf │ │ └── recipe.yaml │ └── lib │ └── Greengrass.jar ├── aws.greengrass.SecureTunneling │ └── 1.0.19 ├── aws.greengrass.labs.CertificateRotator │ └── 1.1.0 │ └── certificate-rotator │ ├── __pycache__ │ │ ├── config.cpython-310.pyc │ │ ├── config.cpython-311.pyc │ │ ├── effective_config.cpython-310.pyc │ │ ├── effective_config.cpython-311.pyc │ │ ├── main.cpython-311.pyc │ │ ├── pki.cpython-310.pyc │ │ ├── pki.cpython-311.pyc │ │ ├── pki_file.cpython-310.pyc │ │ ├── pki_file.cpython-311.pyc │ │ ├── pki_hsm.cpython-310.pyc │ │ ├── pki_hsm.cpython-311.pyc │ │ ├── pubsub.cpython-310.pyc │ │ ├── pubsub.cpython-311.pyc │ │ ├── state.cpython-310.pyc │ │ ├── state.cpython-311.pyc │ │ ├── state_committing_certificate.cpython-310.pyc │ │ ├── state_committing_certificate.cpython-311.pyc │ │ ├── state_creating_certificate.cpython-310.pyc │ │ ├── state_creating_certificate.cpython-311.pyc │ │ ├── state_getting_job.cpython-310.pyc │ │ ├── state_getting_job.cpython-311.pyc │ │ ├── state_idle.cpython-310.pyc │ │ ├── state_idle.cpython-311.pyc │ │ ├── state_machine.cpython-310.pyc │ │ ├── state_machine.cpython-311.pyc │ │ ├── state_updating_job.cpython-310.pyc │ │ ├── state_updating_job.cpython-311.pyc │ │ ├── topic_base.cpython-310.pyc │ │ └── topic_base.cpython-311.pyc │ ├── config.py │ ├── effective_config.py │ ├── main.py │ ├── pki.py │ ├── pki_file.py │ ├── pki_hsm.py │ ├── pubsub.py │ ├── requirements.txt │ ├── scripts │ │ └── run.cmd │ ├── state.py │ ├── state_committing_certificate.py │ ├── state_creating_certificate.py │ ├── state_getting_job.py │ ├── state_idle.py │ ├── state_machine.py │ ├── state_updating_job.py │ └── topic_base.py └── aws.greengrass.labs.HomeAssistant └── 1.0.0 └── home-assistant ├── config │ ├── automations.yaml │ ├── configuration.yaml │ ├── groups.yaml │ ├── scenes.yaml │ └── scripts.yaml ├── docker-compose.yml ├── install.py └── secret.py 17 directories, 67 files

alts ディレクトリは、 の Nucleus .jar ファイルにリンクされていることに注意してくださいpackages/artifacts-unarchived。例:

user@machine:~$ sudo ls -l /greengrass/v2/alts/init total 8 lrwxrwxrwx 1 root root 97 Jun 27 08:12 distro -> /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.6/aws.greengrass.nucleus -rw-r--r-- 1 root root 16 Jun 27 07:07 launch.params

したがって、 はゴールデンイメージに含めるpackages/artifacts-unarchived必要があります。

recipes

次の のツリーリストの例は、レシピの保存方法packages/recipesを示しています。リストが示すように、レシピはダイジェストとともに保存され、デプロイを受信したときに Greengrass が既に正しいファイルがあるかどうかを判断するのに役立ちます。この非常に具体的な形式により、ゴールデンイメージの作成が困難になります。したがって、ゴールデンデバイスのスナップショットを撮ることは、ゴールデンイメージを作成するために推奨される方法です。

user@machine:~$ sudo tree /greengrass/v2/packages/recipes /greengrass/v2/packages/recipes ├── 0ya1warrMfzlq5PUTvOgfHOununru_xCLUFACECM_R0@2.3.7.metadata.json ├── 0ya1warrMfzlq5PUTvOgfHOununru_xCLUFACECM_R0@2.3.7.recipe.yaml ├── 89r1-ak7xPauDt4O7EG03sSXVUO8ysdHTk-YdF0NAAc@2.12.6.metadata.json ├── 89r1-ak7xPauDt4O7EG03sSXVUO8ysdHTk-YdF0NAAc@2.12.6.recipe.yaml ├── VAZ-Grqe5g43yO7UtasQOR5jcQGILgPeRZQhVikLd9o@1.0.0.metadata.json ├── VAZ-Grqe5g43yO7UtasQOR5jcQGILgPeRZQhVikLd9o@1.0.0.recipe.yaml ├── ViMYPYs99-AzSt1gL2L2YD5P7sIN-yEhy23wWJK_JN8@1.0.8.metadata.json ├── ViMYPYs99-AzSt1gL2L2YD5P7sIN-yEhy23wWJK_JN8@1.0.8.recipe.yaml ├── _1hT2A6X0ZYtB_CfI_ZUOEMDV96DfQVkSmZh2bbGYXg@1.0.19.metadata.json ├── _1hT2A6X0ZYtB_CfI_ZUOEMDV96DfQVkSmZh2bbGYXg@1.0.19.recipe.yaml ├── gQWwM7MSL2kOsBADU9bOQJ1QqO8ZI3hqpbKT5Bv4Ijk@1.1.0.metadata.json ├── gQWwM7MSL2kOsBADU9bOQJ1QqO8ZI3hqpbKT5Bv4Ijk@1.1.0.recipe.yaml ├── j_j5Seyy01FOcIh95nBFy4HYf8P1kT-jW_nmV18ldbk@2.1.8.metadata.json └── j_j5Seyy01FOcIh95nBFy4HYf8P1kT-jW_nmV18ldbk@2.1.8.recipe.yaml 0 directories, 14 files

システムサービス

Greengrass がシステムサービスとしてインストールされている場合、一般的に埋め込み Linux デバイスの場合、ゴールデンイメージにはsystemdスタートアップスクリプトを含むディレクトリも含める必要があります。

Docker イメージ

デバイスが Docker イメージをアーティファクトとして使用する AWS IoT Greengrass コンポーネントを使用している場合、これらのアーティファクトは Greengrass ディレクトリツリーの外部にあります。したがって、ゴールデンデバイスの Docker イメージレジストリをゴールデンイメージに含める必要があります。このレジストリは通常、 に保存されます/var/lib/docker

または、Docker コマンドを使用して、ゴールデンデバイスに保存されている Docker イメージのコピーを作成し、それらの Docker イメージを製造ライン上の各デバイスにロードすることもできます。一般に、この方法は遅くなり、Docker イメージの数が増えるにつれてスケーラビリティが低下します。

シークレット

デバイスがシークレットマネージャーコンポーネントを使用して からのシークレットを同期する場合AWS Secrets Manager、これらのシークレットはゴールデンデバイスの Greengrass ディレクトリツリーの config/config.tlogファイルに保存されます。例:

{"TS":1718878001465, "TP":["services","aws.greengrass.SecretManager","runtime","secretResponse"], "W":"changed", "V":"{\"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\":\"AgV4j+We ... A7QjdE1w==\", \"versionStages\":[\"AWSCURRENT\"], \"createdDate\":1660648425915 } ] } "}

これらのシークレットは、対応する config/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"

ゴールデンイメージに config ディレクトリを含める場合でも、Greengrass シークレットマネージャーコンポーネントはゴールデンデバイスのプライベートキーでシークレットを暗号化することに注意してください。各デバイスには一意のプライベートキーがあるため、ゴールデンデバイスによって暗号化されたキーは本番稼働用デバイスによって復号化できません。

このため、暗号化されたシークレットをゴールデンイメージから削除して、本稼働デバイスがゴールデンデバイスシークレットを誤って復号しないようにすることをお勧めします。シークレットがディスクに存在しない場合、デバイスがクラウドと最初に通信する前に、アプリケーションコンポーネントが適切に機能するか、少なくとも正常に機能しない必要があります。

シークレットが厳しい要件である場合

組織が製造中に本番稼働用デバイスにシークレットを入力する必要がある場合、本番稼働用ラインには、各本番稼働用デバイスにシークレットを入力するためのシークレットマネージャーコンポーネントの動作をレプリケートするスクリプトまたはプログラムが必要です。このアプローチは、複雑さと、シークレットが本番環境のプログラミングステーションで一時的にクリアテキストに保持される可能性があるため、お勧めしません。