共用方式為


透過 Azure CLI 建立使用服務直接錯誤的混沌實驗

您可以使用混沌實驗在受控環境中引發失敗,以驗證應用程式是否能夠從失敗中復原。 在本文中,您將使用混沌實驗和 Azure Chaos Studio,以引發多重讀取、單一寫入 Azure Cosmos DB 容錯移轉。 執行此實驗可協助您在發生容錯移轉事件時,防範資料遺失。

您可以使用這些相同的步驟來設定和執行針對任何服務導向錯誤的實驗。 服務直接錯誤直接對 Azure 資源執行,而不需要檢測,不同於需要安裝混沌代理程式的代理程式型錯誤。

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶
  • Azure Cosmos DB 帳戶。 如果您沒有 Azure Cosmos DB 帳戶,則可以加以建立
  • 為 Azure Cosmos DB 帳戶至少設定讀取一次及寫入一次的區域。

開啟 Azure Cloud Shell

Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。

若要開啟 Cloud Shell,請選取程式碼區塊右上角的 [試試看]。 您也可以移至 Bash,從另一個瀏覽器索引標籤開啟 Cloud Shell。 選取 [複製] 即可複製程式碼區塊,將其貼到 Cloud Shell 中,然後選取 Enter 鍵加以執行。

如果您要在本機安裝和使用 CLI,本教學課程需要 Azure CLI 2.0.30 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

注意

這些指示在 Cloud Shell 中使用 Bash 終端機。 如果在本機或 PowerShell 終端機執行 CLI,某些命令可能無法按所述運作。

在 Azure Cosmos DB 帳戶上啟用 Chaos Studio

除非資源已先新增至 Chaos Studio,否則 Chaos Studio 無法對該資源插入錯誤。 您可以藉由在資源上建立目標和功能來將該資源新增至 Chaos Studio。 Azure Cosmos DB 帳戶只有一個目標類型 (服務導向) 和一個功能 (容錯移轉)。 其他資源可能最多有兩個目標類型。 其中一個目標類型適用於服務導向錯誤。 另一個目標類型是代理程式型錯誤。 其他資源可能有許多其他功能。

  1. $RESOURCE_ID 取代為您所新增之資源的資源識別碼,以建立目標。 將 $TARGET_TYPE 取代為您所新增的目標型別

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    例如,如果要將虛擬機器新增為服務導向目標:

    az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine?api-version=2023-11-01" --body "{\"properties\":{}}"
    
  2. $RESOURCE_ID 取代為您所新增之資源的資源識別碼,以在目標上建立這些功能。 將 $TARGET_TYPE 取代為您正在新增的目標型別。 將 $CAPABILITY 取代為您啟用的錯誤功能名稱

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    例如,如果您要啟用虛擬機器關機功能:

    az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine/capabilities/shutdown-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
    

您現在已成功將 Azure Cosmos DB 帳戶新增至 Chaos Studio。

建立實驗

現在您可以建立實驗。 混沌實驗會定義您想要針對目標資源採取的動作。 動作會以循序步驟組織並執行。 混沌實驗也會定義您想要針對平行執行的分支採取的動作。

  1. 從下列 JSON 範例開始制定實驗 JSON。 使用建立實驗 API錯誤程式庫,修改 JSON 以對應至您要執行的實驗。

    {
      "location": "eastus",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "steps": [
          {
            "name": "Step1",
            "branches": [
              {
                "name": "Branch1",
                "actions": [
                  {
                    "type": "continuous",
                    "selectorId": "Selector1",
                    "duration": "PT10M",
                    "parameters": [
                      {
                        "key": "readRegion",
                        "value": "East US 2"
                      }
                    ],
                    "name": "urn:csci:microsoft:cosmosDB:failover/1.0"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "id": "Selector1",
            "type": "List",
            "targets": [
              {
                "type": "ChaosTarget",
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/chaosstudiodemo/providers/Microsoft.DocumentDB/databaseAccounts/myDB/providers/Microsoft.Chaos/targets/Microsoft-CosmosDB"
              }
            ]
          }
        ]
      }
    }
    
  2. 使用 Azure CLI 建立實驗。 將 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME 取代為您實驗的屬性。 請確定您已儲存並上傳實驗 JSON。 使用 JSON 檔案名稱更新 experiment.json

    az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
    

    每個實驗會建立對應的系統指派受控識別。 在回應中記下此身分識別的主體識別碼,下一個步驟將會用到。

將實驗權限授與 Azure Cosmos DB 帳戶

當您建立混沌實驗時,Chaos Studio 會建立系統指派的受控識別,以針對目標資源執行錯誤。 必須將目標資源的適當權限授與此身分識別,實驗才能順利執行。

使用下列命令為實驗提供資源的存取權。 將 $EXPERIMENT_PRINCIPAL_ID 取代為上一個步驟中的主體識別碼。 將 $RESOURCE_ID 取代為目標資源的資源識別碼。 在此案例中,其是 Azure Cosmos DB 執行個體資源識別碼。 將角色變更為該資源類型的適當內建角色。 對實驗中的每個資源對象執行此命令。

az role assignment create --role "Cosmos DB Operator" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID

執行您的實驗

您現在可以開始執行實驗。 若要查看效果,建議您開啟 Azure Cosmos DB 帳戶概觀,然後在不同的瀏覽器索引標籤中移至 [全域複寫資料]。在實驗期間定期重新整理,以顯示區域交換。

  1. 使用 Azure CLI 開始實驗。 將 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME 取代為您實驗的屬性。

    az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
    
  2. 回應包含狀態 URL,可在實驗執行時用來查詢實驗狀態。

下一步

現在您已執行 Azure Cosmos DB 服務導向實驗,您可以開始: