我已更新 Auto Scaling 群組,但是在 AWS CloudFormation 堆疊更新期間,未達到預期的結果。
簡短說明
AWS::AutoScaling::AutoScalingGroup 資源使用 UpdatePolicy 屬性以定義更新 AWS CloudFormation 堆疊時如何更新Auto Scaling 群組資源。如果未正確設定 UpdatePolicy 屬性值,則滾動更新可能會產生非預期的結果。
您可以使用 AutoScalingRollingUpdate 政策以控制 AWS CloudFormation 如何處理 Auto Scaling 群組的滾動更新。這種通用方法會保留相同的 Auto Scaling 群組,然後根據您設定的參數,取代舊的執行個體。
**注意:**以下解決方案僅著重於 AutoScalingRollingUpdate 政策。您可以使用 AutoScalingReplacingUpdate 政策以立即復原堆疊而不會失敗。
AutoScalingRollingUpdate 政策支援以下設定選項:
"UpdatePolicy": {
"AutoScalingRollingUpdate": {
"MaxBatchSize": Integer,
"MinInstancesInService": Integer,
"MinSuccessfulInstancesPercent": Integer,
"PauseTime": String,
"SuspendProcesses": [ List of processes ],
"WaitOnResourceSignals": Boolean
}
}
解決方法
要找出造成 Auto Scaling 群組在堆疊更新期間無法正確更新的原因,請根據需要完成以下疑難排解案例:
設定 WaitOnResourceSignals 和 PauseTime 以避免成功訊號出現問題
在 AutoScalingRollingUpdate 政策中,將 WaitOnResourceSignals 屬性設定為 false。
**注意:**如果 WaitOnResourceSignals 設定為 true,則 PauseTime 會變更為逾時值。AWS CloudFormation 會等待接收成功訊號,直到 PauseTime 值指定的時間上限為止。如果未收到訊號,AWS CloudFormation 即會取消更新。然後,AWS CloudFormation 會使用相同的設定,復原堆疊,包括相同的 PauseTime 值。如需相關資訊,請參閱將 UpdatePolicy 新增至 Auto Scaling 群組中。
設定 MinSuccessfulInstancesPercent 以避免發生堆疊復原
如果您要在滾動更新期間取代大量執行個體,並要等待每個執行個體的成功訊號,請在 AutoScalingRollingUpdate 政策中設定 MinSuccessfulInstancesPercent 屬性值。
**注意:如果只有一個執行個體無法啟動,**設定 MinSuccessfulInstancesPercent 屬性可防止 AWS CloudFormation 復原整個堆疊。如需相關資訊,請參閱 UpdatePolicy 屬性。
設定 SuspendProcesses 以避免未預期變更 Auto Scaling 群組
滾動更新期間,暫停以下自動擴展流程:
- HealthCheck
- ReplaceUnhealthy
- AZRebalance
- AlarmNotification
- ScheduledActions
**重要事項:**如果您搭配 Elastic Load Balancing 使用 Auto Scaling 群組,請不要暫停以下流程: Launch、Terminate 和 AddToLoadBalancer。進行滾動更新必需具備這些流程。
**注意:**滾動更新期間,如果非預期的擴展動作變更 Auto Scaling 群組的狀態,則更新可能會失敗。該失敗可能是由於 AWS CloudFormation 對 Auto Scaling 群組的不一致看法所造成。