教學課程:使用測試 Spot 執行個體中斷 AWS FIS - AWS 故障注入服務

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

教學課程:使用測試 Spot 執行個體中斷 AWS FIS

競價型執行個體使用可用的備用EC2容量,與隨需定價相比,可享受高達 90% 的 discount。但是,Amazon EC2 可以在需要恢復容量時中斷您的 Spot 執行個體。使用 Spot 執行個體時,您必須為潛在中斷做好準備。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的 Spot 執行個體中斷

您可以使用... AWS 故障注入服務AWS FIS) 以測試您的應用程式如何處理 Spot 執行個體中斷。使用此自學課程建立使用 AWS FISaws:ec2:send-spot-instance-interruptions中斷其中一個 Spot 執行個體的動作。

或者,若要使用 Amazon EC2 主控台啟動實驗,請參閱 Amazon 使用EC2者指南中的啟動競價型執行個體中斷

必要條件

在您可以使用之前 AWS FIS若要中斷 Spot 執行個體,請完成下列先決條件。

1. 建立 IAM 角色

建立角色並附加啟用的原則 AWS FIS以代表您執行aws:ec2:send-spot-instance-interruptions動作。如需詳細資訊,請參閱適用於 AWS FIS 實驗的 IAM 角色

2. 驗證存取權 AWS FIS

確保您可以訪問 AWS FIS。如需詳細資訊,請參閱 AWS FIS政策範例

3. (選擇性) 建立競價型執行個體請求

如果您希望新的 Spot 執行個體用於此實驗,請使用執行個體命令來請求 Spot 執行個體。預設值是終止中斷的 Spot 執行個體。如果您將中斷行為設定為stop,您也必須將類型設定為persistent。在本教學課程中,請勿將中斷行為設定為hibernate,因為休眠程序會立即開始。

aws ec2 run-instances \ --image-id ami-0ab193018fEXAMPLE \ --instance-type "t2.micro" \ --count 1 \ --subnet-id subnet-1234567890abcdef0 \ --security-group-ids sg-111222333444aaab \ --instance-market-options file://spot-options.json \ --query Instances[*].InstanceId

以下是 spot-options.json 檔案的範例。

{ "MarketType": "spot", "SpotOptions": { "SpotInstanceType": "persistent", "InstanceInterruptionBehavior": "stop" } }

範例指令中的--query選項可讓指令僅傳回 Spot 執行個體的執行個體 ID。下列為範例輸出。

[ "i-0abcdef1234567890" ]
4. 添加一個標籤,以便 AWS FIS可以識別目標競價型例證

使用「建立標籤」指令新增標籤 Name=interruptMe 至您的目標競價型執行個體。

aws ec2 create-tags \ --resources i-0abcdef1234567890 \ --tags Key=Name,Value=interruptMe

步驟 1:建立實驗範本

使用建立實驗範本 AWS FIS控制台。在範本中,您可以指定要執行的動作。此動作會使用指定的標籤中斷 Spot 執行個體。如果有多個具有該標籤的定點例證, AWS FIS隨機選擇其中一個。

建立實驗樣板的步驟
  1. 打開 AWS FIS控制台在https://console.aws.amazon.com/fis/

  2. 在導覽窗格中,選擇 [實驗範本]。

  3. 選擇創建實驗模板

  4. 在「描述」和「名稱」中,輸入範本的描述和名稱。

  5. 對於 Actions (動作),執行下列動作:

    1. 選擇新增動作

    2. 輸入動作的名稱。例如,​輸入 interruptSpotInstance

    3. 針對「動作類型」,選擇 aw: ec2:。send-spot-instance-interruptions

    4. 對於目標保持目標 AWS FIS為您創造。

    5. 對於動作參數中斷前的持續時間,指定 2 分鐘 (PT2M)。

    6. 選擇 Save (儲存)。

  6. 對於 Targets (目標),執行下列動作:

    1. 為目標選擇編輯 AWS FIS在上一個步驟中為您自動建立。

    2. 以更具描述性的名稱取代預設名稱。例如,​輸入 oneSpotInstance

    3. 驗證資源類型aw:ec2: 現場實例。

    4. 對於 Target 方法,請選擇資源標籤、篩選器和參數

    5. 對於資源標籤,選擇新增標籤,然後輸入標籤鍵和標籤值。使用您新增至 Spot 執行個體的標籤來中斷,如本教學課程的先決條件中所述。

    6. 對於資源過濾器,選擇添加新的過濾器,然後輸入State.Namerunning作為路徑和值。

    7. 選取模式中,選擇「計數」。針對「資源數目」,輸入1

    8. 選擇 Save (儲存)。

  7. 對於「服務存取」,請選擇「使用現有IAM角色」,然後按照本教學課程的先決條件中所述選擇您建立的IAM角色。如果未顯示您的角色,請確認其具有必要的信任關係。如需詳細資訊,請參閱適用於 AWS FIS 實驗的 IAM 角色

  8. (選擇性) 對於,請選擇「新增標籤」,然後指定標籤鍵和標籤值。您新增的標籤會套用至您的實驗範本,而不是使用範本執行的實驗。

  9. 選擇創建實驗模板。出現確認提示時,請輸入,create然後選擇「創建實驗模板」。

(可選) 檢視實驗樣板 JSON

選擇 [匯出] 索引標籤。以下是上述控制台程序所JSON建立的範例。

{ "description": "Test Spot Instance interruptions", "targets": { "oneSpotInstance": { "resourceType": "aws:ec2:spot-instance", "resourceTags": { "Name": "interruptMe" }, "filters": [ { "path": "State.Name", "values": [ "running" ] } ], "selectionMode": "COUNT(1)" } }, "actions": { "interruptSpotInstance": { "actionId": "aws:ec2:send-spot-instance-interruptions", "parameters": { "durationBeforeInterruption": "PT2M" }, "targets": { "SpotInstances": "oneSpotInstance" } } }, "stopConditions": [ { "source": "none" } ], "roleArn": "arn:aws:iam::123456789012:role/AllowFISSpotInterruptionActions", "tags": { "Name": "my-template" } }

步驟 2:開始實驗

完成實驗模板的創建後,您可以使用它來開始實驗。

開始實驗的步驟
  1. 您應該在剛剛創建的實驗模板的詳細信息頁面上。否則,請選擇實驗模板,然後選擇實驗模板的 ID 以打開詳細信息頁面。

  2. 選擇 Start experiment (開始實驗)。

  3. (可選)要在實驗中添加標籤,請選擇「添加新標籤」,然後輸入標籤鍵和標籤值。

  4. 選擇 Start experiment (開始實驗)。出現確認提示時,輸入start並選擇「開始實驗」。

步驟 3:追蹤實驗進度

您可以追蹤執行中實驗的進度,直到實驗完成、停止或失敗為止。

追蹤實驗進度
  1. 您應該在剛開始實驗的詳細信息頁面上。否則,請選擇實驗,然後選擇實驗的 ID 以打開詳細信息頁面。

  2. 要查看實驗的狀態,請檢查詳細信息窗格中的狀態。如需詳細資訊,請參閱實驗狀態

  3. 當實驗的狀態為「運行」時,請轉到下一個步驟。

步驟 4:驗證實驗結果

完成此實驗的動作後,會發生下列情況:

驗證實例是否被實驗中斷
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 從導覽窗格中,在單獨的瀏覽器索引標籤或視窗中開啟 Spot Requests (Spot 請求) 和 Instances (執行個體)。

  3. 對於 Spot Requests (Spot 請求),選取 Spot 執行個體請求。起始狀態為 fulfilled。實驗完成後,狀態會變更如下:

    • terminate-狀態變更為instance-terminated-by-experiment

    • stop-狀態變更為,marked-for-stop-by-experiment然後instance-stopped-by-experiment

  4. 對於 Instances (執行個體),選取 Spot 執行個體。起始狀態為 Running。收到 Spot 執行個體中斷通知後兩分鐘,狀態會變更如下:

    • stop-狀態變更為,Stopping然後Stopped

    • terminate-狀態變更為,Shutting-down然後Terminated

步驟 5:清除

如果您為此實驗建立了測試競價型執行個體的中斷行為,stop而您不再需要它,則可以取消競價型執行個體請求並終止 Spot 執行個體。

若要使用取消要求並終止執行個體 AWS CLI
  1. 使用命cancel-spot-instance-requests令取消 Spot 執行個體請求。

    aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
  2. 使用終止實例命令終止實例。

    aws ec2 terminate-instances --instance-ids i-0abcdef1234567890

如果您不再需要實驗範本,可以將其刪除。

若要使用刪除實驗範本 AWS FIS控制台
  1. 打開 AWS FIS控制台在https://console.aws.amazon.com/fis/

  2. 在導覽窗格中,選擇 [實驗範本]。

  3. 選取實驗範本,然後選擇 [動作] > [刪除實驗範本]。

  4. 當系統提示您進行確認時,請輸入,delete然後選擇刪除實驗模板