

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

# AWS IoT ジョブの準備
<a name="preparing-jobs-for-service-package-catalog"></a>

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

**注記**  
 Software Package Catalog が提供するすべての機能を使用するには、次の AWS Identity and Access Management (IAM) ロールとポリシーを作成する必要があります。[AWS IoT パッケージバージョンをデプロイするジョブ権限](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-security.html#job-rights-deploy-versions)と、[AWS IoT 予約された名前付きシャドウを更新するジョブ権限](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-security.html#job-rights-update-reserved-named-shadow)。詳細については、「[セキュリティの準備](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-security.html)」を参照してください。

## AWS IoT ジョブの置換パラメータ
<a name="substitution-parameters"></a>

置換パラメータは、 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 コマンドを使用して単一パッケージデプロイ用のジョブまたはジョブテンプレートを作成する場合、パッケージバージョンの*バージョン ARN* は `CreateJob` および `DescribeJob` の `destinationPackageVersions` パラメータで表されます。
+ **ソフトウェアパッケージバージョンのすべての属性**
  + ジョブドキュメントでソフトウェアパッケージバージョン置換パラメータのすべての属性を使用するには、次の例を参照してください。`${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`
  + この属性は、デバイスがセキュリティ対策として必要とするコード署名値を提供します。詳細については、「[ジョブのコード署名](https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html#create-manage-jobs-code-signing)」を参照してください。**注:** この属性は一例であり、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` など、パッケージバージョンの属性の詳細については、「[デプロイ用のジョブドキュメントとパッケージバージョンの準備](#preparing-to-deploy)」を参照してください。

で 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 ジョブ、ジョブドキュメントの作成、ジョブのデプロイの詳細については、[「ジョブ](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html)」を参照してください。

## デプロイ用のジョブドキュメントとパッケージバージョンの準備
<a name="preparing-to-deploy"></a>

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

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

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

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

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

  ジョブドキュメントの詳細については、「[基本概念](key-concepts-jobs.md#basic-concepts-jobs)」を参照してください。

  `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 バケットに同じファイルの複数のオブジェクトバージョンを保存するには、バケットでバージョニングを有効にする必要があります。詳細については、「[バケットでのバージョニングの有効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)」を参照してください。

  `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](https://amazonaws.com/iot/latest/apireference/API_CreatePackageVersion.html)」および「[UpdatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html)」を参照してください。

  新しいパッケージバージョンを作成するときに 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](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) API オペレーションを発行して公開します。その後、 AWS IoT コンソールから、または [CreateJob](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJob.html) API オペレーションを発行してジョブを作成するときに、パッケージバージョンを参照できます。

## デプロイ時のパッケージとバージョンの命名
<a name="naming-package-versions"></a>

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

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

## モノの AWS IoT 動的グループによるジョブのターゲット設定
<a name="jobs-and-dynamic-groups"></a>

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

## 予約済みの名前付きシャドウとパッケージバージョン
<a name="reserved-shadow-and-package-versions"></a>

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

次のような状況では、パッケージバージョンをモノの予約済みの名前付きシャドウに手動で関連付けるか、更新することを選択できます。
+ インストールされたパッケージバージョンを関連付け AWS IoT Core ずに、モノを に登録します。
+ AWS IoT ジョブは、モノの予約済み名前付きシャドウを更新するように設定されていません。
+ 社内プロセスを使用してパッケージバージョンをフリートにディスパッチすると、そのプロセスは完了 AWS IoT Core しても更新されません。

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

コンソールまたは [https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html) API オペレーションを使用して、モノの予約済みの名前付きシャドウ (`$package`) にパッケージバージョンを追加または更新できます。詳細については、[「 AWS IoT モノへのパッケージバージョンの関連付け](https://docs.aws.amazon.com/iot/latest/developerguide/associating-package-version.html)」を参照してください。

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

## ソフトウェアパッケージとそのパッケージバージョンのアンインストール
<a name="uninstalling-packages-and-versions"></a>

`$null` は、 AWS IoT Jobs サービスに、デバイスの予約済み名前付きシャドウ から既存のソフトウェアパッケージとパッケージバージョンを削除するように求める予約済みプレースホルダーです`$package`。詳細については、「[予約済みの名前付きシャドウ](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#reserved-named-shadow)」を参照してください。

この機能を使用するには、[destinationPackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateJobTemplate.html#iot-CreateJobTemplate-request-destinationPackageVersions) 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"]
```