該如何在更新 AWS CloudFormation 堆疊時,正確更新我的 Auto Scaling 群組?

1 分的閱讀內容
0

我已更新 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 群組的不一致看法所造成。


AWS 官方
AWS 官方已更新 4 年前