AWS IoTジョブの準備 - AWS IoT Core

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

AWS IoTジョブの準備

AWS IoT Device ManagementSoftware Package Catalog は、置換パラメータ、AWS IoTフリートインデックス作成、モノの動的グループ、モノAWS IoTの予約済み名前付きシャドウとの統合を通じてAWS IoTジョブを拡張します。

注記

Software Package Catalog が提供するすべての機能を使用するには、次の AWS Identity and Access Management(IAM) ロールとポリシーを作成する必要があります。AWS IoTパッケージバージョンをデプロイするジョブ権限と、AWS IoT予約された名前付きシャドウを更新するジョブ権限。詳細については、「セキュリティの準備」を参照してください。

AWS IoTジョブの置換パラメータ

置換パラメータは、AWS IoTジョブドキュメント内のプレースホルダーとして使用できます。ジョブサービスが代替パラメータを検出すると、そのジョブは、指定されたソフトウェアバージョンのパラメータ値の属性を指します。このプロセスを使用して 1 つのジョブドキュメントを作成し、汎用属性を介してメタデータをジョブに渡すことができます。例えば、Amazon Simple Storage Service (Amazon S3) URL、ソフトウェアパッケージ Amazon リソースネーム (ARN)、または署名をパッケージバージョン属性を介してジョブドキュメントに渡すことができます。

代替パラメータは、ジョブドキュメントで次のようにフォーマットする必要があります。

  • ソフトウェアパッケージ名とパッケージバージョン

    • package::version 間の空の文字列は、ソフトウェアパッケージ名の置換パラメータを表します。version::attribute 間の空の文字列は、ソフトウェアパッケージバージョンの置換パラメータを表します。ジョブドキュメントでパッケージ名とパッケージ検証置換パラメータを使用するには、次の例を参照してください。${aws:iot:package::version::attributes:<attributekey>}

    • ジョブドキュメントは、パッケージバージョンの詳細からバージョン ARN を使用して、これらの置換パラメータを自動入力します。API または CLI コマンドを使用して単一パッケージデプロイ用のジョブまたはジョブテンプレートを作成する場合、パッケージバージョンのバージョン ARNCreateJob および DescribeJobdestinationPackageVersions パラメータで表されます。

  • ソフトウェアパッケージバージョンのすべての属性

    • ジョブドキュメントでソフトウェアパッケージバージョン置換パラメータのすべての属性を使用するには、次の例を参照してください。${aws:iot:package:<packageName>:version:<versionName>:attributes}

注記

パッケージ名、パッケージバージョン、およびすべての属性置換パラメータを一緒に使用できます。ジョブドキュメントで 3 つの置換パラメータをすべて使用する方法については、次の例を参照してください。${aws:iot:package::version::attributes}

次の例では、samplePackage という名前のソフトウェアパッケージがあり、そのパッケージバージョンには以下の属性を持つ 2.1.5 という名前のパッケージバージョンがあります。

  • 名前: s3URL、値: https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile

    • この属性は、Amazon S3 内に保存されているコードファイルの場所を識別します。

  • 名前: signature、値: aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj

    • この属性は、デバイスがセキュリティ対策として必要とするコード署名値を提供します。詳細については、「ジョブのコード署名」を参照してください。注: この属性は一例であり、Software Package Catalog やジョブの一部としては必須ではありません。

s3URL の場合、ジョブドキュメントパラメータは次のように記述されます。

{ "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}" }

signature の場合、ジョブドキュメントパラメータは次のように記述されます。

{ "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}" }

ジョブドキュメント全体は次のように記述されます。

{ ... "Steps": { "uninstall": ["samplePackage"], "download": [ { "samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}" }, ], "signature": [ "samplePackage" : "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}" ] } }

置換が行われると、次のジョブドキュメントがデバイスにデプロイされます。

{ ... "Steps": { "uninstall": ["samplePackage"], "download": [ { "samplePackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile" }, ], "signature": [ "samplePackage" : "aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj" ] } }

置換パラメータ (表示前と表示後)

代替パラメータは、デフォルトのパッケージバージョンの $default など、さまざまなフラグを使用してジョブドキュメントの作成を効率化します。これにより、特定のパッケージ検証で参照されるメタデータがそれらのフラグに自動入力されるため、ジョブデプロイごとに特定のパッケージバージョンメタデータを手動で入力する必要がなくなります。デフォルトのパッケージバージョンの $default など、パッケージバージョンの属性の詳細については、「デプロイ用のジョブドキュメントとパッケージバージョンの準備」を参照してください。

でAWS マネジメントコンソール、パッケージバージョンのジョブデプロイ中にデプロイ指示ファイルエディタウィンドウのプレビュー置換ボタンを切り替えると、置換パラメータの有無にかかわらずジョブドキュメントが表示されます。

DescribeJob および GetJobDocument API の「置換前」パラメータを使用すると、置換パラメータが削除される前後の API レスポンスを表示できます。DescribeJob および GetJobDocument API で次の例を参照してください。

  • DescribeJob

    • デフォルトビュー

      { "jobId": "<jobId>", "description": "<description>", "destinationPackageVersions": ["arn:aws:iot:us-west-2:123456789012:package/TestPackage/version/1.0.2"] }
    • 置換前ビュー

      { "jobId": "<jobId>", "description": "<description>", "destinationPackageVersions": ["arn:aws:iot:us-west-2:123456789012:package/TestPackage/version/$default"] }
  • GetJobDocument

    • デフォルトビュー

      { "attributes": { "location": "prod-artifacts.s3.us-east-1.amazonaws.com/mqtt-core", "signature": "IQoJb3JpZ2luX2VjEIrwEaCXVzLWVhc3QtMSJHMEUCIAofPNPpZ9cI", "streamName": "mqtt-core", "fileId": "0" }, }
    • 置換前ビュー

      { "attributes": "${aws:iot:package:TestPackage:version:$default:attributes}", }

AWS IoTジョブ、ジョブドキュメントの作成、ジョブのデプロイの詳細については、「ジョブ」を参照してください。

デプロイ用のジョブドキュメントとパッケージバージョンの準備

パッケージバージョンが作成されると、デプロイの準備中であることを示す draft 状態になります。デプロイのパッケージバージョンを準備するには、ジョブドキュメントを作成し、ジョブがアクセスできる場所 (Amazon S3 など) にドキュメントを保存して、パッケージバージョンにジョブドキュメントで使用したい属性値があることを確認し、パッケージバージョンを公開する必要があります。(注意: draft 状態にあるパッケージバージョンの属性のみを更新できます)。

単一パッケージデプロイ用の AWS IoTジョブまたは ジョブテンプレートを作成する場合、ジョブドキュメントをカスタマイズするための以下のオプションがあります。

デプロイ指示ファイル (recipe)

  • パッケージバージョンのデプロイ指示ファイルには、パッケージバージョンを複数のデバイスにデプロイするためのインラインジョブドキュメントを含むデプロイ指示が含まれています。ファイルは、迅速かつ効率的なジョブデプロイのために、特定のデプロイ手順をパッケージバージョンに関連付けます。

    ではAWS マネジメントコンソール、新しいパッケージの作成ワークフローの「バージョンデプロイ設定」タブの「デプロイ手順ファイルプレビュー」ウィンドウでファイルを作成できます。AWS IoTを使用して、推奨ファイルからAWS IoT開始を使用してパッケージバージョン属性から指示ファイルを自動的に生成するか、独自のデプロイ指示ファイルを使用して Amazon S3 バケットに保存されている既存のジョブドキュメントを使用できます。

    注記

    独自のジョブドキュメントを使用する場合は、[デプロイ手順ファイルプレビュー] ウィンドウで直接更新できますが、Amazon S3 バケットに保存されている元のジョブドキュメントは自動的に更新されません。

    AWS CLIまたは CreatePackageVersion、、 GetPackageVersionなどの API コマンドを使用する場合UpdatePackageVersion、 はインラインジョブドキュメントを含むデプロイ指示ファイルrecipeを表します。

    ジョブドキュメントの詳細については、「基本概念」を参照してください。

    recipe で表されるデプロイ指示ファイルについては、次の例を参照してください。

    { "packageName": "sample-package-name", "versionName": "sample-package-version", ... "recipe": "{...}" }
    注記

    recipe で表されるデプロイインストラクションファイルは、パッケージバージョンがパッケージバージョンメタデータとは別に published ステータスの状態にあるときに更新できます。ジョブのデプロイ中は変更できなくなります。

Artifact バージョン属性

  • ソフトウェアパッケージバージョンのバージョン属性 artifact を使用して、パッケージバージョンアーティファクトの Amazon S3 の場所を追加できます。AWS IoT ジョブを使用してパッケージバージョンのジョブデプロイがトリガーされると、ジョブドキュメントの署名付き URL プレースホルダー ${aws:iot:package:<packageName>:version:<versionName>:artifact-location:s3-presigned-url} は、Amazon S3 バケット、バケットキー、および Amazon S3 バケットに保存されているファイルのバージョンを使用して更新されます。パッケージバージョンのアーティファクトを格納する Amazon S3 バケットは、パッケージバージョンが作成されたのと同じリージョンに配置する必要があります。

    注記

    Amazon S3 バケットに同じファイルの複数のオブジェクトバージョンを保存するには、バケットでバージョニングを有効にする必要があります。詳細については、「バケットでのバージョニングの有効化」を参照してください。

    CreatePackageVersion または UpdatePackageVersion API オペレーションを使用するときに Amazon S3 バケット内のパッケージバージョンアーティファクトにアクセスするには、次のアクセス許可が必要です。

    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::bucket-name/key-name" } ] }

    CreatePackageVersion および UpdatePackageVersion API オペレーションのバージョン属性 artifact の詳細については、「CreatePackageVersion」および「UpdatePackageVersion」を参照してください。

    新しいパッケージバージョンを作成するときに Amazon S3 のアーティファクトの場所をサポートするバージョン属性 artifact を示す次の例を参照してください。

    { "packageName": "sample package name", "versionName": "1.0", "artifact": { "s3Location": { "bucket": "firmware", "key": "image.bin", "version": "12345" } } }
    注記

    パッケージバージョンが draft ステータス状態から published ステータス状態に更新されると、パッケージバージョンの属性とアーティファクトの場所は変更不可能になります。この情報を更新するには、新しいパッケージバージョンを作成し、draft ステータス状態で更新を実行する必要があります。

パッケージバージョン

  • デフォルトのソフトウェアパッケージバージョンは、安全で安定したパッケージバージョンを提供するソフトウェアパッケージの利用可能なバージョンに表示できます。これは、AWS IoTジョブを使用してデフォルトのパッケージバージョンをデバイスフリートにデプロイするときのソフトウェアパッケージのベースラインバージョンとして機能します。ソフトウェアパッケージの $default パッケージバージョンをデプロイするジョブを作成する場合、ジョブドキュメントと新しいジョブデプロイのパッケージバージョンは $default と一致する必要があります。ジョブデプロイのパッケージバージョンは、API コマンドと CLI コマンドの destinationPackageVersions と AWS マネジメントコンソール の VersionARN で表されます。ジョブドキュメントのパッケージバージョンは、以下に示すジョブドキュメントプレースホルダーによって表されます。

    arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$default

    デフォルトのパッケージバージョンを使用してジョブまたはジョブテンプレートを作成するには、以下に示すように、CreateJob または CreateJobTemplate API コマンドで $default フラグを使用します。

    "$ aws iot create-job \ --destination-package-versions "arn:aws:iot:us-west-2:123456789012:package/TestPackage/version/$default" --document file://jobdoc.json
    注記

    デフォルトバージョンを参照する $default パッケージバージョン属性は、AWS IoT ジョブを介したジョブデプロイのデフォルトパッケージバージョンを参照する場合にのみ必要なオプションの属性です。

パッケージバージョンに満足したら、AWS IoTコンソールのソフトウェアパッケージの詳細ページまたは UpdatePackageVersion API オペレーションを発行して公開します。その後、AWS IoTコンソールから、または CreateJob API オペレーションを発行してジョブを作成するときに、パッケージバージョンを参照できます。

デプロイ時のパッケージとバージョンの命名

ソフトウェアパッケージバージョンをデバイスにデプロイするには、ジョブドキュメントで参照されているソフトウェアパッケージとパッケージバージョンが、CreateJob API オペレーションの destinationPackageVersions パラメータに記載されているソフトウェアパッケージとパッケージバージョンと一致していることを確認します。一致しない場合は、両方の参照を一致させるように促すエラーメッセージが表示されます。Software Package Catalog のエラーメッセージの詳細については、「エラーメッセージの一般的なトラブルシューティング」を参照してください。

ジョブドキュメントで参照されているソフトウェアパッケージとパッケージバージョンに加えて、ジョブドキュメントで参照されていない CreateJob API オペレーションの destinationPackageVersions パラメータに追加のソフトウェアパッケージとパッケージバージョンを含めることができます。追加のソフトウェアパッケージバージョンを適切にインストールするために、必要なインストール情報がジョブドキュメントに含まれていることを確認します。CreateJob API オペレーションの詳細については、「CreateJob」を参照してください。

モノのAWS IoT動的グループによるジョブのターゲット設定

Software Package Catalog は、フリートインデックス作成AWS IoT のジョブAWS IoT のモノの動的グループと連携して、フリート内のデバイスをフィルタリングしてターゲットにし、デバイスにデプロイするパッケージバージョンを選択します。デバイスの現在のパッケージ情報に基づいてフリートインデックス作成クエリを実行し、それらのモノを AWS IoTジョブにターゲットにすることができます。ソフトウェアアップデートをリリースすることもできますが、対象となるターゲットデバイスに対してのみです。例えば、現在 iot-device-client 1.5.09 を実行しているデバイスにのみ設定をデプロイするように指定できます。詳細については、「モノの動的グループを作成する」を参照してください。

予約済みの名前付きシャドウとパッケージバージョン

設定されている場合、AWS IoTジョブが正常に完了すると、ジョブはモノの予約済み名前付きシャドウ ($package) を更新できます。そうすれば、パッケージバージョンをモノの予約済みの名前付きシャドウに手動で関連付ける必要がなくなります。

次のような状況では、パッケージバージョンをモノの予約済みの名前付きシャドウに手動で関連付けるか、更新することを選択できます。

  • インストールされたパッケージバージョンを関連付けAWS IoT Coreずに、モノを に登録します。

  • AWS IoTジョブは、モノの予約済み名前付きシャドウを更新するように設定されていません。

  • 社内プロセスを使用してパッケージバージョンをフリートにディスパッチすると、そのプロセスは完了AWS IoT Coreしても更新されません。

注記

AWS IoTジョブを使用して、予約済み名前付きシャドウ () のパッケージバージョンを更新することをお勧めします$package。AWS IoTJobs $package もシャドウを更新するように設定されている場合、他のプロセス (手動またはプログラムによる API コールなど) を通じてシャドウ内のバージョンパラメータを更新すると、デバイス上の実際のバージョンと予約済みの名前付きシャドウに報告されたバージョンとの間に不整合が発生する可能性があります。

コンソールまたは UpdateThingShadow API オペレーションを使用して、モノの予約済みの名前付きシャドウ ($package) にパッケージバージョンを追加または更新できます。詳細については、「 AWS IoTモノへのパッケージバージョンの関連付け」を参照してください。

注記

パッケージバージョンを AWS IoTモノに関連付けても、デバイスソフトウェアは直接更新されません。デバイスソフトウェアを更新するには、パッケージバージョンをデバイスにデプロイする必要があります。

ソフトウェアパッケージとそのパッケージバージョンのアンインストール

$null は、AWS IoTJobs サービスに、デバイスの予約済みの名前付きシャドウ から既存のソフトウェアパッケージとパッケージバージョンを削除するように求める予約済みプレースホルダーです$package。詳細については、「予約済みの名前付きシャドウ」を参照してください。

この機能を使用するには、destinationPackageVersion Amazon リソースネーム (ARN) を $null に置き換えます。その後、デバイスからソフトウェアを削除するようにサービスに指示する必要があります。

承認された ARN は次の形式を使用します。

arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$null

例えば、

$ aws iot create-job \ ... \ --destinationPackageVersions ["arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/$null"]