資產模型寫入的樂觀鎖定 - AWS IoT SiteWise

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資產模型寫入的樂觀鎖定

更新資產模型時,使用者會執行下列動作:

  1. 讀取目前的資產模型定義。

  2. 編輯資產模型定義與必要的變更。

  3. 使用新定義更新資產模型。

在有兩個使用者更新模型的情況下,可以執行下列動作:

  • 使用者 A 會讀取資產模型 X 定義。

  • 使用者 B 會讀取資產模型 X 定義並遞交變更,修改 X 的定義。

  • 使用者 A 會遞交並覆寫使用者 B 針對資產模型 X 所做的變更,而無需驗證或整合使用者 B 的變更。

樂觀鎖定是 用來防止意外覆寫 AWS IoT SiteWise 的機制,如上述案例所示。樂觀鎖定是一種策略,可確保更新或刪除資產模型的目前版本與其目前版本相同 AWS IoT SiteWise。這可保護資產模型寫入不會遭到意外更新覆寫。

請依照下列步驟執行具有樂觀鎖定的資產模型寫入:

使用樂觀鎖定執行資產模型寫入 (主控台)

以下程序說明如何在主控台中,對資產模型的作用中版本執行具有樂觀鎖定的資產模型寫入。

  1. 導覽至 AWS IoT SiteWise 主控台

  2. 在導覽窗格中,選擇 Models (模型)

  3. 選擇要更新的資產模型或元件模型。

  4. 選擇編輯

  5. 編輯模型頁面上進行變更。

  6. 選擇 Save (儲存)。

    注意

    有時候,當使用者開始編輯模型,並將所做的編輯儲存至模型時,就會發生一或多個成功的模型更新。

    為了確保使用者不會意外覆寫新的成功更新,使用者寫入會遭到拒絕。主控台會停用儲存按鈕,並提示使用者重新整理編輯模型頁面。使用者必須再次更新模型的新作用中版本。使用者必須執行下列其他步驟:

  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支援樂觀鎖定:

    注意

    以下案例使用 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