アセットモデルの書き込みに対する楽観的ロック - AWS IoT SiteWise

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

アセットモデルの書き込みに対する楽観的ロック

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

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

  2. 必要な変更でアセットモデル定義を編集します。

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

2 人のユーザーがモデルを更新するシナリオでは、次のことが可能です。

  • ユーザー A はアセットモデル X 定義を読み取ります。

  • ユーザー B はアセットモデル X 定義を読み取り、変更をコミットして X の定義を変更します。

  • ユーザー A は、ユーザー B の変更を確認または組み込まずに、アセットモデル X に対してユーザー B によって行われた変更をコミットして上書きします。

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

オプティミスティックロックを使用してアセットモデルの書き込みを実行するには、次の手順に従います。

オプティミスティックロックを使用したアセットモデルの書き込みの実行 (コンソール)

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

  1. AWS IoT SiteWise コンソールに移動します。

  2. ナビゲーションペインで、[モデル] を選択します。

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

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

  5. モデルの編集ページで変更を加えます。

  6. [Save] を選択します。

    注記

    場合によっては、ユーザーがモデルの編集を開始し、編集した内容をモデルに保存するまでに、1 つ以上のモデル更新が成功することがあります。

    ユーザーが誤って成功した新しい更新を上書きしないように、ユーザーの書き込みは拒否されます。コンソールは保存ボタンを無効にし、モデルの編集ページを更新するようにユーザーに求めます。ユーザーは、モデルの新しいアクティブバージョンを再度更新する必要があります。ユーザーは、以下の追加ステップを実行する必要があります。

  7. [Refresh] (更新) を選択します。

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

オプティミスティックロックを使用したアセットモデルの書き込みの実行 (AWS CLI)

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

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

    ETag は、アセットモデルの新しい表現ごとに生成される一意のトークンです。DescribeAssetModel API を呼び出して、現在のアセットモデル定義を取得し、レスポンスETagから関連付けます。

    同時更新中、ユーザーは成功した更新 (モデルが ACTIVE状態) または失敗した更新 (モデルが FAILED状態) のいずれかを実行します。ユーザーが誤って正常な更新を上書きしないようにするには、 からアセットモデルのアクティブバージョンを取得しアセットモデルバージョン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するには、アセットモデルとその最新バージョンを取得する必要があります。

  2. 書き込み条件で UPDATEおよび DELETEオペレーションを実行する

    次のアセットモデルは、オプティミスティックロックAPIsをサポートしています。

    注記

    以下のシナリオでは、 をリファレンスUpdateAssetModelAPIとして使用します。条件は、上記のすべてのオペレーションに適用されます。

    以下のシナリオでは、同時実行制御要件に応じて異なる書き込み条件について説明します。

    • 成功した更新を上書きしないように、次のコマンドを実行します。最後の読み取りアクティブバージョン以降、新しいアクティブバージョンは存在してはいけません。を、アクティブなバージョンの読み取りで使用されたAPIオペレーションでETag返された e-tagに置き換えます。

      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
    • 次のコマンドを実行して、更新の成功または失敗を上書きしないようにします。このコマンドは、前回の最新バージョンの読み取り以降に最新バージョンが作成されないようにする書き込み条件を定義します。を、アクティブなバージョンの読み取りで使用されたAPIオペレーションでETag返された e-tagに置き換えます。

      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