本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資產模型寫入的樂觀鎖定
更新資產模型時,使用者會執行下列動作:
讀取目前的資產模型定義。
編輯資產模型定義與必要的變更。
使用新定義更新資產模型。
在有兩個使用者更新模型的情況下,可以執行下列動作:
使用者 A 會讀取資產模型 X 定義。
使用者 B 會讀取資產模型 X 定義並遞交變更,修改 X 的定義。
使用者 A 會遞交並覆寫使用者 B 針對資產模型 X 所做的變更,而無需驗證或整合使用者 B 的變更。
樂觀鎖定是 用來防止意外覆寫 AWS IoT SiteWise 的機制,如上述案例所示。樂觀鎖定是一種策略,可確保更新或刪除資產模型的目前版本與其目前版本相同 AWS IoT SiteWise。這可保護資產模型寫入不會遭到意外更新覆寫。
請依照下列步驟執行具有樂觀鎖定的資產模型寫入:
使用樂觀鎖定執行資產模型寫入 (主控台)
以下程序說明如何在主控台中,對資產模型的作用中版本執行具有樂觀鎖定的資產模型寫入。
導覽至 AWS IoT SiteWise 主控台
。 在導覽窗格中,選擇 Models (模型)。
選擇要更新的資產模型或元件模型。
選擇編輯。
在編輯模型頁面上進行變更。
選擇 Save (儲存)。
注意
有時候,當使用者開始編輯模型,並將所做的編輯儲存至模型時,就會發生一或多個成功的模型更新。
為了確保使用者不會意外覆寫新的成功更新,使用者寫入會遭到拒絕。主控台會停用儲存按鈕,並提示使用者重新整理編輯模型頁面。使用者必須再次更新模型的新作用中版本。使用者必須執行下列其他步驟:
選擇 Refresh (重新整理)。
再次遵循步驟 5 和 6。
使用樂觀鎖定執行資產模型寫入 (AWS CLI)
以下程序說明如何在 中執行具有樂觀鎖定的資產模型寫入 AWS CLI。
-
擷取與目前模型定義相關聯的 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
,才能不覆寫任何更新。 -
在寫入條件下執行 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
。
-