AWS IoT Greengrass Core ソフトウェアの OTA 更新 - AWS IoT Greengrass

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

AWS IoT Greengrass Core ソフトウェアの OTA 更新

AWS IoT Greengrass Core ソフトウェアパッケージには、AWS IoT Greengrass ソフトウェアの Over-the-air (OTA) 更新を実行できる更新エージェントが含まれています。OTA 更新を使用して、最新バージョンの AWS IoT Greengrass Core ソフトウェアまたは OTA 更新エージェント ソフトウェアを 1 つ以上のコアにインストールできます。OTA 更新では、コアデバイスが物理的に存在する必要はありません。

可能であれば、OTA 更新を使用することをお勧めします。これらは、更新ステータスと更新履歴を追跡するために使用できるメカニズムを提供します。更新に失敗すると、OTA 更新エージェント は以前のソフトウェアバージョンにロールバックします。

注記

apt を使用して AWS IoT Greengrass Core ソフトウェアをインストールする場合、OTA 更新はサポートされません。このようなインストールでは、apt を使用してソフトウェアをアップグレードすることをお勧めします。詳細については、「APT リポジトリからの AWS IoT Greengrass Core ソフトウェアのインストール」を参照してください。

OTA 更新により、以下の作業の効率が向上します。

  • セキュリティの脆弱性を修正する。

  • ソフトウェアの安定性の問題に対処する。

  • 新しい機能や改良された機能をデプロイする。

この機能は、AWS IoT ジョブと統合されています。

Requirements

AWS IoT Greengrass ソフトウェアの OTA 更新には、以下の要件が適用されます。

  • Greengrass コアでは、ローカルストレージの利用可能なディスク容量が 400 MB 以上必要です。OTA 更新エージェント は、ランタイム使用要件が AWS IoT Greengrass Core ソフトウェアの約 3 倍です。詳細については、『https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass』で Greengrass コアの「サービスクォータアマゾン ウェブ サービス全般のリファレンス」を参照してください。

  • Greengrass コアでは、AWS クラウドへの接続が必要です。

  • Greengrass コアは、AWS IoT Core および AWS IoT Greengrass を使用した認証用の証明書とキーで正しく設定およびプロビジョニングする必要があります。詳細については、「X.509 証明書」を参照してください。

  • Greengrass コアは、ネットワークプロキシを使用するように設定することはできません。

    注記

    AWS IoT Greengrass v1.9.3 以降、OTA 更新は、デフォルトのポート 8883 ではなくポート 443 を使用するように MQTT トラフィックを設定するコアでサポートされています。ただし、OTA 更新エージェント はネットワークプロキシを介した更新をサポートしていません。詳細については、「ポート 443 での接続またはネットワークプロキシを通じた接続」を参照してください。

  • AWS IoT Greengrass Core ソフトウェアを含むパーティションでは、信頼された起動を有効にできません。

    注記

    AWS IoT Greengrass Core ソフトウェアは、信頼された起動が有効になっているパーティションにインストールして実行できますが、OTA 更新はサポートされていません。

  • AWS IoT Greengrass には、AWS IoT Greengrass Core ソフトウェアを含むパーティションに対する読み取り/書き込みアクセス許可が必要です。

  • Greengrass コアを管理するために init システムを使用する場合、OTA 更新を init システムと統合するように設定する必要があります。詳細については、「init システムとの統合」を参照してください。

  • Amazon S3 に URLs ソフトウェア更新アーティファクトを事前署名するために使用されるロールを作成する必要があります。AWS IoT Greengrassこの署名者ロールにより、AWS IoT Core はユーザーに代わって Amazon S3 に保存されているソフトウェア更新アーティファクトにアクセスできるようになります。詳細については、「OTA 更新の IAM アクセス許可」を参照してください。

OTA 更新の IAM アクセス許可

AWS IoT Greengrass が AWS IoT Greengrass Core ソフトウェアの新しいバージョンをリリースすると、AWS IoT Greengrass は、OTA 更新に使用される Amazon S3 に保存されたソフトウェアアーティファクトを更新します。

AWS アカウントには、これらのアーティファクトにアクセスするために使用できる Amazon S3 URL 署名者ロールが含まれている必要があります。ロールには、ターゲット AWS リージョン内のバケットに対する s3:GetObject アクションを許可するアクセス許可ポリシーが必要です。ロールには、信頼されたエンティティとしてロールを引き受けることを iot.amazonaws.com に許可する信頼ポリシーも必要です。

アクセス許可ポリシー

ロールのアクセス許可については、AWS 管理ポリシーを使用することも、カスタムポリシーを作成することもできます。

  • AWS 管理ポリシーの使用

    GreengrassOTAUpdateArtifactAccess 管理ポリシーは、AWS IoT Greengrass によって提供されています。現在および将来の両方で AWS IoT Greengrass によりサポートされるすべての AWS リージョンでアクセスを許可する場合は、このポリシーを使用します。

  • カスタムポリシーを作成するには

    コアがデプロイされる AWS リージョンを明示的に指定する場合は、カスタムポリシーを作成する必要があります。以下のポリシー例では、6 つのリージョンでの AWS IoT Greengrass ソフトウェア更新へのアクセスを許可しています。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToGreengrassOTAUpdateArtifacts", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::us-east-1-greengrass-updates/*", "arn:aws:s3:::us-west-2-greengrass-updates/*", "arn:aws:s3:::ap-northeast-1-greengrass-updates/*", "arn:aws:s3:::ap-southeast-2-greengrass-updates/*", "arn:aws:s3:::eu-central-1-greengrass-updates/*", "arn:aws:s3:::eu-west-1-greengrass-updates/*" ] } ] }
信頼ポリシー

ロールにアタッチされた信頼ポリシーは、sts:AssumeRole アクションを許可し、iot.amazonaws.com をプリンシパルとして定義する必要があります。これにより、AWS IoT Core は信頼されたエンティティとしてロールを引き受けることができます。ポリシードキュメントの例を次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIotToAssumeRole", "Action": "sts:AssumeRole", "Principal": { "Service": "iot.amazonaws.com" }, "Effect": "Allow" } ] }

さらに、OTA 更新を開始するユーザーには、greengrass:CreateSoftwareUpdateJob および iot:CreateJob を使用するアクセス許可と、iam:PassRole を使用して署名者ロールのアクセス許可を渡すアクセス許可が必要です。IAM ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "greengrass:CreateSoftwareUpdateJob" ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:CreateJob" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn-of-s3-url-signer-role" } ] }

Considerations

Greengrass Core ソフトウェアの OTA 更新を開始する前に、Core デバイスと、その Core にローカルに接続されたクライアントデバイスの両方で、Greengrass グループのデバイスへの影響に注意します。

  • Core は更新中にシャットダウンされます。

  • Core で実行されている Lambda 関数はすべてシャットダウンされます。これらの関数がローカルリソースに書き込むと、それらのリソースは適切にシャットダウンされない限り正しい状態にならない場合があります。

  • Core のダウンタイム中は、AWS クラウドとのすべての接続が失われます。クライアントデバイスによって Core 経由でルーティングされたメッセージは失われます。

  • 認証情報キャッシュは失われます。

  • Lambda 関数の作業を保留中のキューは失われます。

  • 存続期間の長い Lambda 関数は動的な状態情報を失い、保留中の作業はすべて破棄されます。

OTA 更新の実行中、以下の状態情報は保持されます。

  • Core 設定

  • Greengrass グループ設定

  • ローカルシャドウ

  • Greengrass のログ

  • OTA 更新エージェント ログ

Greengrass OTA Update Agent

OTA 更新エージェント は、クラウドで作成およびデプロイされた更新ジョブを処理する、デバイス上のソフトウェアコンポーネントです。OTA 更新エージェント は、AWS IoT Greengrass Core ソフトウェアと同じソフトウェアパッケージで配布されています。エージェントは /greengrass-root/ota/ota_agent/ggc-ota にあります。 ログを /var/log/greengrass/ota/ggc_ota.txt に書き込みます。

注記

greengrass-root は、デバイスで AWS IoT Greengrass Core ソフトウェアがインストールされているパスを表します。通常、これは /greengrass ディレクトリです。

OTA 更新エージェント を起動するには、バイナリを手動で実行するか、systemd サービスファイルなどの init スクリプトの一部として統合します。バイナリを手動で実行する場合は、root として実行する必要があります。起動すると、OTA 更新エージェント は AWS IoT Greengrass ソフトウェア更新ジョブを AWS IoT Core からリッスンし、順番に実行します。OTA 更新エージェント は、他のすべての AWS IoT ジョブタイプを無視します。

次の抜粋は、OTA 更新エージェント を開始、停止、再起動する systemd サービスファイルの例を示しています。

[Unit] Description=Greengrass OTA Daemon [Service] Type=forking Restart=on-failure ExecStart=/greengrass/ota/ota_agent/ggc-ota [Install] WantedBy=multi-user.target

更新のターゲットであるコアは、OTA 更新エージェント の 2 つのインスタンスを実行することはできません。実行すると、2 つのエージェントが同じジョブを処理し、それにより競合が発生します。

init システムとの統合

OTA 更新中に、OTA 更新エージェント はコアデバイス上のバイナリを再起動します。バイナリが実行中の場合、更新中に init システムが AWS IoT Greengrass Core ソフトウェアまたはエージェントの状態をモニタリングしているとき、競合が発生する可能性があります。OTA 更新メカニズムを init モニタリング戦略と統合するために、更新の前後に実行するシェルスクリプトを記述できます。たとえば、ggc_pre_update.sh スクリプトを使用して、デバイスがシャットダウンする前にデータをバックアップしたり、プロセスを停止したりできます。

これらのスクリプトを実行するように OTA 更新エージェント に指示するには、"managedRespawn" : trueconfig.json ファイルに フラグを含める必要があります。この設定は、次の抜粋に示されています。

{ "coreThing": { … }, "runtime": { … }, "managedRespawn": true … }

OTA 更新による管理された再生成

managedRespawn に設定した OTA 更新には、次の要件が適用されます。true

  • 次のシェルスクリプトは、/greengrass-root/usr/scripts ディレクトリに存在している必要があります。

    • ggc_pre_update.sh

    • ggc_post_update.sh

    • ota_pre_update.sh

    • ota_post_update.sh

  • スクリプトは、成功のリターンコードを返す必要があります。

  • スクリプトは root が所有し、root のみが実行できることが必要です。

  • スクリプトは Greengrass デーモンを停止する必要があります。ggc_pre_update.sh

  • スクリプトは Greengrass デーモンを起動する必要があります。ggc_post_update.sh

注記

は独自のプロセスを管理するため、OTA 更新エージェント および ota_pre_update.sh スクリプトが OTA サービスを停止または開始する必要はありません。ota_post_update.sh

は OTA 更新エージェント からスクリプトを実行します。/greengrass-root/usr/scripts ディレクトリツリーは次のようになります。

<greengrass_root> |-- certs |-- config | |-- config.json |-- ggc |-- usr/scripts | |-- ggc_pre_update.sh | |-- ggc_post_update.sh | |-- ota_pre_update.sh | |-- ota_post_update.sh |-- ota

managedRespawn に設定すると、true は、ソフトウェア更新の前後にこれらのスクリプトの OTA 更新エージェント ディレクトリをチェックします。/greengrass-root/usr/scriptsスクリプトが存在しない場合、更新は失敗します。 AWS IoT Greengrass は、これらのスクリプトの内容を検証しません。ベストプラクティスとして、スクリプトが正しく機能することを確認し、エラーに対して適切な終了コードを発行します。

AWS IoT Greengrass Core ソフトウェアの OTA 更新の場合:

  • 更新を開始する前に、エージェントは ggc_pre_update.sh スクリプトを実行します。このスクリプトは、OTA 更新エージェント が AWS IoT Greengrass Core ソフトウェア更新を開始する前に実行する必要のあるコマンドに使用します。たとえば、データをバックアップしたり、実行中のプロセスを停止したりするために使用します。次の例は、Greengrass デーモンを停止する単純なスクリプトを示しています。

    #!/bin/bash set -euo pipefail systemctl stop greengrass
  • 更新が完了すると、エージェントは ggc_post_update.sh スクリプトを実行します。が OTA 更新エージェント Core ソフトウェア更新の開始後に実行する必要があるコマンド (プロセスの再起動など) には、このスクリプトを使用します。AWS IoT Greengrass次の例は、Greengrass デーモンを起動するための簡単なスクリプトを示しています。

    #!/bin/bash set -euo pipefail systemctl start greengrass

の OTA 更新の場合:OTA 更新エージェント

  • 更新を開始する前に、エージェントは ota_pre_update.sh スクリプトを実行します。がデータのバックアップや実行中のプロセスの停止など、OTA 更新エージェント が自体を更新する前に実行する必要があるコマンドにこのスクリプトを使用します。

  • 更新が完了すると、エージェントは ota_post_update.sh スクリプトを実行します。プロセスを再起動するためなど、OTA 更新エージェント が自動更新後に実行する必要があるコマンドにこのスクリプトを使用します。

注記

managedRespawnfalse に設定されている場合、OTA 更新エージェント はスクリプトを実行しません。

OTA 更新の作成

次のステップに従って、1 つ以上のコアで AWS IoT Greengrass ソフトウェアの OTA 更新を実行します。

  1. コアが OTA 更新の要件を満たしていることを確認します。

    注記

    AWS IoT Greengrass Core ソフトウェアまたは OTA 更新エージェント を管理するように init システムを設定した場合、コアで次のことを確認します。

    • config.json ファイルは "managedRespawn" : true を指定します。

    • /greengrass-root/usr/scripts ディレクトリには、次のスクリプトが含まれています。

      • ggc_pre_update.sh

      • ggc_post_update.sh

      • ota_pre_update.sh

      • ota_post_update.sh

    詳細については、「init システムとの統合」を参照してください。

  2. コアデバイスターミナルで、OTA 更新エージェント を起動します。

    cd /greengrass-root/ota/ota_agent sudo ./ggc-ota
    注記

    greengrass-root は、デバイスで AWS IoT Greengrass Core ソフトウェアがインストールされているパスを表します。通常、これは /greengrass ディレクトリです。

    競合の原因となる可能性があるため、コア上で OTA 更新エージェント の複数のインスタンスを起動しないでください。

  3. AWS IoT コンソール または AWS IoT Greengrass API を使用して、ソフトウェア更新ジョブを作成します。

     

    コンソールの使用
    1. AWS IoT コンソール コンソールで、[管理] を選択して [ジョブ] を選択します。

    2. [作成] を選択し、[Core 更新ジョブの作成] を選択します。

    3. [Greengrass 更新の作成] ページで、更新ジョブのプロパティを定義し、[作成] を選択します。次に例を示します。

      • [更新するデバイスを選択] で、更新するコアを選択します。コアのモノとコアを含むモノのグループを個別に選択できます。

      • [S3 URL 署名者ロール] で、署名者ロールを選択します。

      • [更新する Greengrass Core のコンポーネントを選択] で、AWS IoT Greengrass Core ソフトウェアを更新するか、OTA 更新エージェント ソフトウェアを更新するかを選択します。

    4. [ジョブ] ページで、新しいジョブを選択して、更新ステータスを表示します。

     

    API を使用する
    1. CreateSoftwareUpdateJob API を呼び出します。この手順例では、AWS CLI コマンドを使用します。

      次のコマンドは、1 つのコアで AWS IoT Greengrass Core ソフトウェアを更新するジョブを作成します。サンプル値を置き換えて、コマンドを実行します。

      Linux or macOS terminal
      aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:リージョン:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1
      Windows command prompt
      aws greengrass create-software-update-job ^ --update-targets-architecture x86_64 ^ --update-targets [\"arn:aws:iot:リージョン:123456789012:thing/myCoreDevice\"] ^ --update-targets-operating-system ubuntu ^ --software-to-update core ^ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole ^ --update-agent-log-level WARN ^ --amzn-client-token myClientToken1

      このコマンドは、次のレスポンスを返します。

      { "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:リージョン:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.10.1" }
    2. レスポンスから IoTJobId をコピーします。

    3. API で DescribeJob を呼び出して、ジョブのステータスを確認します。AWS IoT Coreサンプル値をジョブ ID に置き換えて、コマンドを実行します。

      aws iot describe-job --job-id GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE

      コマンドは、ジョブに関する情報(statusjobProcessDetails など) を含むレスポンスオブジェクトを返します。

      { "job": { "jobArn": "arn:aws:iot:リージョン:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "jobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "targetSelection": "SNAPSHOT", "status": "IN_PROGRESS", "targets": [ "arn:aws:iot:リージョン:123456789012:thing/myCoreDevice" ], "description": "This job was created by Greengrass to update the Greengrass Cores in the targets with version 1.10.1 of the core software running on x86_64 architecture.", "presignedUrlConfig": { "roleArn": "arn:aws::iam::123456789012:role/myS3UrlSignerRole", "expiresInSec": 3600 }, "jobExecutionsRolloutConfig": {}, "createdAt": 1588718249.079, "lastUpdatedAt": 1588718253.419, "jobProcessDetails": { "numberOfCanceledThings": 0, "numberOfSucceededThings": 0, "numberOfFailedThings": 0, "numberOfRejectedThings": 0, "numberOfQueuedThings": 1, "numberOfInProgressThings": 0, "numberOfRemovedThings": 0, "numberOfTimedOutThings": 0 }, "timeoutConfig": {} } }

トラブルシューティングのヘルプについては、「AWS IoT Greengrass のトラブルシューティング」を参照してください。

CreateSoftwareUpdateJob API

CreateSoftwareUpdateJob API を使用して、コアデバイス上の AWS IoT Greengrass Core ソフトウェアまたは OTA 更新エージェント ソフトウェアを更新できます。この API は、更新が利用可能になったときにデバイスに通知する AWS IoT スナップショットジョブを作成します。CreateSoftwareUpdateJob を呼び出した後は、他の AWS IoT ジョブコマンドを使用して、ソフトウェア更新を追跡できます。詳細については、https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html の「ジョブAWS IoT 開発者ガイド」を参照してください。

以下の例では、AWS CLI を使用して、コアデバイス上の AWS IoT Greengrass Core ソフトウェアを更新するジョブを作成する方法を示しています。

aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:リージョン:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1

create-software-update-job コマンドは、更新によってインストールされたジョブ ID、ジョブ ARN、およびソフトウェアバージョンを含む JSON レスポンスを返します。

{ "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:リージョン:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.9.2" }

create-software-update-job を使用してコアデバイスを更新する方法を示す手順については、「OTA 更新の作成」を参照してください。

create-software-update-job コマンドでは、以下のパラメータを使用します。

--update-targets-architecture

Core デバイスのアーキテクチャ。

有効な値: armv7l, armv6l, x86_64, またはaarch64

--update-targets

更新するコア。リストには、個々のコアの ARNs と、メンバーがコアであるモノのグループの ARNs を含めることができます。モノのグループの詳細については、https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html の「静的なモノのグループAWS IoT 開発者ガイド」を参照してください。

--update-targets-operating-system

Core デバイスのオペレーティングシステム。

有効な値: ubuntu, amazon_linux, raspbian, またはopenwrt

--software-to-update

更新するのが Core ソフトウェアであるか OTA 更新エージェント ソフトウェアであるかを指定します。

有効な値: core または ota_agent

--s3-url-signer-role

AWS IoT Greengrass ソフトウェア更新アーティファクトにリンクする Amazon S3 URL の事前署名に使用される IAM ロールの ARN。ロールのアタッチされたアクセス許可ポリシーは、ターゲット AWS リージョン内のバケットに対する s3:GetObject アクションを許可する必要があります。ロールは、ロールを信頼されたエンティティとして引き受けることを iot.amazonaws.com に許可する必要があります。詳細については、「OTA 更新の IAM アクセス許可」を参照してください。

--amzn-client-token

(オプション) べき等リクエストを行うために使用されるクライアントトークン。内部再試行のため重複した更新が作成されないようにする一意のトークンを指定します。

--update-agent-log-level

(オプション) OTA 更新エージェント によって生成されるログステートメントのログ記録レベル。デフォルト: ERROR

有効な値: NONETRACEDEBUGVERBOSEINFOWARNERROR、またはFATAL

注記

CreateSoftwareUpdateJob は、次のサポートされているアーキテクチャとオペレーティングシステムの組み合わせに対するリクエストのみを受け入れます。

  • ubuntu/x86_64

  • ubuntu/aarch64

  • amazon_linux/x86_64

  • raspbian/armv7l

  • raspbian/armv6l

  • openwrt/aarch64

  • openwrt/armv7l