

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

# を使用した OTA 更新の作成 AWS CLI
<a name="ota-cli-workflow"></a>

を使用して OTA 更新 AWS CLI を作成する場合、次の操作を行います。

1. ファームウェアイメージにデジタル署名します。

1. デジタル署名されたファームウェアイメージのストリームを作成します。

1. OTA 更新ジョブを開始します。

## ファームウェアの更新にデジタル署名する
<a name="ota-sign-cli"></a>

を使用して OTA 更新 AWS CLI を実行する場合は、Code Signing for を使用するか AWS IoT、ファームウェア更新を自分で署名できます。Code Signing for でサポートされている暗号化署名アルゴリズムとハッシュアルゴリズムのリストについては AWS IoT、[SigningConfigurationOverrides](https://docs.aws.amazon.com/signer/latest/api/API_SigningConfigurationOverrides.html)」を参照してください。Code Signing for でサポートされていない暗号化アルゴリズムを使用する場合は AWS IoT、Amazon S3 にアップロードする前にファームウェアバイナリに署名する必要があります。

### Code Signing for を使用したファームウェアイメージの署名 AWS IoT
<a name="ota-sign-csfa"></a>

Code Signing for を使用してファームウェアイメージに署名するには AWS IoT、 [AWS SDKsまたはコマンドラインツール](https://aws.amazon.com/tools/)のいずれかを使用できます。Code Signing for の詳細については AWS IoT、[「Code Signing for AWS IoT](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html)」を参照してください。

コード署名ツールをインストールして設定したら、署名されていないファームウェアイメージを Amazon S3 バケットにコピーし、次の AWS CLI コマンドを使用してコード署名ジョブを開始します。**put-signing-profile** コマンドは、再利用可能なコード署名プロファイルを作成します。**start-signing-job** コマンドは、署名ジョブを開始します。

```
aws signer put-signing-profile \
    --profile-name your_profile_name \
    --signing-material certificateArn=arn:aws:acm::your-region:your-aws-account-id:certificate/your-certificate-id \
    --platform your-hardware-platform \
    --signing-parameters certname=your_certificate_path_on_device
```

```
aws signer start-signing-job \
    --source 's3={bucketName=your_s3_bucket,key=your_s3_object_key,version=your_s3_object_version_id}' \
    --destination 's3={bucketName=your_destination_bucket}' \
    --profile-name your_profile_name
```

**注記**  
*your-source-bucket-name* および *your-destination-bucket-name* は、同じ Amazon S3 バケットの名前に置き換えることができます。

これらは **put-signing-profile** および **start-signing-job** コマンドのパラメータです。

**`source`**  
S3 バケット内の符号なしファームウェアの場所を指定します。  
+ `bucketName`: S3 バケットの名前。
+ `key`: S3 バケット内のファームウェアのキー (ファイル名)。
+ `version`: S3 バケット内のファームウェアの S3 バージョン。これはファームウェアのバージョンとは異なります。ファームウェアのバージョンは、Amazon S3 コンソールを参照し、バケットを選択して、ページの上部にある **[Versions]** (バージョン) の横にある **[Show]** (表示) を選択すると表示されます。

**`destination`**  
S3 バケット内の署名付きファームウェアがコピーされるデバイスの送信先。このパラメータの形式は、`source` パラメータと同じです。

**`signing-material`**  
コード署名証明書の ARN。この ARN は、証明書を ACM にインポートするときに生成されます。

**`signing-parameters`**  
署名のためのキーと値のペアのマップ。これらには、署名の際に使用する情報が含まれます。  
このパラメータは、Code Signing for AWS IoTによる OTA の更新への署名で、コード署名プロファイルを作成するときに必要になります。

**`platform`**  
OTA 更新を配布するハードウェアプラットフォームの `platformId`。  
使用可能なプラットフォームとそれらの `platformId` の値のリストを表示するには、`aws signer list-signing-platforms` コマンドを使用します。

署名ジョブが開始され、署名済みファームウェアイメージがコピー先の Amazon S3 バケットに書き込まれます。署名済みファームウェアイメージのファイル名は GUID です。ストリームを作成するときは、このファイル名が必要です。このファイル名は、Amazon S3 コンソールを参照し、バケットを選択すると表示されます。GUID ファイル名のファイルが表示されない場合は、ブラウザを更新してください。

このコマンドは、ジョブの ARN とジョブ ID を表示します。これらの値は後で必要になります。Code Signing for の詳細については AWS IoT、[「Code Signing for AWS IoT](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html)」を参照してください。

### 手動でファームウェアイメージに署名する
<a name="ota-sign-manual"></a>

ファームウェアイメージにデジタル署名し、署名済みファームウェアイメージを Amazon S3 バケットにアップロードします。

## ファームウェアの更新のストリームを作成する
<a name="ota-stream"></a>

ストリームは、デバイスによって消費されるデータへの抽象インターフェイスです。ストリームは、異なる場所または異なるクラウドベースのサービスに保存されているデータにアクセスすることの複雑さを隠すことができます。OTA 更新マネージャーサービスを使用すると、Amazon S3 のさまざまな場所に保存されている複数のデータを使用して、OTA 更新を実行できます。

 AWS IoT OTA 更新を作成するときに、署名付きファームウェア更新を含むストリームを作成することもできます。署名済みファームウェアイメージを識別する JSON ファイル (`stream.json`) を作成します。JSON ファイルには次の内容が含まれています。

```
[
  {
    "fileId":"your_file_id",
    "s3Location":{
      "bucket":"your_bucket_name",
      "key":"your_s3_object_key"
    }
  }   
]
```

これらは JSON ファイル内の属性です。

**`fileId`**  
ファームウェアイメージを識別する 0〜255 の任意の整数。

**`s3Location`**  
ファームウェアがストリーミングするためのバケットとキー。    
**`bucket`**  
署名されていないファームウェアイメージが格納されている Amazon S3 バケット。  
**`key`**  
Amazon S3 バケット内の署名済みファームウェアイメージのファイル名。バケットの内容を調べることによって、Amazon S3 コンソールでこの値を見つけることができます。  
Code Signing for を使用している場合 AWS IoT、ファイル名は Code Signing for によって生成された GUID です AWS IoT。

**create-stream** AWS CLI コマンドを使用して、スキーマを作成します。

```
aws iot create-stream \
    --stream-id your_stream_id \
    --description your_description \
    --files file://stream.json \
    --role-arn your_role_arn
```

コマンドの引数は次のとおりです**create-stream** AWS CLI 。

**`stream-id`**  
ストリームを識別する任意の文字列。

**`description`**  
ストリームの説明 (省略可能)。

**`files`**  
ストリーミングするファームウェアイメージに関するデータを含む JSON ファイルへの 1 つ以上の参照。JSON ファイルには、次の属性が含まれている必要があります。    
**`fileId`**  
任意のファイル ID。  
**`s3Location`**  
署名済ファームウェアイメージが格納されているバケット名と署名済ファームウェアイメージのキー (ファイル名)。  
**`bucket`**  
署名済ファームウェアイメージが格納されている Amazon S3 バケット。  
**`key`**  
署名済ファームウェアイメージのキー (ファイル名)。  
Code Signing for を使用する場合 AWS IoT、このキーは GUID です。
次は、`stream.json` ファイルの例です。  

```
[
    {
        "fileId":123,
        "s3Location": {
            "bucket":"codesign-ota-bucket",
            "key":"48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6"
        }
    }
]
```

**`role-arn`**  
ファームウェアイメージが保存されている Amazon S3 バケットへのアクセス権も付与する [OTA サービスロール](create-service-role.md)。

署名付きファームウェアイメージの Amazon S3 オブジェクトキーを見つけるには、 **aws signer describe-signing-job --job-id *my-job-id*** コマンドを使用します。ここで、 `my-job-id`は **create-signing-job** AWS CLI コマンドによって表示されるジョブ ID です。**describe-signing-job** コマンドの出力には、署名済ファームウェアイメージのキーが含まれています。

```
... text deleted for brevity ...
  "signedObject": {
    "s3": {
      "bucketName": "ota-bucket",
      "key": "7309da2c-9111-48ac-8ee4-5a4262af4429"
    }
  }
... text deleted for brevity ...
```

## OTA 更新の作成
<a name="create-ota-update"></a>

**create-ota-update** AWS CLI コマンドを使用して OTA 更新ジョブを作成します。

**注記**  
OTA 更新のジョブ ID に個人を特定できる情報 (PII) を使用しないでください。個人を特定できる情報の例は以下のとおりです。  
名前
IP アドレス
E メールアドレス
ロケーション
銀行の情報
医療情報

```
aws iot  create-ota-update \
    --ota-update-id value \
    [--description value] \
    --targets value \
    [--protocols value] \
    [--target-selection value] \
    [--aws-job-executions-rollout-config value] \
    [--aws-job-presigned-url-config value] \
    [--aws-job-abort-config value] \
    [--aws-job-timeout-config value] \
    --files value \
    --role-arn value \
    [--additional-parameters value] \
    [--tags value]  \
    [--cli-input-json value] \
    [--generate-cli-skeleton]
```

 `cli-input-json` 形式

```
{
  "otaUpdateId": "string",
  "description": "string",
  "targets": [
    "string"
  ],
  "protocols": [
    "string"
  ],
  "targetSelection": "string",
  "awsJobExecutionsRolloutConfig": {
    "maximumPerMinute": "integer",
    "exponentialRate": {
      "baseRatePerMinute": "integer",
      "incrementFactor": "double",
      "rateIncreaseCriteria": {
        "numberOfNotifiedThings": "integer",
        "numberOfSucceededThings": "integer"
      }
    }
  },
  "awsJobPresignedUrlConfig": {
    "expiresInSec": "long"
  },
  "awsJobAbortConfig": {
    "abortCriteriaList": [
      {
        "failureType": "string",
        "action": "string",
        "thresholdPercentage": "double",
        "minNumberOfExecutedThings": "integer"
      }
    ]
  },
  "awsJobTimeoutConfig": {
    "inProgressTimeoutInMinutes": "long"
  },
  "files": [
    {
      "fileName": "string",
      "fileType": "integer",
      "fileVersion": "string",
      "fileLocation": {
        "stream": {
          "streamId": "string",
          "fileId": "integer"
        },
        "s3Location": {
          "bucket": "string",
          "key": "string",
          "version": "string"
        }
      },
      "codeSigning": {
        "awsSignerJobId": "string",
        "startSigningJobParameter": {
          "signingProfileParameter": {
            "certificateArn": "string",
            "platform": "string",
            "certificatePathOnDevice": "string"
          },
          "signingProfileName": "string",
          "destination": {
            "s3Destination": {
              "bucket": "string",
              "prefix": "string"
            }
          }
        },
        "customCodeSigning": {
          "signature": {
            "inlineDocument": "blob"
          },
          "certificateChain": {
            "certificateName": "string",
            "inlineDocument": "string"
          },
          "hashAlgorithm": "string",
          "signatureAlgorithm": "string"
        }
      },
      "attributes": {
        "string": "string"
      }
    }
  ],
  "roleArn": "string",
  "additionalParameters": {
    "string": "string"
  },
  "tags": [
    {
      "Key": "string",
      "Value": "string"
    }
  ]
}
```


**`cli-input-json` フィールド**  

| 名前 | 型 | 説明 | 
| --- | --- | --- | 
| `otaUpdateId` |  string  (最大: 128 最小: 1)  | 作成する OTA 更新の ID。 | 
| `description` |  string  (最大: 2028)  | OTA 更新の説明。 | 
| `targets` |  リスト  | OTA 更新を受信するターゲットデバイス。 | 
| `protocols` |  リスト  |  OTA 更新イメージの転送に使用されるプロトコル。有効な値は、[HTTP]、[MQTT]、[HTTP, MQTT] です。HTTP と MQTT の両方が指定されている場合、対象のデバイスはプロトコルを選ぶことができます。  | 
| `targetSelection` | string |  更新が継続して実行される (CONTINUOUS) か、ターゲットとして指定されたすべてのモノが更新を完了した後に完了する (SNAPSHOT) かどうかを指定します。CONTINUOUS の場合は、ターゲットで変更が検出されたときに､モノで更新を実行することもできます。たとえば、グループ内に元からあったすべてのモノによって更新が完了した後でも、そのモノがターゲットグループに追加されると､そのモノで更新が実行されます。有効な値: CONTINUOUS \$1 SNAPSHOT enum: CONTINUOUS \$1 SNAPSHOT  | 
| `awsJobExecutionsRolloutConfig` |  | OTA 更新のロールアウトのための設定。 | 
| `maximumPerMinute` |  integer  (最大: 1000 最小: 1)  | 1 分ごとに開始される OTA 更新ジョブの実行の最大数。 | 
| `exponentialRate` |  |  ジョブのロールアウトに対する増加レート。このパラメータによりジョブのロールアウトに対する指数レートの上昇を定義できます。  | 
| `baseRatePerMinute` |  integer  (最大: 1000 最小: 1)  |  保留中のジョブを 1 分間で通知する最小数 (ジョブのロールアウト開始時)。これは、ロールアウトの初期レートです。  | 
|   `rateIncreaseCriteria`  |   |  ジョブのロールアウトでレートの増加を開始する基準。 AWS IoT は、小数点以下 1 桁までサポートします (1.5 など、ただし 1.55 はサポートしません）。  | 
|   `numberOfNotifiedThings`  |  integer  (最小: 1)  |  この数のモノが通知されると、ロールアウトレートの上昇が開始します。  | 
|   `numberOfSucceededThings`  |  integer  (最小: 1)  |  この数のモノがジョブの実行時に成功すると、ロールアウトレートの上昇が開始します。  | 
| `awsJobPresignedUrlConfig` |  |  署名付き URL に関する構成情報。 | 
|   `expiresInSec`  |  long |  署名付き URL が有効である時間の長さ (秒) です。有効な値は 60 から 3600 で、規定値は 1800 秒です。署名付き URL は、ジョブドキュメントのリクエストを受信したときに生成されます。  | 
|   `awsJobAbortConfig`  |   |  ジョブの停止がいつどのように行われるかを決定する基準。 | 
|   `abortCriteriaList`  |  リスト  |  ジョブをいつどのように停止するかを決定する基準のリスト。 | 
|   `failureType`  |  string |  ジョブの停止を開始できるジョブ実行失敗のタイプ。  enum: FAILED \$1 REJECTED \$1 TIMED\$1OUT \$1 ALL  | 
|   `action`  |  string |  ジョブの停止を開始するために実行するジョブアクションのタイプ。  enum: CANCEL  | 
|   `minNumberOfExecutedThings`  |  integer  (最小: 1)  |  ジョブを停止する前に、ジョブ実行通知を受け取る必要があるモノの最小数。  | 
|   `awsJobTimeoutConfig`  |   |  各デバイスがジョブの実行を終了する必要のある時間を指定します。ジョブの実行ステータスが `IN_PROGRESS` に設定されると、タイマーが開始されます。タイマーが時間切れになるまでにジョブの実行ステータスが別の終了ステータスに設定されない場合は、自動的に `TIMED_OUT` に設定されます。  | 
|   `inProgressTimeoutInMinutes`  |  long |  このデバイスがこのジョブの実行を終了する必要のある時間を分単位で指定します。タイムアウト間隔は 1 分〜 7 日 (1 〜 10,080 分) の範囲で指定できます。進捗タイマーは更新できず、ジョブのすべての実行に適用されます。ジョブの実行がこの間隔より長時間、IN\$1PROGRESS ステータスのままになるたびに、ジョブの実行は失敗し、終了ステータス `TIMED_OUT` に切り替わります。  | 
|   `files`  |  リスト  |  OTA 更新によってストリーミングされるファイル。 | 
|   `fileName`  |  string |   ファイルの名前。 | 
|   `fileType`  |  integer  range- max:255 min:0  |  クラウドから受信したファイルの種類をデバイスで識別するために、ジョブドキュメントに含めることができる整数値。  | 
|   `fileVersion`  |  string |  ファイルのバージョン。 | 
|   `fileLocation`  |   |  更新されたファームウェアの場所。 | 
|   `stream`  |   |  OTA 更新を含むストリーム。 | 
|   `streamId`  |  string  (最大: 128 最小: 1)  |  ストリーム ID。 | 
|   `fileId`  |  integer  (最大: 255 最小: 0)  |  ストリームに関連付けられたファイルの ID。 | 
|   `s3Location`  |   |  S3 での更新されたファームウェアの場所。 | 
|   `bucket`  |  string  (最小: 1)  |  S3 バケット。 | 
|   `key`  |  string  (最小: 1)  |  S3 キー。 | 
|   `version`  |  string |  S3 バケットのバージョン。 | 
|   `codeSigning`  |   |  ファイルのコード署名方法。 | 
|   `awsSignerJobId`  |  string |  ファイルに署名するために作成された AWSSignerJob の ID。 | 
|   `startSigningJobParameter`  |   |  コード署名ジョブの説明。 | 
|   `signingProfileParameter`  |   |  コード署名プロファイルの説明。 | 
|   `certificateArn`  |  string |  証明書の ARN。 | 
|   `platform`  |  string |  デバイスのハードウェアプラットフォーム。 | 
|   `certificatePathOnDevice`  |  string |  デバイス上のコード署名証明書の場所。 | 
|   `signingProfileName`  |  string |  コード署名プロファイルの名前。 | 
|   `destination`  |   |  コード署名付きファイルを書き込む場所。 | 
|   `s3Destination`  |   |  S3 での更新されたファームウェアの場所の説明。 | 
|   `bucket`  |  string  (最小: 1)  |  更新されたファームウェアを含む S3 バケット。 | 
|   `prefix`  |  string |  S3 プレフィックス。 | 
|   `customCodeSigning`  |   |  ファイルにコードを署名するためのカスタムメソッド。 | 
|   `signature`  |   |  ファイルの署名。 | 
|   `inlineDocument`  |  blob |  コード署名の base64 でエンコードされたバイナリ表現。 | 
|   `certificateChain`  |   |  証明書チェーン｡ | 
|   `certificateName`  |  string |  証明書の名前 | 
|   `inlineDocument`  |  string |  署名証明書チェーンの base64 でエンコードされたバイナリ表現。 | 
|   `hashAlgorithm`  |  string |  ファイルに符号を付けるために使用されるハッシュアルゴリズム。 | 
|   `signatureAlgorithm`  |  string |  ファイルに符号を付けるために使用される署名アルゴリズム。 | 
|   `attributes`  |  マップ |  名前と属性のペアのリスト。 | 
|   `roleArn`  |  string  (最大: 2048 最小: 20)  |  OTA 更新ジョブを作成するための Amazon S3、 AWS IoT ジョブ、および AWS Code Signing リソース AWS IoT へのアクセスを許可する IAM ロール。 | 
|   `additionalParameters`  |  マップ |  名前と値のペアである追加の OTA 更新パラメータのリスト。 | 
|   `tags`  |  リスト  |  アップデートを管理するために使用できるメタデータ。 | 
|   `Key`  |  string  (最大: 128 最小: 1)  |  タグのキー。 | 
|   `Value`  |  string  (最大: 256 最小: 1)  |  タグの値。 | 

Output

```
{
  "otaUpdateId": "string",
  "awsIotJobId": "string",
  "otaUpdateArn": "string",
  "awsIotJobArn": "string",
  "otaUpdateStatus": "string"
}
```


**AWS CLI 出力フィールド**  

|  名前 |  型 |  説明 | 
| --- | --- | --- | 
|   `otaUpdateId`  |  string  (最大: 128 最小: 1)  |  OTA 更新 ID。 | 
|   `awsIotJobId`  |  string |  OTA 更新に関連付けられた AWS IoT ジョブ ID。 | 
|   `otaUpdateArn`  |  string |  OTA 更新 ARN。 | 
|   `awsIotJobArn`  |  string |  OTA 更新に関連付けられた AWS IoT ジョブ ARN。 | 
|   `otaUpdateStatus`  |  string |  OTA 更新のステータス｡  enum: CREATE\$1PENDING \$1 CREATE\$1IN\$1PROGRESS \$1 CREATE\$1COMPLETE \$1 CREATE\$1FAILED  | 

以下は、Code Signing を使用する **create-ota-update** コマンドに渡される JSON ファイルの例です AWS IoT。

```
[
  {
    "fileName": "firmware.bin",                
    "fileType": 1,
    "fileLocation": {
      "stream": {
        "streamId": "004",                         
        "fileId":123
      }                        
    },
    "codeSigning": {
      "awsSignerJobId": "48c67f3c-63bb-4f92-a98a-4ee0fbc2bef6"     
    }
  }
]
```

以下は、インラインファイルを使用してカスタムコード署名マテリアルを提供する **create-ota-update** AWS CLI コマンドに渡される JSON ファイルの例です。

```
[
  {
    "fileName": "firmware.bin",
    "fileType": 1,
    "fileLocation": {
      "stream": {
        "streamId": "004",
        "fileId": 123
      }
    },
    "codeSigning": {
      "customCodeSigning":{
        "signature":{
          "inlineDocument":"your_signature"
        },
        "certificateChain": {
          "certificateName": "your_certificate_name",
          "inlineDocument":"your_certificate_chain"
        },
        "hashAlgorithm":"your_hash_algorithm",
        "signatureAlgorithm":"your_signature_algorithm"
      }
    }
  }
]
```

以下は、FreeRTOS OTA がコード署名ジョブを開始し、コード署名プロファイルとストリームを作成できるようにする **create-ota-update** AWS CLI コマンドに渡される JSON ファイルの例です。

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "fileLocation": {
      "s3Location": {
        "bucket": "your_bucket_name",
        "key": "your_object_key",
        "version": "your_S3_object_version"
      }
    },
    "codeSigning":{
      "startSigningJobParameter":{
        "signingProfileName": "myTestProfile",
        "signingProfileParameter": {
          "certificateArn": "your_certificate_arn",
          "platform": "your_platform_id",
          "certificatePathOnDevice": "certificate_path"
        },
        "destination": {
          "s3Destination": {
            "bucket": "your_destination_bucket"
          }
        }
      }
    }  
  }
]
```

以下は、既存のプロファイルでコード署名ジョブを開始し、指定されたストリームを使用する OTA 更新を作成する **create-ota-update** AWS CLI コマンドに渡される JSON ファイルの例です。

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "fileLocation": {
      "s3Location": {
        "bucket": "your_s3_bucket_name",
        "key": "your_object_key",
        "version": "your_S3_object_version"
      }
    },
    "codeSigning":{
      "startSigningJobParameter":{
        "signingProfileName": "your_unique_profile_name",
        "destination": {
          "s3Destination": {
            "bucket": "your_destination_bucket"
          }
        }
      }
    }  
  }
]
```

以下は、FreeRTOS OTA が既存のコード署名ジョブ ID でストリームを作成できるようにする **create-ota-update** AWS CLI コマンドに渡される JSON ファイルの例です。

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "codeSigning":{
      "awsSignerJobId": "your_signer_job_id"
    }  
  }
]
```

以下は、OTA 更新を作成する **create-ota-update** AWS CLI コマンドに渡される JSON ファイルの例です。この更新では、指定された S3 オブジェクトからストリームが作成され、カスタムコード署名が使用されます。

```
[
  {
    "fileName": "your_firmware_path_on_device",
    "fileType": 1,
    "fileVersion": "1",
    "fileLocation": {
      "s3Location": {
        "bucket": "your_bucket_name",
        "key": "your_object_key",
        "version": "your_S3_object_version"
      }
    },
    "codeSigning":{
      "customCodeSigning": {
        "signature":{
          "inlineDocument":"your_signature"
        },
        "certificateChain": {
          "inlineDocument":"your_certificate_chain",
          "certificateName": "your_certificate_path_on_device"
        },
        "hashAlgorithm":"your_hash_algorithm",
        "signatureAlgorithm":"your_sig_algorithm"
      }
    }  
  }
]
```

## OTA 更新を一覧表示する
<a name="list-ota-updates"></a>

**list-ota-updates** AWS CLI コマンドを使用して、すべての OTA 更新のリストを取得できます。

```
aws iot list-ota-updates
```

コマンド **list-ota-updates** の出力は次のようになります。

```
{
  "otaUpdates": [
     
    {
      "otaUpdateId": "my_ota_update2",
      "otaUpdateArn": "arn:aws:iot:us-west-2:123456789012:otaupdate/my_ota_update2",
      "creationDate": 1522778769.042
    },
    {
      "otaUpdateId": "my_ota_update1",
      "otaUpdateArn": "arn:aws:iot:us-west-2:123456789012:otaupdate/my_ota_update1",
      "creationDate": 1522775938.956
    },
    {
      "otaUpdateId": "my_ota_update",
      "otaUpdateArn": "arn:aws:iot:us-west-2:123456789012:otaupdate/my_ota_update",
      "creationDate": 1522775151.031
    }
  ]
}
```

## OTA 更新に関する情報の取得
<a name="get-ota-updates"></a>

**get-ota-update** AWS CLI コマンドを使用して、OTA 更新の作成または削除ステータスを取得できます。

```
aws iot get-ota-update --ota-update-id your-ota-update-id
```

**get-ota-update** コマンドからの出力は以下のようになります。

```
{ 
    "otaUpdateInfo": { 
        "otaUpdateId": "ota-update-001", 
        "otaUpdateArn": "arn:aws:iot:region:123456789012:otaupdate/ota-update-001", 
        "creationDate": 1575414146.286, 
        "lastModifiedDate": 1575414149.091, 
        "targets": [ 
            "arn:aws:iot:region:123456789012:thing/myDevice" 
        ], 
        "protocols": [ "HTTP" ], 
        "awsJobExecutionsRolloutConfig": { 
            "maximumPerMinute": 0 
        }, 
        "awsJobPresignedUrlConfig": { 
            "expiresInSec": 1800 
        }, 
        "targetSelection": "SNAPSHOT", 
        "otaUpdateFiles": [ 
            { 
                "fileName": "my_firmware.bin", 
                "fileType": 1,
                "fileLocation": { 
                    "s3Location": { 
                        "bucket": "my-bucket", 
                        "key": "my_firmware.bin", 
                        "version": "AvP3bfJC9gyqnwoxPHuTqM5GWENt4iii" 
                    } 
                }, 
                "codeSigning": { 
                    "awsSignerJobId": "b7a55a54-fae5-4d3a-b589-97ed103737c2", 
                    "startSigningJobParameter": { 
                        "signingProfileParameter": {}, 
                        "signingProfileName": "my-profile-name", 
                        "destination": { 
                            "s3Destination": { 
                                "bucket": "some-ota-bucket", 
                                "prefix": "SignedImages/" 
                            } 
                        } 
                    }, 
                    "customCodeSigning": {} 
                } 
            } 
        ], 
        "otaUpdateStatus": "CREATE_COMPLETE", 
        "awsIotJobId": "AFR_OTA-ota-update-001", 
        "awsIotJobArn": "arn:aws:iot:region:123456789012:job/AFR_OTA-ota-update-001" 
    } 
}
```

`otaUpdateStatus` に戻される値には次のものがあります。

**`CREATE_PENDING`**  
OTA 更新の作成は保留中です。

**`CREATE_IN_PROGRESS`**  
OTA 更新が作成されています。

**`CREATE_COMPLETE`**  
OTA 更新が作成されました。

**`CREATE_FAILED`**  
OTA 更新の作成に失敗しました。

**`DELETE_IN_PROGRESS`**  
OTA 更新が削除中です。

**`DELETE_FAILED`**  
OTA 更新の削除に失敗しました。

**注記**  
OTA 更新の作成後にその実行ステータスを取得するには、**describe-job-execution** コマンドを使用する必要があります。詳細については、[ジョブ実行の説明](https://docs.aws.amazon.com/iot/latest/developerguide/manage-job-cli.html#describe-job-execution)を参照してください。

## OTA 関連データの削除
<a name="delete-ota-data"></a>

現在、 AWS IoT コンソールを使用してストリームや OTA 更新を削除することはできません。を使用して AWS CLI 、ストリーム、OTA 更新、および OTA 更新中に作成された AWS IoT ジョブを削除できます。

### OTA ストリームを削除する
<a name="delete-ota-stream"></a>

MQTT を使用する OTA 更新を作成する場合、コマンドラインまたは AWS IoT コンソールを使用してストリームを作成し、ファームウェアをチャンクに分割して MQTT 経由で送信できます。次の例に示すように、 **delete-stream** AWS CLI コマンドを使用してこのストリームを削除できます。

```
aws iot delete-stream --stream-id your_stream_id
```

### OTA ストリームの削除
<a name="delete-ota-update"></a>

OTA 更新の作成時、以下が作成されます。
+ OTA 更新ジョブデータベース内のエントリ。
+ 更新を実行する AWS IoT ジョブ。
+ 更新する各デバイスの AWS IoT ジョブ実行。

**delete-ota-update** コマンドは、OTA 更新ジョブデータベース内のエントリのみを削除します。 AWS IoT ジョブを削除するには、**delete-job** コマンドを使用する必要があります。

**delete-ota-update** コマンドを使用して、OTA 更新を削除します。

```
aws iot delete-ota-update --ota-update-id your_ota_update_id
```

**`ota-update-id`**  
削除する OTA 更新の ID。

**`delete-stream`**  
OTA 更新に関連付けられたストリームを削除します。

**`force-delete-aws-job`**  
OTA 更新に関連付けられた AWS IoT ジョブを削除します。このフラグが設定されておらず、ジョブが `In_Progress` 状態の場合、ジョブは削除されません。

### OTA 更新用に作成された IoT ジョブを削除する
<a name="delete-ota-job"></a>

FreeRTOS は、OTA 更新を作成するときに AWS IoT ジョブを作成します。ジョブの実行は、ジョブを処理するデバイスごとにも作成されます。**delete-job** AWS CLI コマンドを使用して、ジョブとそれに関連するジョブ実行を削除できます。

```
aws iot delete-job --job-id your-job-id --no-force
```

`no-force` パラメータは、終了状態のジョブ (COMPLETED または CANCELLED) のみを削除できるように指定します。`force` パラメータを渡すことによって、非ターミナルステータスにあるジョブを削除することができます。詳細については、[DeleteJob API](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJob.html) を参照してください。

**注記**  
ステータスが IN\$1PROGRESS のジョブを削除すると、デバイスの IN\$1PROGRESS であるジョブの実行が中断され、デバイスが非決定的な状態になる場合があります。削除されたジョブを実行している各デバイスが既知の状態に回復できることを確認します。

ジョブ用に作成されたジョブ実行の数およびその他の要素に応じて、ジョブの削除に時間がかかる場合があります。ジョブが削除されている間、そのステータスは DELETION\$1IN\$1PROGRESS です。ステータスがすでに DELETION\$1IN\$1PROGRESS のジョブを削除あるいはキャンセルしようとすると、エラーになります。

**delete-job-execution** を使用してジョブの実行を削除できます。いくらかのデバイスがジョブを処理できない場合、ジョブの実行を削除することをお勧めします。これにより、次の例に示すように、単一のデバイスのジョブ実行が削除されます。

```
aws iot delete-job-execution --job-id your-job-id --thing-name
                    your-thing-name --execution-number your-job-execution-number --no-force
```

**delete-job** AWS CLI コマンドと同様に、 `--force`パラメータを に渡**delete-job-execution**して、ジョブ実行を強制的に削除できます。詳細については、[DeleteJobExecution API](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteJobExecution.html) を参照してください。

**注記**  
ステータスが IN\$1PROGRESS のジョブの実行を削除すると、デバイスの IN\$1PROGRESS であるジョブの実行が中断され、デバイスが非決定的な状態になる場合があります。削除されたジョブを実行している各デバイスが既知の状態に回復できることを確認します。

OTA 更新デモアプリケーションを使用する方法の詳細については、「[無線通信経由更新デモアプリケーション](ota-demo.md)」を参照してください。