デバイスに AWS IoT Greengrass コンポーネントのデプロイ
デバイスまたはデバイスのグループにコンポーネントを配備するために AWS IoT Greengrass を使用できます。デプロイを使用して、デバイスに送信するコンポーネントとコンフィギュレーションを定義します。AWS IoT Greengrass は、Greengrass のコアデバイスを表すターゲット、AWS IoT モノ、またはモノのグループにデプロイします。AWS IoT Core ジョブを使用してコアデバイスにデプロイします。ジョブのデバイスへの展開方法を設定することができます。
コアデバイスのデプロイ
各コアデバイスは、そのデバイスのためのデプロイのコンポーネントを実行します。同じターゲットへの新しいデプロイは、ターゲットへの以前のデプロイ置を上書きします。デプロイを作成するとき、コアデバイスの既存のソフトウェアに適用するコンポーネントと設定を定義します。
ターゲットのデプロイを改訂するとき、前の改訂のコンポーネントを新しい改訂のコンポーネントに置き換えます。例えば、コンポーネント ログマネージャー と シークレットマネージャー をモノグループ TestGroup
にデプロイします。次に、シークレットマネージャーのコンポーネントのみを指定する TestGroup
別のデプロイを作成します。その結果、そのグループのコアデバイスは、ログマネージャーを実行しなくなりました。
プラットフォーム依存の解決
コアデバイスはデプロイを受け取ると、そのコンポーネントがコアデバイスと互換性があるかどうかを確認します。例えば、Windows のターゲットに Firehose をデプロイした場合、デプロイは失敗します。
コンポーネント依存の解決
また、コアデバイスは、各コンポーネントの依存関係が、このモノグループに他のコンポーネントをデプロイする際のバージョン制約に適合しているかどうかをチェックします。コンポーネントのバージョン制約が重複する場合、Greengrass はコンポーネントの適用可能な最大バージョンを使用します。例:
-
コンポーネント A を
TestGroup
にデプロイします。コンポーネント A はcom.example.PythonRuntime
コンポーネントバージョン 3.5~3.10 に依存します。 -
次に、コンポーネント B を
TestGroup
にデプロイします。コンポーネント B はcom.example.PythonRuntime
コンポーネントバージョン 3.7~3.8 に依存します。
この場合は結果的に、TestGroup
のコアデバイスでは、バージョン 3.8 の com.example.PythonRuntime
コンポーネントの導入が可能と判断されます。重複したバージョン制約のうち、このバージョン番号が最も高いためです。
次に、コンポーネント C を TestGroup
にデプロイします。コンポーネント Cは com.example.PythonRuntime
コンポーネントバージョン 2.6~2.7 に依存します。制約条件である 2.6~2.7 および 3.7~3.8 を満たすコンポーネントのバージョンがないため、このデプロイは失敗します。
モノのグループからデバイスを削除する
モノグループからコアデバイスを削除するとき、コンポーネントのデプロイ動作は、コアデバイスが実行する Greengrass nucleus のバージョンによって異なります。
デプロイ
デプロイは継続的です。デプロイを作成するとき、AWS IoT Greengrass はオンラインのターゲットデバイスにデプロイをロールアウトします。ターゲットデバイスがオンラインではない場合、次回 AWS IoT Greengrass に接続したときにデプロイを受信します。ターゲットモノグループにコアデバイスを追加するとき、AWS IoT Greengrass は、デバイスに対してそのモノグループの最新デプロイを送信します。
コアデバイスがコンポーネントをデプロイする前に、デフォルトではデバイス上の各コンポーネントに通知します。Greengrass コンポーネントは、通知に応答してデプロイを延期できます。デバイスのバッテリ残量が少ない場合や、中断できないプロセスを実行している場合などに、デプロイを延期できます。詳細については、「チュートリアル: コンポーネントの更新を延期する Greengrass コンポーネントを開発する」を参照してください。デプロイを作成するときに、コンポーネントに通知せずにデプロイするように設定することができます。
各ターゲットのモノまたはモノグループは、一度に 1 件のデプロイを持つことができます。これは、ターゲットのデプロイを作成するとき、AWS IoT Greengrass はそのターゲットのデプロイにおける前の改訂をデプロイしなくなります。
デプロイオプション
デプロイは、更新を受信するデバイスと更新のデプロイ方法の制御を可能にするいくつかのオプションを提供します。デプロイを作成するとき、次のオプションを設定できます。
-
AWS IoT Greengrass コンポーネント
ターゲットデバイスにインストールして実行するコンポーネントを定義します。Greengrass コアデバイスにデプロイして実行する AWS IoT Greengrass コンポーネントとソフトウェアモジュールです。コンポーネントがデバイスのプラットフォームをサポートしている場合のみ、デバイスがコンポーネントを受信します。これにより、ターゲットデバイスが複数のプラットフォームで実行されている場合でも、デバイスのグループにデプロイできます。コンポーネントがデバイスのプラットフォームをサポートしていない場合、コンポーネントはデバイスにデプロイしません。
カスタムコンポーネントと AWS が提供するコンポーネントをデバイスにデプロイできます。コンポーネントをデプロイすると、AWS IoT Greengrass はコンポーネントの従属関係を特定し、それらもデプロイします。詳細については、AWS IoT Greengrass コンポーネントを開発するおよびAWS が提供したコンポーネントを参照してください。
各コンポーネントにデプロイするバージョンと設定の更新を定義します。設定更新は、コアデバイスにコンポーネントが存在しない場合、コアデバイスのコンポーネントの既存設定またはコンポーネントのデフォルト設定を修正する方法を指定します。デフォルト値にリセットする設定値と、コアデバイスにマージする新しい設定値を指定することができます。コアデバイスが異なるターゲット用のデプロイを受信し、かつ各デプロイが互換性のあるコンポーネントバージョンを指定するとき、コアデバイスは、デプロイを作成したときのタイムスタンプに基づいて、設定更新を順序に従って適用します。詳細については、「コンポーネント設定の更新」を参照してください。
重要
コンポーネントをデプロイする際、AWS IoT Greengrass は、そのコンポーネントの従属関係においてサポートされた最新のバージョンをインストールします。このため、新しいデバイスをモノグループに追加したり、これらのデバイスを対象とするデプロイを更新すると、AWS が提供するパブリックコンポーネントの新しいパッチバージョンが自動的にコアデバイスにデプロイされる場合があります。nucleus の更新など、一部の自動更新により、デバイスに予期せぬ再起動が発生することがあります。
デバイスで実行されているコンポーネントに不要に更新されることを防ぐには、デプロイを作成する際、そのコンポーネントの優先バージョンを直接含めることをお勧めします。AWS IoT Greengrass Core ソフトウェアの更新動作の詳細については、「AWS IoT Greengrass Core ソフトウェア (OTA) の更新」を参照してください。
-
デプロイポリシー
設定を安全にデプロイできるタイミングと、デプロイが失敗した場合の対処方法を定義します。コンポーネントが更新できることを報告することを待機するかどうか指定できます。失敗するデプロイを適用した場合、デバイスを以の設定にロールバックするかどうか指定することもできます。
-
設定を停止
デプロイを停止するタイミングと方法を定義します。定義した基準が満たされると、デプロイは停止して失敗します。例えば、最小数のデバイスがデプロイを受信した後、そのデプロイの適用に失敗したデバイスがある割合に達した場合、デプロイを停止するように設定できます。
-
ロールアウト設定
デプロイがターゲットデバイスにロールアウトされるレートを定義します。最小レートと最大レートの閾値で指数関数的レート増加を設定できます。
-
タイムアウト設定
各デバイスがデプロイに適用する必要がある最大時間を定義します。デバイスが指定した時間を超えると、デバイスはデプロイの適用に失敗します。
重要
カスタムコンポーネントは S3 バケットにアーティファクトを定義できます。AWS IoT Greengrass Core ソフトウェアがコンポーネントをデプロイするとき、コンポーネントのアーティファクトを AWS クラウド からダウンロードします。コアデバイスのロールは、デフォルトで S3 バケットへのアクセスを許可しません。S3 バケットのアーティファクトを定義するカスタムコンポーネントをデプロイするには、コアデバイスロールはそのバケットからアーティファクトをダウンロードする許可を付与する必要があります。詳細については、「コンポーネントのアーティファクトの S3 バケットへのアクセスを許可する」を参照してください。