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

Spot 執行個體中斷通知

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

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

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

EC2 Spot Instance interruption notice

當 Amazon EC2 要中斷您的 Spot 執行個體時,它會在實際中斷前兩分鐘發出一個事件 (休眠除外,它會收到中斷通知,但不會提前兩分鐘,因為休眠會立即開始)。Amazon CloudWatch Events 可以偵測到此事件。如需 CloudWatch 事件的詳細資訊,請參閱 Amazon CloudWatch Events 使用者指南。如需如何建立和使用事件規則的詳細範例,請參閱利用 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-2:123456789012:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }

instance-action

如果 Spot 執行個體已標記為由 Amazon EC2 停止或終止,則執行個體中繼資料中會出現 instance-action 項目。否則不會存在。您可以如下擷取 instance-action

PS C:\> Invoke-RestMethod -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

如果 Spot 執行個體已標記為由 Amazon EC2 終止,則執行個體的中繼資料中會出現 termination-time 項目。否則不會存在。您可以如下擷取 termination-time

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/spot/termination-time

termination-time 項目會指定執行個體接收結束訊號的約略時間 (UTC)。下列為範例輸出。

2015-01-05T18:02:00Z

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

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