

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

# アセットモデル書き込みの楽観的ロック
<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` で失敗します。