情境:
一間公司在多台 Amazon EC2 執行個體上運行一個應用程式,這些 EC2 都放在 Auto Scaling 群組中,並由 Application Load Balancer 進行負載平衡。應用程式的負載會在一天之中變化,因此 EC2 會定期進行擴展與縮減。每 15 分鐘,EC2 都會將日誌 (log files) 複製到集中式的 Amazon S3 bucket。
但資安團隊發現,部分已被終止的 EC2 執行個體的日誌遺失了
要如何確保 EC2 執行個體被終止時,日誌仍然能成功複製到中央 S3 bucket?
核心知識點:
Auto Scaling Lifecycle Hooks
Auto Scaling Lifecycle Hooks 允許你在 EC2 執行個體進入 啟動 (Launching) 或 終止 (Terminating) 階段時,暫停 Auto Scaling 的流程,讓你能在執行個體真正啟動或被終止前,執行自訂作業。
它的核心功能:
- 延後 EC2 的生命週期動作(例如:先不要終止)
- 讓外部系統可以插入自動化流程,例如:
- 上傳最後的 log 到 S3
- 執行清理流程
- 更新 CMDB 或稽核系統
- 在 Launching 階段先安裝必要套件
- 上傳最後的 log 到 S3
- 透過 EventBridge、SNS 或 Lambda 進行自動化觸發
- 完成後回應 Auto Scaling:
- CONTINUE:讓後續生命週期流程繼續(正常做法)
- ABANDON:略過 Auto Scaling 的後續流程(不建議使用)
- CONTINUE:讓後續生命週期流程繼續(正常做法)
Lifecycle Hook 是確保 EC2 在關鍵階段可以「先做事,再被終止或啟動」的重要機制。
AWS Systems Manager (SSM) Run Command / SSM Document
SSM Document
- 一組可重複使用的指令/腳本規範
- 可以包含 Shell Script、PowerShell Script 或更複雜的自動化流程
- 可以用來:
- 備份檔案
- 將 log 上傳到 S3
- 安裝軟體
- 執行維運指令
- 備份檔案
Run Command
- 讓你在 EC2 上立即執行 SSM Document
- 不需登入 EC2、也不需開啟 22/3389 port
- 可搭配 IAM 權限進行精細控制
- 可被 Lambda 自動化觸發,非常適合 Lifecycle Hook 使用
ABANDON vs CONTINUE 的差異
Lifecycle Hooks 在等待你執行自訂作業後,必須回傳一個狀態給 Auto Scaling,以告訴它接下來要怎麼做。
CONTINUE(推薦、正確做法)
- 告訴 Auto Scaling:「我已完成自訂流程,你可以繼續。」
- Auto Scaling 會 正常終止 EC2 或完成 Launching 流程。
- 適用於你的流程已完成,例如:
- 日誌已上傳
- 清理已完成
- 配置步驟已完成
- 日誌已上傳
➡ CONTINUE 是 AWS 官方建議的標準流程。
ABANDON(不推薦)
- 告訴 Auto Scaling:「我不要你再接手後續了。」
- Auto Scaling 不會再管理該 EC2,終止流程會被跳過。
- 常會導致:
- EC2 殘留在不一致狀態
- Auto Scaling Group target capacity 異常
- 成本增加(因為 EC2 可能卡住不被終止)
- 與健康檢查與期望容量設計相衝突
- EC2 殘留在不一致狀態
➡ ABANDON 只有在你有特殊需求、不希望 Auto Scaling 終止 EC2 才會使用。
一般情況下不符合最佳實務。
結論:
這題核心是:要讓 EC2 在被 Auto Scaling 終止之前,先完成日誌上傳。
使用 SSM Document 是最穩定、最易管理的方式。
使用 CONTINUE 讓 Auto Scaling 正常終止執行個體。
1.Lifecycle Hook 可以延後 EC2 的 TERMINATING,給你足夠時間做日誌複製。
2.SSM Run Command 可以在 EC2 上可靠地執行命令,不需要仰賴自訂腳本或 user-data。
3.使用 CONTINUE(而不是 ABANDON)才是 AWS 文件建議的正常流程。
4.整體架構完全符合官方 Best Practice 的作法。
參考連結:
Auto Scaling Lifecycle Hooks
https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html
Systems Manager Run Command
https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html
Systems Manager Documents
https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html
Amazon EventBridge
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html
Auto Scaling Lifecycle Events with EventBridge https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks-event-notifications.html

