

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

# デプロイの作成
<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)」を参照してください。

# コンポーネント設定の更新
<a name="update-component-configurations"></a>

コンポーネント設定は、各コンポーネントのパラメータを定義する JSON オブジェクトです。各コンポーネントの recipe は、コアデバイスにコンポーネントをデプロイするときに変更するデフォルト設定を定義します。

デプロイを作成するとき、各コンポーネントに適用する設定の更新を指定できます。設定の更新はパッチ操作であり、更新がコアデバイスに存在するコンポーネント設定を修正することを意味します。コアデバイスにコンポーネントがない場合、設定更新がそのデプロイのデフォルト設定を修正して適用します。

設定更新は、リセット更新とマージ更新を定義します。リセット更新は、デフォルトにリセットまたは削除する設定値を定義します。マージ更新は、コンポーネントに設定する新しい設定値を定義します。設定更新をデプロイすると、 AWS IoT Greengrass Core ソフトウェアはマージ更新の前にリセット更新を実行します。

コンポーネントは、デプロイする設定更新を検証できます。コンポーネントは、デプロイが設定を変更した際に通知を受信するようにサブスクライブして、サポートしていない設定を拒否できます。詳細については、「[コンポーネント設定とやり取り](ipc-component-configuration.md)」を参照してください。

**Topics**
+ [更新のリセット](#reset-configuration-update)
+ [マージの更新](#merge-configuration-update)
+ [例](#configuration-update-example)

## 更新のリセット
<a name="reset-configuration-update"></a>

リセット更新は、コアデバイスでデフォルトにリセットする設定値を定義します。設定値にデフォルト値がない場合、リセット更新がコンポーネントの設定からその値を削除します。これにより、無効な設定によって破損するコンポーネントを修正するうえで役立ちます。

JSON ポインタのリストを使用して、リセットする設定値を定義します。JSON ポインタはフォワードスラッシュ (`/`) で始まります。ネストされたコンポーネント設定の値を識別するには、フォワードスラッシュ (`/`) を使用して、設定の各レベルのキーを区切ります。詳細については、「[JSON ポインタの仕様](https://tools.ietf.org/html/rfc6901)」を参照してください。

**注記**  
リスト全体のみをデフォルト値にリセットできます。更新リセットを使用して、リストの個々の要素をリセットすることはできません。

コンポーネントの設定を全体的にデフォルト値にリセットするには、リセット更新として空の文字列を 1 つ指定します。

```
"reset": [""]
```

## マージの更新
<a name="merge-configuration-update"></a>

マージ更新は、コアのコンポーネント設定に挿入する設定値を定義します。マージ更新は、リセット更新で指定したパスの値をリセットした後に AWS IoT Greengrass Core ソフトウェアがマージする JSON オブジェクトです。 AWS CLI または AWS SDKs を使用する場合は、この JSON オブジェクトを文字列としてシリアル化する必要があります。

コンポーネントのデフォルト設定に存在しないキー値のペアをマージできます。同じキーの値とは異なるタイプのキー値のペアをマージすることもできます。古い値は新しい値により上書きされます。つまり、設定オブジェクトの構造を変更できます。

Null 値を空の文字列、リスト、オブジェクトとマージできます。

**注記**  
マージ更新は、リストに要素の挿入または追加する目的として使用することはできません。リスト全体を置き換え、あるいは各要素に一意のキーを持つオブジェクトを定義できます。  
<a name="configuration-value-type-note"></a>AWS IoT Greengrass は設定値に JSON を使用します。JSON は数値タイプを指定しますが、整数と浮動小数点数を区別しません。その結果、 AWS IoT Greengrassで設定値が浮動小数点数に変換されることがあります。コンポーネントが正しいデータタイプを使用することを確認するには、数値の設定値を文字列として定義することをお勧めします。次に、整数または浮動小数点としてコンポーネントでパースします。これにより、設定値が設定とコアデバイスに対して同じタイプであることを保証します。

### マージ更新で recipe 変数を使用する
<a name="merge-configuration-update-recipe-variables"></a>

この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.6.0 以降で利用できます。

Greengrass nucleus の [interpolateComponentConfiguration](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-interpolate-component-configuration) 設定オプションを `true` に設定したら、マージ更新で `component_dependency_name:configuration:json_pointer` recipe 変数以外の recipe 変数を使用できます。たとえば、マージ更新で `{iot:thingName}` recipe 変数を使用して、[プロセス間通信 (IPC) 認可ポリシー](interprocess-communication.md#ipc-authorization-policies)などのコンポーネント設定値にコアデバイスの AWS IoT モノの名前を含めることができます。

## 例
<a name="configuration-update-example"></a>

次の例では、次のデフォルト設定を持つダッシュボードコンポーネントの設定更新を示しています。このコンポーネントの例は、産業機器に関する情報を表示します。

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

### 産業用ダッシュボード コンポーネント recipe
<a name="w2ab1c24c25c22c16c17b7b1"></a>

------
#### [ JSON ]

```
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.IndustrialDashboard",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Displays information about industrial equipment.",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "name": null,
      "mode": "REQUEST",
      "network": {
        "useHttps": true,
        "port": {
          "http": 80,
          "https": 443
        },
      },
      "tags": []
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "Run": "python3 -u {artifacts:path}/industrial_dashboard.py"
      }
    },
    {
      "Platform": {
        "os": "windows"
      },
      "Lifecycle": {
        "Run": "py -3 -u {artifacts:path}/industrial_dashboard.py"
      }
    }
  ]
}
```

------
#### [ YAML ]

```
---
RecipeFormatVersion: '2020-01-25'
ComponentName: com.example.IndustrialDashboard
ComponentVersion: '1.0.0'
ComponentDescription: Displays information about industrial equipment.
ComponentPublisher: Amazon
ComponentConfiguration:
  DefaultConfiguration:
    name: null
    mode: REQUEST
    network:
      useHttps: true
      port:
        http: 80
        https: 443
    tags: []
Manifests:
  - Platform:
      os: linux
    Lifecycle:
      Run: |
        python3 -u {artifacts:path}/industrial_dashboard.py
  - Platform:
      os: windows
    Lifecycle:
      Run: |
        py -3 -u {artifacts:path}/industrial_dashboard.py
```

------

**Example 例 1: マージ更新**  
次の設定更新を適用するデプロイを作成します。この更新は、マージ更新を指定しますが、リセット更新は指定しません。この設定更新は、2 基のボイラーのデータで HTTP ポート 8080 にダッシュボードを表示するように、コンポーネントに指示します。    
**マージする設定**  

```
{
  "name": "Factory 2A",
  "network": {
    "useHttps": false,
    "port": {
      "http": 8080
    }
  },
  "tags": [
    "/boiler/1/temperature",
    "/boiler/1/pressure",
    "/boiler/2/temperature",
    "/boiler/2/pressure"
  ]
}
```
次のコマンドは、コアデバイスにデプロイを作成します。  

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment.json
```
`dashboard-deployment.json` ファイルには、次の JSON ドキュメントが含まれています。  

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.IndustrialDashboard": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {
        "merge": "{\"name\":\"Factory 2A\",\"network\":{\"useHttps\":false,\"port\":{\"http\":8080}},\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
      }
    }
  }
}
```
次の [Greengrass CLI](greengrass-cli-component.md) コマンドは、コアデバイスにローカルデプロイを作成します。  

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.IndustrialDashboard=1.0.0" \
  --update-config dashboard-configuration.json
```
`dashboard-configuration.json` ファイルには、次の JSON ドキュメントが含まれています。  

```
{
  "com.example.IndustrialDashboard": {
    "MERGE": {
      "name": "Factory 2A",
      "network": {
        "useHttps": false,
        "port": {
          "http": 8080
        }
      },
      "tags": [
        "/boiler/1/temperature",
        "/boiler/1/pressure",
        "/boiler/2/temperature",
        "/boiler/2/pressure"
      ]
    }
  }
}
```
この更新の後、ダッシュボードコンポーネントは次の設定になります:  

```
{
  "name": "Factory 2A",
  "mode": "REQUEST",
  "network": {
    "useHttps": false,
    "port": {
      "http": 8080,
      "https": 443
    }
  },
  "tags": [
    "/boiler/1/temperature",
    "/boiler/1/pressure",
    "/boiler/2/temperature",
    "/boiler/2/pressure"
  ]
}
```

**Example 例 2: 更新のリセットとマージ**  
次に、次の設定更新を適用するデプロイを作成します。この更新は、リセット更新とマージ更新を指定します。これらの更新は、デフォルトの HTTPS ポートに異なるボイラーのデータでダッシュボードを表示するように指定します。これらの更新は、前の例で示されている設定更新の結果となる設定を変更します。    
**パスのリセット**  

```
[
  "/network/useHttps",
  "/tags"
]
```  
**マージする設定**  

```
{
  "tags": [
    "/boiler/3/temperature",
    "/boiler/3/pressure",
    "/boiler/4/temperature",
    "/boiler/4/pressure"
  ]
}
```
次のコマンドは、コアデバイスにデプロイを作成します。  

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment2.json
```
`dashboard-deployment2.json` ファイルには、次の JSON ドキュメントが含まれています。  

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.IndustrialDashboard": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {
        "reset": [
          "/network/useHttps",
          "/tags"
        ],
        "merge": "{\"tags\":[\"/boiler/3/temperature\",\"/boiler/3/pressure\",\"/boiler/4/temperature\",\"/boiler/4/pressure\"]}"
      }
    }
  }
}
```
次の [Greengrass CLI](greengrass-cli-component.md) コマンドは、コアデバイスにローカルデプロイを作成します。  

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.IndustrialDashboard=1.0.0" \
  --update-config dashboard-configuration2.json
```
`dashboard-configuration2.json` ファイルには、次の JSON ドキュメントが含まれています。  

```
{
  "com.example.IndustrialDashboard": {
    "RESET": [
      "/network/useHttps",
      "/tags"
    ],
    "MERGE": {
      "tags": [
        "/boiler/3/temperature",
        "/boiler/3/pressure",
        "/boiler/4/temperature",
        "/boiler/4/pressure"
      ]
    }
  }
}
```
この更新の後、ダッシュボードコンポーネントは次の設定になります:  

```
{
  "name": "Factory 2A",
  "mode": "REQUEST",
  "network": {
    "useHttps": true,
    "port": {
      "http": 8080,
      "https": 443
    }
  },
  "tags": [
    "/boiler/3/temperature",
    "/boiler/3/pressure",
    "/boiler/4/temperature",
    "/boiler/4/pressure",
  ]
}
```