

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

# デプロイの作成
<a name="create-deployments"></a>

モノまたはモノグループをターゲットとするデプロイを作成できます。

デプロイを作成するときは、デプロイするソフトウェアコンポーネントと、デプロイジョブをターゲットデバイスにロールアウトする方法を設定します。デプロイは、AWS CLI に提供する JSON ファイルで定義できます。

デプロイターゲットによって、コンポーネントを実行するデバイスが決まります。1 つのコアデバイスにデプロイするには、モノを指定します。複数のコアデバイスにデプロイするには、これらのデバイスが含まれるモノグループを指定します。モノのグループを設定する方法についての詳細は、「AWS IoT デベロッパーガイド」の「[静的モノグループ](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html)」と「[動的モノグループ](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html)」を参照してください。

このセクションのステップに従って、ターゲットへのデプロイを作成します。デプロイがあるターゲット上で、ソフトウェアコンポーネントを更新する方法についての詳細は、「[展開の改訂](revise-deployments.md)」を参照してください。

**警告**  
[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) 動作では、コアデバイスからコンポーネントをアンインストールできます。コンポーネントが新しいデプロイではなく以前のデプロイに存在する場合、コアデバイスはそのコンポーネントをアンインストールします。コンポーネントのアンインストールを回避するには、まず [ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html) 動作を使用して、デプロイのターゲットに既存のデプロイがすでにあるかどうかを確認します。次に、[GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html) 動作を使用して、新しいデプロイを作成するときに、その既存のデプロイから開始するようにします。

**デプロイを作成するには (AWS CLI)**

1. `deployment.json` という名前のファイルを作成して、次の JSON オブジェクトをファイルにコピーします。{{targetArn}} をデプロイがターゲットとする AWS IoT モノまたはモノグループの ARN に置き換えます。モノおよびモノグループの ARN の形式は、次のとおりです。
   + モノ: `arn:aws:iot:{{region}}:{{account-id}}:thing/{{thingName}}`
   + モノのグループ: `arn:aws:iot:{{region}}:{{account-id}}:thinggroup/{{thingGroupName}}`

   ```
   {
     "targetArn": "{{targetArn}}"
   }
   ```

1. デプロイメント対象に、修正が必要な既存のデプロイメントがあるかどうかをチェックします。以下を行います:

   1. <a name="revise-deployment-list-deployments-intro"></a>次のコマンドを実行して、デプロイターゲットのデプロイを一覧表示します。{{targetArn}} をターゲット AWS IoT モノまたはモノグループの ARN に置き換えます。

      ```
      aws greengrassv2 list-deployments --target-arn {{targetArn}}
      ```

      レスポンスには、ターゲットの最新デプロイのリストが含まれています。レスポンスが空の場合は、ターゲットに既存のデプロイがありません。[Step 3](#create-deployment-define-name-step) はスキップできます。そうでない場合は、次のステップで使用するため、レスポンスから `deploymentId` をコピーします。
**注記**  <a name="revise-deployment-list-deployments-revision-note"></a>
ターゲットの最新リビジョン以外のデプロイを修正することもできます。`--history-filter ALL` 引数を指定して、ターゲットのすべてのデプロイを一覧表示します。次に、修正するデプロイの ID をコピーします。

   1. <a name="revise-deployment-get-deployment"></a>次のコマンドを実行して、デプロイの詳細を取得します。これらの詳細には、メタデータ、コンポーネント、ジョブ設定が含まれます。{{deploymentId}} を前のステップの ID に置き換えます。

      ```
      aws greengrassv2 get-deployment --deployment-id {{deploymentId}}
      ```

      レスポンスには、デプロイの詳細が含まれています。

   1. 前のコマンドのレスポンスにある次のキーと値のペアを `deployment.json` にコピーします。これらの値を、新しいデプロイに変更することができます。
      + `deploymentName` - デプロイの名前。
      + `components` - デプロイのコンポーネント。コンポーネントをアンインストールする場合は、このオブジェクトから削除してください。
      + `deploymentPolicies` - デプロイのポリシー。
      + `iotJobConfiguration` - デプロイのジョブ設定。
      + `tags` - デプロイのタグ。

1. <a name="create-deployment-define-name-step"></a>(オプション) デプロイの名前を定義します。{{deploymentName}} をデプロイの名前で置き換えます。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}"
   }
   ```

1. 各コンポーネントを追加して、ターゲットデバイスをデプロイします。そのためには、キーと値のペアを `components` オブジェクトに追加します。ここでのキーはコンポーネント名、値はそのコンポーネントの詳細が含まれるオブジェクトになります。追加する各コンポーネントに対して、次の詳細を指定します。
   + `version` - デプロイするコンポーネントのバージョン。
   + `configurationUpdate` - デプロイする[設定の更新](update-component-configurations.md)。更新とは、各ターゲットデバイス上のコンポーネントにある既存の設定、またはターゲットデバイス上に既存の設定がない場合はコンポーネントのデフォルト設定を変更するパッチ操作のことを指します。次の設定更新を指定できます。
     + 更新のリセット (`reset`) - (オプション) ターゲットデバイスのデフォルト値にリセットする設定値を定義する JSON ポインターのリスト。AWS IoT Greengrass Core ソフトウェアは、マージ更新を適用する前にリセット更新を適用します。詳細については、「[更新のリセット](update-component-configurations.md#reset-configuration-update)」を参照してください。
     + マージ更新 (`merge`) - (オプション) ターゲットデバイスにマージする設定値を定義する JSON ドキュメント。JSON ドキュメントは文字列としてシリアル化する必要があります。詳細については、「[マージの更新](update-component-configurations.md#merge-configuration-update)」を参照してください。
   + <a name="component-run-with-config"></a>`runWith` - (オプション) AWS IoT Greengrass Core ソフトウェアが、コアデバイス上でこのコンポーネントのプロセスを実行するために使用するシステムプロセスオプション。`runWith` オブジェクト内のパラメータを省略した場合、AWS IoT Greengrass Core ソフトウェアは [Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)で設定したデフォルト値を使用します。

     以下のいずれかのオプションを指定できます。
     + `posixUser` - Linux コアデバイスでこのコンポーネントを実行する際に使用する POSIX システムユーザーおよびオプションでグループ。ユーザーまたはグループを指定する場合は、各 Linux コアデバイス上に存在している必要があります。ユーザーとグループを `user:group` の形式に従ってコロン (`:`) で区切って指定します。グループはオプションです。グループを指定しなかった場合、AWS IoT Greengrass Core ソフトウェアは、ユーザーのプライマリグループを使用します。詳細については、「[コンポーネントを実行するユーザーを設定する](configure-greengrass-core-v2.md#configure-component-user)」を参照してください。
     + `windowsUser` – Windows コアデバイスでこのコンポーネントを実行する際に使用する Windows ユーザー。ユーザーは各 Windows コアデバイスに存在し、その名前とパスワードが LocalSystem アカウントの認証情報マネージャーインスタンスに格納されている必要があります。詳細については、「[コンポーネントを実行するユーザーを設定する](configure-greengrass-core-v2.md#configure-component-user)」を参照してください。

       この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.5.0 以降に利用できます。
     + `systemResourceLimits` - このコンポーネントのプロセスに適用されるシステムリソースの制限。システムリソースの制限を、ジェネリックおよびコンテナ化されていない Lambda コンポーネントプロセスに適用することができます。詳細については、「[コンポーネントのシステムリソース制限を設定する](configure-greengrass-core-v2.md#configure-component-system-resource-limits)」を参照してください。

       以下のいずれかのオプションを指定できます。
       + `cpus` – <a name="system-resource-limits-cpu-definition-this"></a>このコンポーネントのプロセスがコアデバイスで使用できる CPU 時間の最大量。コアデバイスの合計 CPU 時間は、デバイスの CPU コア数と同じです。例えば、4 つの CPU コアを持つコアデバイスの場合は、この値を `2` に設定することで、このコンポーネントのプロセスを各 CPU コアの 50% の使用率に制限することができます。CPU コアが 1 つのデバイスの場合は、この値を `0.25` に設定することで、このコンポーネントのプロセスを CPU の 25% の使用率に制限することができます。この値を CPU コア数よりも大きい値に設定すると、AWS IoT Greengrass Core ソフトウェアは、コンポーネントの CPU 使用率に制限をかけません。
       + `memory` – <a name="system-resource-limits-memory-definition-this"></a>このコンポーネントのプロセスがコアデバイスで使用できる RAM の最大量 (キロバイト単位)。

       この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.4.0 以降に利用できます。AWS IoT Greengrass は、現在 Windows コアデバイスにこの機能をサポートしていません。

      
**Example 基本設定更新の例**  

   次の `components` オブジェクト例は、`pythonVersion` という名前の設定パラメータを必要とするコンポーネントである `com.example.PythonRuntime` をデプロイするように指定しています。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.PythonRuntime": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"pythonVersion\":\"3.7\"}"
         }
       }
     }
   }
   ```  
**Example リセット更新とマージ更新による設定更新の例**  

   `com.example.IndustrialDashboard` は産業用ダッシュボードコンポーネントの一例です。次のデフォルト設定が設定されています。

   ```
   {
     "name": null,
     "mode": "REQUEST",
     "network": {
       "useHttps": true,
       "port": {
         "http": 80,
         "https": 443
       },
     },
     "tags": []
   }
   ```

   次の設定更新では、次の手順が指定されています。

   1. HTTPS 設定をデフォルト値 (`true`) にリセットする。

   1. 産業タグのリストを空のリストにリセットする。

   1. 2 つのボイラーの温度と圧力のデータストリームを識別する産業用タグのリストをマージする。

   ```
   {
     "reset": [
       "/network/useHttps",
       "/tags"
     ],
     "merge": {
       "tags": [
         "/boiler/1/temperature",
         "/boiler/1/pressure",
         "/boiler/2/temperature",
         "/boiler/2/pressure"
       ]
     }
   }
   ```

   以下の `components` オブジェクト例では、この産業用ダッシュボードコンポーネントと設定更新をデプロイするように指定しています。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     }
   }
   ```

1. (オプション) デプロイのデプロイポリシーを定義します。コアデバイスがデプロイを安全に適用できるタイミングや、コアデバイスがデプロイの適用に失敗した場合の対処方法を設定できます。そのためには、`deploymentPolicies` オブジェクトを `deployment.json` に追加し、以下のいずれかを実行します。

   1. (オプション) コンポーネント更新ポリシー (`componentUpdatePolicy`) を指定します。このポリシーは、コンポーネントをデプロイする準備が整うまで、コンポーネントの更新を延期できるかどうかを定義します。例えば、再起動して更新を適用する前に、リソースをクリーンアップしたり、重要なアクションを完了する必要がある場合などです。このポリシーは、コンポーネントが更新通知に対してレスポンスする必要がある時間枠も定義します。

      このポリシーは、以下のパラメータを使用するオブジェクトです。
      + `action` - (オプション) コンポーネントに通知し、更新の準備が整ったときに報告されるまで待機するかどうかを示します。次のオプションから選択します。
        + `NOTIFY_COMPONENTS` - デプロイは、コンポーネントを停止して更新する前に、各コンポーネントに通知します。コンポーネントは [SubscribeToComponentUpdates](ipc-component-lifecycle.md#ipc-operation-subscribetocomponentupdates) IPC 操作を使用して、これらの通知を受信することができます。
        + `SKIP_NOTIFY_COMPONENTS` - デプロイは、コンポーネントに通知せず、安全に更新できるまで待機しません。

        デフォルトは `NOTIFY_COMPONENTS` です。
      + `timeoutInSeconds` 各コンポーネントが [DeferComponentUpdate](ipc-component-lifecycle.md#ipc-operation-defercomponentupdate) IPC 操作による更新通知に応答する必要がある時間枠 (秒単位)。コンポーネントがこの時間内に応答しなかった場合、コアデバイスでデプロイが実行されます。

        デフォルトは 60 秒です。

   1. (オプション) 設定検証ポリシー (`configurationValidationPolicy`) を指定します。このポリシーは、各コンポーネントがデプロイからの設定更新を検証する必要がある期間を定義します。コンポーネントは [SubscribeToValidateConfigurationUpdates](ipc-component-configuration.md#ipc-operation-subscribetovalidateconfigurationupdates) IPC 操作を使用して、自身に対する設定更新の通知にサブスクライブすることができます。これにより、コンポーネントが [SendConfigurationValidityReport](ipc-component-configuration.md#ipc-operation-sendconfigurationvalidityreport) IPC 操作を使用して、設定更新が有効なものかどうかを AWS IoT Greengrass Core ソフトウェアに伝えられるようになります。設定更新が有効でない場合、デプロイは失敗します。

      のポリシーは、次のパラメータを使用するオブジェクトです。
      + `timeoutInSeconds` (オプション) 各コンポーネントが設定更新を検証する必要がある時間 (秒単位)。コンポーネントがこの時間内に応答しなかった場合、コアデバイスでデプロイが実行されます。

        デフォルトは 30 秒です。

   1. (オプション) 障害処理ポリシー (`failureHandlingPolicy`) を指定します。このポリシーは、デプロイが失敗した場合にデバイスをロールバックするかどうかを定義する文字列です。次のオプションから選択します。
      + `ROLLBACK` - コアデバイスでデプロイが失敗した場合、AWS IoT Greengrass Core ソフトウェアは、そのコアデバイスを以前の設定にロールバックします。
      + `DO_NOTHING` - コアデバイスでデプロイが失敗した場合、AWS IoT Greengrass Core ソフトウェアは、新しい設定を維持します。この場合、新しい設定が有効でない場合には、コンポーネントが壊れる可能性があります。

      デフォルトは `ROLLBACK` です。

   `deployment.json` でのデプロイは次の例のようになります。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     }
   }
   ```

1. (オプション) デプロイの停止、ロールアウト、タイムアウトの方法を定義します。AWS IoT Greengrass は AWS IoT Core ジョブを使用してコアデバイスにデプロイを送信するため、これらのオプションは AWS IoT Core ジョブ用の設定オプションと同じになります。詳細については、「AWS IoT デベロッパーガイド」の「[ジョブのロールアウトと中止設定](https://docs.aws.amazon.com/iot/latest/developerguide/job-rollout-abort.html)」を参照してください。

   ジョブオプションを定義するには、`iotJobConfiguration` オブジェクトを `deployment.json` に追加します。次に、設定するオプションを定義します。

   `deployment.json` でのデプロイは次の例のようになります。

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     },
     "iotJobConfiguration": {
       "abortConfig": {
         "criteriaList": [
           {
             "action": "CANCEL",
             "failureType": "ALL",
             "minNumberOfExecutedThings": 100,
             "thresholdPercentage": 5
           }
         ]
       },
       "jobExecutionsRolloutConfig": {
         "exponentialRate": {
           "baseRatePerMinute": 5,
           "incrementFactor": 2,
           "rateIncreaseCriteria": {
             "numberOfNotifiedThings": 10,
             "numberOfSucceededThings": 5
           }
         },
         "maximumPerMinute": 50
       },
       "timeoutConfig":  {
         "inProgressTimeoutInMinutes": 5
       }
     }
   }
   ```

1. (オプション) タグ (`tags`) をデプロイに追加します。詳細については、「[AWS IoT Greengrass Version 2 リソースにタグを付ける](tag-resources.md)」を参照してください。

1. 以下のコマンドを実行して、`deployment.json` からデプロイを作成します。

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>レスポンスには、このデプロイを識別する `deploymentId` が含まれます。デプロイ ID を使用して、デプロイのステータスを確認できます。詳細については、「[デプロイのステータスを確認する](check-deployment-status.md#check-cloud-deployment-status)」を参照してください。