Spot 執行個體中斷通知 - Amazon Elastic Compute Cloud

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

Spot 執行個體中斷通知

Spot 執行個體中斷通知是在 Amazon EC2 停止或終止 Spot 執行個體的兩分鐘之前發出的警告。如果將休眠指定為中斷時的行為,您會收到中斷通知,但不會提前兩分鐘收到警告,因為休眠程序會立刻開始執行。

從容處理 Spot 執行個體中斷的最佳方法,就是建立容錯的應用程式架構。若要達成此目的,您可以利用 Spot 執行個體中斷通知。建議您每隔 5 秒檢查這些中斷通知。

中斷通知可作為 EventBridge 事件和 Spot 執行個體上執行個體中繼資料中的項目提供。中斷通知的原則是盡可能發出。

EC2 Spot Instance interruption notice

當 Amazon EC2 要中斷您的 Spot 執行個體時,它會在實際中斷前兩分鐘發出一個事件 (休眠除外,它會收到中斷通知,但不會提前兩分鐘,因為休眠會立即開始)。Amazon 可以檢測到此事件 EventBridge。如需有關 EventBridge 事件的詳細資訊,請參閱 Amazon EventBridge 使用者指南。如需如何建立和使用事件規則的詳細範例,請參閱利用 Amazon EC2 Spot 執行個體中斷通知

下列是 Spot 執行個體中斷事件的範例。instance-action 可能的值為 hibernatestopterminate

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Spot Instance Interruption Warning", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-2", "resources": ["arn:aws:ec2:us-east-2a:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }
注意

Spot 執行個體中斷事件的 ARN 格式為arn:aws:ec2:availability-zone:instance/instance-id。此格式不同於 EC2 資源 ARN 格式

instance-action

如果 Spot 執行個體已標記為由 Amazon EC2 停止或終止,則執行個體中繼資料中會出現 instance-action 項目。否則不會存在。您可以instance-action使用執行個體中繼資料服務版本 2 (IMDSv2) 擷取,如下所示。

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/instance-action

instance-action 項目會指定動作和動作發生的約略時間 (UTC)。

下列範例輸出指出此執行個體將會停止的時間點。

{"action": "stop", "time": "2017-09-18T08:22:00Z"}

下列範例輸出指出此執行個體將會終止的時間點。

{"action": "terminate", "time": "2017-09-18T08:22:00Z"}

如果 Amazon EC2 未準備停止或終止執行個體,或是您自行終止了執行個體,則執行個體中繼資料中不會出現 instance-action,而且您會在嘗試擷取它時收到 HTTP 404 錯誤。

termination-time

保留此項目是為了回溯相容性;您應改用 instance-action

如果您的競價型執行個體被 Amazon EC2 標記為終止 (可能是因為中斷行為設定為的競價型執行個體中斷terminate,或是因為永久 Spot 執行個體請求取消),則該termination-time項目會出現在執行個體中繼資料中。否則不會存在。您可以termination-time使用 ImDSv2 擷取,如下所示。

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/termination-time

termination-time項目會指定執行個體接收關機訊號時的大約時間 (以 UTC 為單位)。下列為範例輸出。

2015-01-05T18:02:00Z

如果 Amazon EC2 並未準備終止執行個體 (可能是因為沒有競價型執行個體中斷或因為中斷行為設定為stophibernate),或者如果您自行終止 Spot 執行個體,則該termination-time項目可能不存在於執行個體中繼資料中 (因此您會收到 HTTP 404 錯誤),或者包含非時間值的值。

如果 Amazon EC2 終止執行個體的動作失敗,則請求狀態會設定為 fulfilledtermination-time 值仍會存在於執行個體中繼資料中,包含原來的約略時間 (現在這個時間已經成為過去)。