Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何延遲終止運作狀態不良的 Amazon EC2 執行個體,以便對問題進行疑難排解?
我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體運作狀態不良,並且在我確定問題的原因之前已終止。
簡短描述
若要在終止前對運作狀態不良的 EC2 執行個體進行疑難排解,請新增 Amazon EC2 Auto Scaling lifecycle hook,以將執行個體的狀態從正在終止移至正在終止:等待。
依預設,執行個體將保留在正在終止:等待狀態達 3,600 秒即 1 小時。若要增加此時間,請在 put-lifecycle-hook API 呼叫中使用 heartbeat-timeout 參數。您可以將執行個體保持在正在終止:等待狀態的最長時間為 48 小時或活動訊號逾時的 100 倍 (以較小者為準)。
解決方法
使用 AWS Command Line Interface (AWS CLI) 設定 lifecycle hook。
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
建立 Amazon SNS 主題
若要建立 Amazon Simple Notification Service (Amazon SNS) 主題,請完成下列步驟:
-
建立 SNS 主題,EC2 Auto Scaling 群組將在其中傳送生命週期通知。下列範例會執行 create-topic 命令來建立 ASNotifications 主題:
$ aws sns create-topic --name ASNotifications
輸出會傳回類似下列內容的 ARN:
"TopicArn": "arn:aws:sns:us-west-2:123456789012:ASNotifications"
-
建立該主題的訂閱。您必須已訂閱才能接收延長待定狀態的活動訊號逾時或完成生命週期動作所需的 LifecycleActionToken。下列範例執行 subscribe 命令,來建立使用電子郵件協定 SMTP 與 user@amazon.com 端點電子郵件地址的訂閱:
$ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --protocol email --notification-endpoint user@amazon.com
設定 IAM 許可
設定 AWS Identity and Access Management (IAM) 角色,此角色會授予 EC2 Auto Scaling 群組服務傳送至 SNS 主題的許可。若要完成此任務,請建立包含適當政策的文字檔案。然後,在 create-role 命令中參考此檔案。
-
使用文字編輯器 (例如 vi) 來建立文字檔案:
$ sudo vi assume-role.txt
-
在文字檔案中輸入下列資訊,然後儲存檔案:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "autoscaling.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
執行 aws iam create-role 命令,以透過儲存至 assume-role.txt 的政策建立 AS-Lifecycle-Hook-Role IAM 角色:
$ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt
輸出包含此角色的 ARN。記下 IAM 角色和 SNS 主題的 ARN。
-
為角色新增許可,以允許 EC2 Auto Scaling 在發生 lifecycle hook 事件時傳送 SNS 通知。下列範例執行 attach-role-policy 命令,以將 AutoScalingNotificationAccessRole AWS 受管政策連接至 AS-Lifecycle-Hook-Role IAM 角色:
$ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole
上述受管政策授予下列許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "sqs:SendMessage", "sqs:GetQueueUrl", "sns:Publish" ] } ] }
**重要:**AutoScalingNotificationAccessRole AWS 受管政策允許 EC2 Auto Scaling 呼叫所有 SNS 主題和佇列。若要限制 EC2 Auto Scaling 對特定 SNS 主題或佇列的存取,請使用下列範例政策。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "arn:aws:sns:us-west-2:123456789012:ASNotifications", "Action": [ "sqs:SendMessage", "sqs:GetQueueUrl", "sns:Publish" ] } ] }
設定 lifecycle hook
接下來,執行 put-lifecycle-hook 命令以設定 lifecycle hook:
aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroubleshoot --auto-scaling-group-name MyASGroup --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role
**注意:**將範例值取代為您的 EC2 Auto Scaling 群組名稱、SNS 目標 ARN 和 IAM 角色 ARN。
put-lifecycle-hook 命令會完成下列功能:
- 命名 lifecycle hook (AStroubleshoot)
- 識別與 lifecycle hook (MyASGroup) 關聯的 EC2 Auto Scaling 群組
- 設定執行個體終止生命週期階段的勾點 (EC2_INSTANCE_TERMINATING)
- 指定 SNS 主題的 ARN (arn:aws:sns:us-west-2:123456789012:ASNotifications)
- 指定 IAM 角色的 ARN (arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role)
測試 lifecycle hook
若要測試 lifecycle hook,請先選擇執行個體。然後,執行 terminate-instance-in-auto-scaling-group 命令以強制終止執行個體。在執行個體移至正在終止:等待狀態後,執行 record-lifecycle-action-heartbeat 命令以保持執行個體處於此狀態。或者,執行 complete-lifecycle-action 命令以讓終止完成:
aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE --instance-id i-0e7380909ffaab747
相關資訊

相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- 已提問 5 個月前lg...
- 已提問 15 天前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前