

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

# アセットとモデルを更新する
<a name="update-assets-and-models"></a>

のアセット、アセットモデル、コンポーネントモデル、インターフェイスを更新 AWS IoT SiteWise して、名前と定義を変更できます。これらの更新オペレーションは非同期であり、伝達に時間がかかります AWS IoT SiteWise。追加の変更を行う前に、アセットまたはアセットモデルのステータスを確認します。更新されたアセットまたはモデルを引き続き使用するには、変更が反映されるまで待機する必要があります。

**Topics**
+ [でアセットを更新する AWS IoT SiteWise](update-assets.md)
+ [アセットモデル、コンポーネントモデル、インターフェイスを更新する](update-asset-models.md)
+ [カスタム複合モデルを更新する (コンポーネント)](update-custom-composite-models.md)
+ [アセットモデル書き込みの楽観的ロック](opt-locking-for-model.md)

# でアセットを更新する AWS IoT SiteWise
<a name="update-assets"></a>

 AWS IoT SiteWise コンソールまたは API を使用して、アセットの名前を更新できます。

アセットを更新すると、変更が反映されるまで、アセットの状態は `UPDATING` になります。詳細については、「[アセットおよびモデルの状態](asset-and-model-states.md)」を参照してください。

**Topics**
+ [アセットを更新する (コンソール)](#update-asset-console)
+ [アセットを更新する (AWS CLI)](#update-asset-cli)

## アセットを更新する (コンソール)
<a name="update-asset-console"></a>

 AWS IoT SiteWise コンソールを使用してアセットの詳細を更新できます。

**アセットを更新するには (コンソール)**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise コンソール](https://console.aws.amazon.com/iotsitewise/)に移動します。

1. <a name="sitewise-choose-assets"></a>ナビゲーションペインで [**Assets (アセット) **] を選択します。

1. 更新するアセットを選択します。
**ヒント**  <a name="sitewise-expand-asset-hierarchy"></a>
矢印アイコンを選択して、アセット階層を展開してアセットを検索できます。

1. **[編集]** を選択します。

1. アセットの [**名前**] を更新します。

1. (オプション) このページで、アセットのその他の情報を更新します。詳細については次を参照してください:
   + [のデータストリームを管理する AWS IoT SiteWise](manage-data-streams.md)
   + [属性値を更新する](update-attribute-values.md)
   + [他の AWS サービスとやり取りする](interact-with-other-services.md)

1. **[保存]** を選択します。

## アセットを更新する (AWS CLI)
<a name="update-asset-cli"></a>

 AWS Command Line Interface (AWS CLI) を使用して、アセットの名前を更新できます。

アセットを更新するには、[UpdateAsset](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAsset.html) オペレーションを使用します。以下のパラメータを指定します。
+ `assetId` – アセットの ID。これは UUID 形式の実際の ID です。または、ある場合は `externalId:myExternalId` です。詳細については、AWS IoT SiteWise  ユーザーガイドの [外部 ID を持つリファレンスオブジェクト](object-ids.md#external-id-references)を参照してください。
+ `assetName` - アセットの新しい名前。

**アセットの名前を更新するには (AWS CLI)**
+ アセットの名前を更新するには、次のコマンドを実行します。*asset-id* をアセットの ID または外部 ID に置き換えます。*asset-name* をアセットの新しい名前で更新します。

  ```
  aws iotsitewise update-asset \
    --asset-id asset-id \
    --asset-name asset-name
  ```

# アセットモデル、コンポーネントモデル、インターフェイスを更新する
<a name="update-asset-models"></a>

 AWS IoT SiteWise コンソールまたは API を使用して、アセットモデル、コンポーネントモデル、またはインターフェイスを更新します。

既存のプロパティのタイプまたはデータ型、あるいは既存のメトリックのウィンドウは変更できません。また、モデルのタイプをアセットモデルからコンポーネントモデルやインターフェイス、またはその逆に変更することはできません。

**重要**  
アセットモデルまたはコンポーネントモデルからプロパティを削除すると、 はそのプロパティの以前のデータをすべて AWS IoT SiteWise 削除します。コンポーネントモデルの場合、これは**そのコンポーネントモデルを使用するすべてのアセットモデル**に影響するため、変更がどの程度の範囲に適用される可能性があるかを理解するように特に注意してください。
アセットモデルから階層定義を削除すると、 はその階層内のすべてのアセットの関連付け AWS IoT SiteWise を解除します。

アセットモデルを更新すると、基になるモデルに加えた変更がそのモデルに基づくすべてのアセットに反映されます。変更が反映されるまで、各アセットには `UPDATING` 状態になります。それらのアセットを操作する前に、それらが `ACTIVE` 状態に戻るまで待機する必要があります。この間、更新されたアセットモデルのステータスは `PROPAGATING` になります。

コンポーネントモデルを更新すると、そのコンポーネントモデルを組み込んだすべてのアセットモデルに変更が反映されます。コンポーネントモデルの変更が伝播されるまで、影響を受ける各アセットモデルは `UPDATING` 状態になり、その後、`PROPAGATING` になり、前の段落で説明したように、関連するアセットを更新します。それらのアセットを操作する前に、それらが `ACTIVE` 状態に戻るまで待機する必要があります。この間、更新されたコンポーネントモデルのステータスは `PROPAGATING` になります。

詳細については、「[アセットおよびモデルの状態](asset-and-model-states.md)」を参照してください。

**Topics**
+ [アセットモデル、コンポーネントモデル、またはインターフェイスの更新 (コンソール)](#update-asset-model-console)
+ [アセットモデル、コンポーネントモデル、またはインターフェイスを更新する (AWS CLI)](#update-asset-model-cli)

## アセットモデル、コンポーネントモデル、またはインターフェイスの更新 (コンソール)
<a name="update-asset-model-console"></a>

 AWS IoT SiteWise コンソールを使用して、アセットモデル、コンポーネントモデル、またはインターフェイスを更新できます。

**アセットモデル、コンポーネントモデル、またはインターフェイスを更新するには (コンソール)**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise コンソール](https://console.aws.amazon.com/iotsitewise/)に移動します。

1. <a name="sitewise-choose-models"></a>ナビゲーションペインで、[**モデル**] を選択します。

1. 更新するアセットモデル、コンポーネントモデル、またはインターフェイスを選択します。

1. **[編集]** を選択します。

1. [**モデルの編集**] ページで、次のいずれかの操作を行います。
   + [**モデルの詳細**] で、モデルの [**名前**] を変更します。
   + 任意の [**属性定義**] を変更します。既存の属性の [**データ型**] は変更できません。詳細については、「[静的データ (属性) を定義する](attributes.md)」を参照してください。
   + [**測定の定義**] を変更します。既存の測定値の [**データ型**] は変更できません。詳細については、「[機器からのデータストリームを定義する (測定値)](measurements.md)」を参照してください。
   + 任意の [**定義を変換する**] を変更します。詳細については、「[データを変換する (変換)](transforms.md)」を参照してください。
   + [**メトリクスの定義**] を変更します。既存のメトリクスの [**時間間隔**] は変更できません。詳細については、「[プロパティおよびその他のアセットからのデータを集計する (メトリクス)](metrics.md)」を参照してください。
   + (アセットモデルのみ) 任意の **[階層の定義]** を変更します。既存の階層の [**階層モデル**] を変更することはできません。詳細については、「[アセットモデルの階層を定義する](define-asset-hierarchies.md)」を参照してください。

1. **[保存]** を選択します。

**注記**  
 最後に **[モデルを編集する]** ページを開いてから別のユーザーがアセットモデルを正常に更新した場合、コンソールで行われた更新リクエストは拒否されます。コンソールは、**[モデルを編集する]** ページを **[最新の状態に更新]** して、更新されたモデルを読み込むするようにユーザーを促します。更新を再度行い、保存を再試行する必要があります。詳細については、「[アセットモデル書き込みの楽観的ロック](opt-locking-for-model.md)」を参照してください。

## アセットモデル、コンポーネントモデル、またはインターフェイスを更新する (AWS CLI)
<a name="update-asset-model-cli"></a>

 AWS Command Line Interface (AWS CLI) を使用して、アセットモデル、コンポーネントモデル、またはインターフェイスを更新します。

[UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) API を使用して、アセットモデル、コンポーネントモデル、またはインターフェイスの名前、説明、プロパティを更新します。アセットモデルの場合のみ、階層を更新できます。インターフェイスでは、プロパティと階層を更新できます。以下のパラメータを指定します。
+ `assetModelId` – アセットの ID。これは UUID 形式の実際の ID です。または、ある場合は `externalId:myExternalId` です。詳細については、AWS IoT SiteWise  ユーザーガイドの [外部 ID を持つリファレンスオブジェクト](object-ids.md#external-id-references)を参照してください。

ペイロードで更新されたアセットモデルを指定します。アセットモデルまたはコンポーネントモデルの予想される形式については、「[でアセットモデルを作成する AWS IoT SiteWise](create-asset-models.md)」を参照してください。

**警告**  
[UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) API は、ペイロードで指定したモデルによって既存のモデルを上書きします。モデルのプロパティまたは階層を削除しないようにするには、更新されたアセットモデルのペイロードに ID と定義を含める必要があります。モデルの既存の構造をクエリする方法については、「[DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) オペレーション」を参照してください。

**注記**  
次の手順では、タイプ `AWS/ALARM` の複合モデルのみを更新できます。`CUSTOM` 複合モデルを更新する場合は、代わりに [UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html) を使用します。詳細については、「[カスタム複合モデルを更新する (コンポーネント)](update-custom-composite-models.md)」を参照してください。

**アセットモデルまたはコンポーネントモデルを更新するには (AWS CLI)**

1. 次のコマンドを実行して、既存のアセットモデル定義を取得します。*asset-model-id* を、更新するアセットモデルまたはコンポーネントモデルの ID または外部 ID に置き換えます。

   ```
   aws iotsitewise describe-asset-model --asset-model-id asset-model-id
   ```

   上記のコマンドは、モデルの最新バージョンに対応するモデル定義を返します。

    アセットモデルが `FAILED` 状態にあるユースケースでは、アクティブなバージョンに対応する有効なモデル定義を取得して、更新リクエストを構築します。詳細については、「[アセットモデルのバージョン](model-active-version.md)」を参照してください。次のコマンドを実行して、アクティブなモデル定義を取得します。

   ```
   aws iotsitewise describe-asset-model --asset-model-id asset-model-id --asset-model-version ACTIVE 
   ```

   このオペレーションは、モデルの詳細を含むレスポンスを返します。このレスポンスには以下の構造が含まれます。

   ```
   {
       "assetModelId": "String",
       "assetModelArn": "String",
       "assetModelName": "String",
       "assetModelDescription": "String",
       "assetModelProperties": Array of AssetModelProperty,
       "assetModelHierarchies": Array of AssetModelHierarchyDefinition,
       "assetModelCompositeModels": Array of AssetModelCompositeModel,
       "assetModelCompositeModelSummaries": Array of AssetModelCompositeModelSummary,
       "assetModelCreationDate": "String",
       "assetModelLastUpdateDate": "String",
       "assetModelStatus": {
         "state": "String",
         "error": {
           "code": "String",
           "message": "String"
         },
       "assetModelType": "String"
       },
       "assetModelVersion": "String",
       "eTag": "String"
   }
   ```

   詳細については、「[DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) オペレーション」を参照してください。

1. `update-asset-model.json` という名前のファイルを作成し、前のコマンドのレスポンスをファイルにコピーします。

1. `update-asset-model.json` の JSON オブジェクトから次のキーと値のペアを削除します。
   + `assetModelId`
   + `assetModelArn`
   + `assetModelCompositeModelSummaries`
   + `assetModelCreationDate`
   + `assetModelLastUpdateDate`
   + `assetModelStatus`
   + `assetModelType`
   + `assetModelVersion`
   + `eTag`

   [UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html) オペレーションでは、次の構造を持つペイロードが必要です。

   ```
   {
     "assetModelName": "String",
     "assetModelDescription": "String",
     "assetModelProperties": Array of AssetModelProperty,
     "assetModelHierarchies": Array of AssetModelHierarchyDefinition,
     "assetModelCompositeModels": Array of AssetModelCompositeModel
   }
   ```

1. `update-asset-model.json` で、次のいずれかを行ってください。
   + アセットモデルの名前を変更します (`assetModelName`)。
   + アセットモデルの説明を変更、追加、または削除します (`assetModelDescription`)。
   + アセットモデルのプロパティを変更、追加、または削除します (`assetModelProperties`)。既存のプロパティの `dataType`、または既存のメトリクスの `window` を変更することはできません。詳細については、「[データのプロパティを定義する](asset-properties.md)」を参照してください。
   + アセットモデルの階層を変更、追加、または削除します (`assetModelHierarchies`)。既存の階層の `childAssetModelId` は変更できません。詳細については、「[アセットモデルの階層を定義する](define-asset-hierarchies.md)」を参照してください。
   + アセットモデルのタイプ `AWS/ALARM` (`assetModelCompositeModels`) の複合モデルを変更、追加、または削除します。アラームは、他のプロパティをモニタリングし、機器やプロセスに注意が必要な時期を特定することができます。各アラーム定義は、アラームが使用する一連のプロパティを標準化した複合モデルです。詳細については、「[でアラームを使用してデータをモニタリングする AWS IoT SiteWise](industrial-alarms.md)」および「[でアセットモデルにアラームを定義する AWS IoT SiteWise](define-alarms.md)」を参照してください。

1. 次のコマンドを実行して、`update-asset-model.json` に保存されている定義でアセットモデルを更新します。*asset-model-id* をアセットモデルの ID に置き換えます。

   ```
   aws iotsitewise update-asset-model \
     --asset-model-id asset-model-id \
     --cli-input-json file://model-payload.json
   ```

**重要**  
 複数のユーザーがアセットモデルを同時に更新すると、ユーザーの変更が別のユーザーによって誤って上書きされる可能性があります。これを防ぐには、条件付き更新リクエストを定義する必要があります。「[アセットモデル書き込みの楽観的ロック](opt-locking-for-model.md)」を参照してください。

# カスタム複合モデルを更新する (コンポーネント)
<a name="update-custom-composite-models"></a>

 AWS IoT SiteWise API を使用してカスタム複合モデルを更新するか、 AWS IoT SiteWise コンソールを使用してコンポーネントを更新できます。

**Topics**
+ [コンポーネントを更新する (コンソール)](#update-custom-composite-model-console)
+ [カスタム複合モデルを更新する (AWS CLI)](#update-custom-composite-model-cli)

## コンポーネントを更新する (コンソール)
<a name="update-custom-composite-model-console"></a>

 AWS IoT SiteWise コンソールを使用してコンポーネントを更新できます。

**コンポーネントを更新するには (コンソール)**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise コンソール](https://console.aws.amazon.com/iotsitewise/)に移動します。

1. <a name="sitewise-choose-models"></a>ナビゲーションペインで、[**モデル**] を選択します。

1. コンポーネントがあるアセットモデルを選択します。

1. **[プロパティ]** タブで、**[コンポーネント]** を選択します。

1. 更新するコンポーネントを選択します。

1. **[編集]** を選択します。

1. **[コンポーネントを編集]** ページで、次のいずれかの操作を行います。
   + [**モデルの詳細**] で、モデルの [**名前**] を変更します。
   + 任意の [**属性定義**] を変更します。既存の属性の [**データ型**] は変更できません。詳細については、「[静的データ (属性) を定義する](attributes.md)」を参照してください。
   + [**測定の定義**] を変更します。既存の測定値の [**データ型**] は変更できません。詳細については、「[機器からのデータストリームを定義する (測定値)](measurements.md)」を参照してください。
   + 任意の [**定義を変換する**] を変更します。詳細については、「[データを変換する (変換)](transforms.md)」を参照してください。
   + [**メトリクスの定義**] を変更します。既存のメトリクスの [**時間間隔**] は変更できません。詳細については、「[プロパティおよびその他のアセットからのデータを集計する (メトリクス)](metrics.md)」を参照してください。

1. **[保存]** を選択します。

## カスタム複合モデルを更新する (AWS CLI)
<a name="update-custom-composite-model-cli"></a>

 AWS Command Line Interface (AWS CLI) を使用して、カスタム複合モデルを更新します。

名前または説明を更新するには、[UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html) オペレーションを使用します。インラインカスタム複合モデルのみ、プロパティも更新できます。コンポーネントモデルベースのカスタム複合モデルのプロパティは、参照されるコンポーネントモデルが関連するプロパティを提供するため、更新できません。

**重要**  
カスタム複合モデルからプロパティを削除すると、 はそのプロパティの以前のデータをすべて AWS IoT SiteWise 削除します。既存のプロパティのタイプまたはデータ型は変更できません。  
既存の複合モデルプロパティを同じ `name` を持つ新しいプロパティに置き換えるには、以下を実行します。  
既存のプロパティ全体を削除して `UpdateAssetModelCompositeModel` リクエストを送信します。
新しいプロパティを含む 2 番目の `UpdateAssetModelCompositeModel` リクエストを送信します。新しいアセットプロパティは、前のアセットプロパティ`name`と同じ を持ち AWS IoT SiteWise 、新しい一意の を生成します`id`。

**カスタム複合モデルを更新するには (AWS CLI)**

1. 既存の複合モデル定義を取得するには、次のコマンドを実行します。*composite-model-id* を更新対象のカスタム複合モデルの ID または外部 ID に置き換え、 *asset-model-id* をカスタム複合モデルが関連付けられているアセットモデルに置き換えます。詳細については、「*AWS IoT SiteWise ユーザーガイド*」を参照してください。

   1. 以下のコマンドを実行します。

      ```
      aws iotsitewise describe-asset-model-composite-model \
      --asset-model-composite-model-id composite-model-id \
      --asset-model-id asset-model-id
      ```

   1.  上記のコマンドは、関連付けられたモデルの最新バージョンに対応する複合モデル定義を返します。アセットモデルが `FAILED` 状態にあるユースケースでは、アクティブなバージョンに対応する有効なモデル定義を取得して、更新リクエストを構築します。詳細については、「[アセットモデルのバージョン](model-active-version.md)」を参照してください。

   1. 次のコマンドを実行して、アクティブなモデル定義を取得します。

      ```
      aws iotsitewise describe-asset-model-composite-model \
      --asset-model-composite-model-id composite-model-id \
      --asset-model-id asset-model-id \
      --asset-model-version ACTIVE
      ```

   1. 詳細については、[DescribeAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModelCompositeModel.html) オペレーションを参照してください。

1. `update-custom-composite-model.json` という名前のファイルを作成し、前のコマンドのレスポンスをファイルにコピーします。

1. `update-custom-composite-model.json` の JSON オブジェクトから、以下のフィールドを除くすべてのキーと値のペアを削除します。
   + `assetModelCompositeModelName`
   + `assetModelCompositeModelDescription` (存在する場合)
   + `assetModelCompositeModelProperties` (存在する場合)

1. `update-custom-composite-model.json` で、次のいずれかを行ってください。
   + `assetModelCompositeModelName` の値を変更します。
   + `assetModelCompositeModelDescription` を追加または削除するか、その値を変更します。
   + インラインカスタム複合モデルのみ: `assetModelCompositeModelProperties` のアセットモデルのプロパティを変更、追加、または削除します。

   このファイルに必要な形式の詳細については、[UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html) のリクエスト構文を参照してください。

1. 次のコマンドを実行して、`update-custom-composite-model.json` に保存されている定義でカスタム複合モデルを更新します。*composite-model-id* を複合モデルの ID に、*asset-model-id* をその中のアセットモデルの ID に置き換えます。

   ```
   aws iotsitewise update-asset-model-composite-model \
   --asset-model-composite-model-id composite-model-id \
   --asset-model-id asset-model-id \
   --cli-input-json file://update-custom-composite-model.json
   ```

**重要**  
 複数のユーザーがアセットモデルを同時に更新すると、ユーザーの変更が別のユーザーによって誤って上書きされる可能性があります。これを防ぐには、条件付き更新リクエストを定義する必要があります。「[アセットモデル書き込みの楽観的ロック](opt-locking-for-model.md)」を参照してください。

# アセットモデル書き込みの楽観的ロック
<a name="opt-locking-for-model"></a>

 アセットモデルを更新する場合、ユーザーは以下を実行します。

1. 現在のアセットモデル定義を読みます。

1. 必要な変更を加えてアセットモデル定義を編集します。

1. アセットモデルを新しい定義で更新します。

 2 人のユーザーがモデルを更新するシナリオでは、次のようになる可能性があります。
+ ユーザー A はアセットモデル X 定義を読み込みます。
+ ユーザー B はアセットモデル X 定義を読み取って変更をコミットし、X の定義を変更します。
+ ユーザー A は、ユーザー B の変更を確認したり、組み込んだりせずに、アセットモデル X についてユーザー B によって行われた変更をコミットして上書きします。

 オプティミスティックロックは、上記のシナリオのような偶発的な上書きを防ぐために AWS IoT SiteWise で使用されるメカニズムです。楽観的ロックは、更新または削除されるアセットモデルの現在のバージョンが、 AWS IoT SiteWiseの現在のバージョンと同じであることを確認する戦略です。これにより、アセットモデルの書き込みが誤って更新されて上書きされないように保護されます。

楽観的ロックを使用して、アセットモデルの書き込みを実行するには、次の手順に従います。

**Topics**
+ [楽観的ロックを使用した、アセットモデルの書き込みの実行 (コンソール)](#opt-locking-for-model-console)
+ [楽観的ロックを使用したアセットモデルの書き込みの実行 (AWS CLI)](#opt-locking-for-model-cli)

## 楽観的ロックを使用した、アセットモデルの書き込みの実行 (コンソール)
<a name="opt-locking-for-model-console"></a>

次の手順では、コンソールでアセットモデルのアクティブバージョンに対して楽観的ロックを使用してアセットモデルの書き込みを実行する方法について説明します。

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise コンソール](https://console.aws.amazon.com/iotsitewise/)に移動します。

1. <a name="sitewise-choose-models"></a>ナビゲーションペインで、[**モデル**] を選択します。

1. 更新するアセットモデルまたはコンポーネントモデルを選択します。

1. **[編集]** を選択します。

1. **[モデルの編集]** ページで変更を加えます。

1. **[保存]** を選択します。
**注記**  
場合によっては、ユーザーがモデルの編集を開始してから、モデルに加えた編集を保存するまでの間に、1 つ以上のモデル更新が成功することがあります。  
ユーザーが誤って新しい成功した更新を上書きしないように、ユーザーの書き込みは拒否されます。コンソールは **[保存]** ボタンを無効にし、**[モデルの編集]** ページを更新するようにユーザーに求めます。ユーザーは、モデルの新しいアクティブバージョンを再度更新する必要があります。ユーザーは、以下の追加ステップを実行する必要があります。

1. **[更新]** を選択します。

1. ステップ 5 と 6 を再度実行します。

## 楽観的ロックを使用したアセットモデルの書き込みの実行 (AWS CLI)
<a name="opt-locking-for-model-cli"></a>

次の手順では、 AWS CLIで楽観的ロックを使用してアセットモデルの書き込みを行う方法について説明します。

1. **現在のモデル定義に関連付けられた ETag を取得する**

    `ETag` は、アセットモデルの新しい表現ごとに生成される一意のトークンです。[DescribeAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html) API を呼び出して、レスポンスから現在のアセットモデル定義と、関連付けられた `ETag` を取得します。

    同時更新中、ユーザーは成功した更新 (`ACTIVE` 状態のモデル) または失敗した更新 (`FAILED` 状態のモデル) を実行します。ユーザーが成功した更新を誤って上書きしないようにするには、[アセットモデルのバージョン](model-active-version.md) からアセットモデルのアクティブバージョンを取得し、`ETag` 値を取得する必要があります。

   次のコマンドを実行します。

   ```
   aws iotsitewise describe-asset-model --asset-model-id asset-model-id \
   --asset-model-version ACTIVE
   ```

    レスポンスは以下の構造を返します。

   ```
   {
     "assetModelId": "String",
     "assetModelArn": "String",
     "assetModelName": "String",
     ...
     "eTag": "String"
   }
   ```
**注記**  
 更新を上書きしないように、アセットモデルの最新バージョンとその `ETag` を取得する必要があります。

1. **書き込み条件を指定して、UPDATE および DELETE オペレーションを実行する**

   以下のアセットモデル API は、楽観的ロックをサポートしています。
   + [UpdateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html)
   + [DeleteAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DeleteAssetModel.html)
   + [CreateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModelCompositeModel.html)
   + [UpdateAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModelCompositeModel.html)
   + [DeleteAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DeleteAssetModelCompositeModel.html)
**注記**  
 下記のシナリオでは、`UpdateAssetModel` API をリファレンスとして使用します。条件は、上記のすべてのオペレーションに適用されます。

   下記のシナリオでは、同時実行制御要件に応じて異なる書き込み条件について説明します。
   +  成功した更新を上書きしないように、次のコマンドを実行します。最後の読み取りアクティブバージョン以降、新しいアクティブバージョンが存在してはいけません。`e-tag` を、アクティブバージョンの読み取りで使用される API オペレーションで返された `ETag` に置き換えます。

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --if-match e-tag \
       --match-for-version-type ACTIVE \
       --cli-input-json file://model-payload.json
     ```
   +  モデルの作成が失敗すると、`FAILED` 状態のため、アクティブバージョンはまだ存在しません。変更がコミットされるまでは、存在する新しいアクティブバージョンを上書きすることは可能です。最後の読み取り時にアクティブバージョンが存在しない場合、新しいアクティブバージョンを上書きしないように、次のコマンドを実行します。

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --if-none-match "*" \
       --match-for-version-type ACTIVE \
       --cli-input-json file://model-payload.json
     ```
   +  次のコマンドを実行して、成功または失敗した更新を上書きしないようにします。このコマンドは、最後の最新バージョンの読み取り以降に最新バージョンが作成されないようにする書き込み条件を定義します。`e-tag` を、アクティブバージョンの読み取りで使用される API オペレーションで返された `ETag` に置き換えます。

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --if-match eTag \
       --match-for-version-type LATEST \
       --cli-input-json file://model-payload.json
     ```

     書き込み条件が `FALSE` に評価された場合、書き込みリクエストは `PreconditionFailedException` で失敗します。