View a markdown version of this page

UpdatePolicy 屬性 - AWS CloudFormation

這是新的 CloudFormation 範本參考指南。請更新您的書籤和連結。如需 CloudFormation 入門的說明,請參閱 AWS CloudFormation 使用者指南

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

UpdatePolicy 屬性

使用 UpdatePolicy 屬性指定 如何在堆疊更新操作期間 CloudFormation 處理特定資源的更新。

概觀

透過使用 UpdatePolicy 屬性,可以控制下列資源的更新方式,如此處所述:

  • AWS::AppStream::Fleet – CloudFormation 可以停止和啟動機群,這會導致取代機群的執行個體。如此一來,所有執行個體都會在堆疊更新後立即套用最新變更。

  • AWS::AutoScaling::AutoScalingGroup – 透過 Auto Scaling 群組,您可以使用一個或多個更新政策來控制 CloudFormation 如何處理特定更新。這些政策包括:

    • AutoScalingReplacingUpdateAutoScalingRollingUpdate 政策 – CloudFormation 可以將 Auto Scaling 群組及其執行個體取代為 AutoScalingReplacingUpdate 政策,或僅將執行個體取代為 AutoScalingRollingUpdate 政策。當您進行下列一個或多個變更時,會發生這些取代操作:

      • 變更 Auto Scaling 群組的 AWS::AutoScaling::LaunchConfiguration

      • 變更 Auto Scaling 群組的 VPCZoneIdentifier 屬性。

      • 變更 Auto Scaling 群組的 LaunchTemplate 屬性。

      • 變更 Auto Scaling 群組的 PlacementGroup 屬性。

      • 更新 Auto Scaling 群組,其中包含不符合目前 LaunchConfiguration 的執行個體。

      如果已指定 AutoScalingReplacingUpdateAutoScalingRollingUpdate 政策屬性,請將 WillReplace 屬性設定為 true,為 AutoScalingReplacingUpdate 提供優先順序。

    • AutoScalingInstanceRefresh 政策 – 當您變更 Auto Scaling 群組的特定屬性時,CloudFormation 會執行 Auto Scaling 執行個體重新整理。相較於 AutoScalingRollingUpdate,此政策支援執行個體維護政策 (包括launch-before-terminate)、終止政策、縮減保護、根磁碟區取代和其他 Amazon EC2 Auto Scaling 功能。您無法在相同的 Auto Scaling 群組AutoScalingRollingUpdate上同時指定 AutoScalingInstanceRefresh和 。如需更多資訊,請參閱AutoScalingInstanceRefresh 政策

    • AutoScalingScheduledAction 政策 – 使用在特定時間擴展群組的排定動作來更新包含 Auto Scaling 群組的堆疊時,適用此政策。除非已在堆疊範本中明確變更,否則 CloudFormation 無法修改群組的上下限或所需容量。此政策有助於防止可能影響排程擴展活動的任何意外更新。

  • AWS::ElastiCache::ReplicationGroup - CloudFormation 可以透過新增或移除碎片來修改複寫群組的碎片,而不是替換整個資源。

  • AWS::OpenSearchService::DomainAWS::Elasticsearch::Domain (舊有) – CloudFormation 可以將 OpenSearch Service 網域升級為 OpenSearch 或 Elasticsearch 的新版本,而無須取代整個資源。

  • AWS::Lambda::Alias – CloudFormation 會在版本於別名上變更時執行 CodeDeploy 部署。

以下各節說明每個資源類型所支援之 UpdatePolicy 屬性的語法和屬性。

WorkSpaces 應用程式更新政策

若要在更新之前停止 WorkSpaces 應用程式機群,並在更新之後重新啟動,請使用 WorkSpaces 應用程式更新政策。

語法

JSON

{ "UpdatePolicy": { "StopBeforeUpdate": { "Type": "Boolean" }, "StartAfterUpdate": { "Type": "Boolean" } } }

YAML

UpdatePolicy: StopBeforeUpdate: Type: Boolean StartAfterUpdate: Type: Boolean
StopBeforeUpdate

在更新前停止指定機群。

必要:否

StartAfterUpdate

在更新後啟動指定機群。

必要:否

AutoScalingReplacingUpdate 政策

若要取代 Auto Scaling 群組及其包含的執行個體,請使用 AutoScalingReplacingUpdate 政策。

在嘗試更新之前,請確定您有足夠的 Amazon EC2 容量,以同時容納舊的與新的 Auto Scaling 群組。

語法

JSON

"UpdatePolicy" : { "AutoScalingReplacingUpdate" : { "WillReplace" : Boolean } }

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: Boolean

Properties

WillReplace

指定是否要在更新期間替換 Auto Scaling 群組及其所包含的執行個體。在替換過程中,CloudFormation 會保留舊群組,直到完成建立新的群組。如果更新失敗,CloudFormation 可復原到舊 Auto Scaling 群組並刪除新 Auto Scaling 群組。

雖然 CloudFormation 建立新的群組,但它不會分離或連接任何執行個體。成功建立新 Auto Scaling 群組後,CloudFormation 將在清除程序中刪除舊 Auto Scaling 群組。

當您設定 WillReplace 參數時,請記住指定相符的 CreationPolicy 屬性。如果執行個體的最低數量 (以 MinSuccessfulInstancesPercent 屬性指定) 未能在 Timeout 期間 (在 CreationPolicy 屬性中指定) 成功發出訊號,替換更新將會失敗,CloudFormation 將轉返到舊 Auto Scaling 群組。

類型:布林值

必要:否

AutoScalingRollingUpdate 政策

若要對 Auto Scaling 群組中的執行個體執行滾動更新,而不是等待擴展活動逐漸將較舊的執行個體取代為較新的執行個體,請使用 AutoScalingRollingUpdate 政策。此政策可讓您靈活地指定 CloudFormation 是否批次或一次全部取代 Auto Scaling 群組中的執行個體,而無需取代整個資源。

使用 AutoScalingRollingUpdate 政策時的考量事項:

警告

滾動更新不符合 Auto Scaling 群組上設定的執行個體維護政策。在滾動更新期間,運作狀態良好的容量可能會低於 群組上的MinHealthyPercentage設定,而且 CloudFormation 不會在終止現有執行個體之前啟動新的執行個體,無論 為何MaxHealthyPercentage。若要在堆疊更新期間保留執行個體維護政策,請AutoScalingInstanceRefresh 政策改用 。

  • 當 CloudFormation 復原至先前版本時,會使用目前堆疊更新前的範本中所指定的 UpdatePolicy 組態。例如,您在 UpdatePolicy 中將 MaxBatchSize 從 1 變更為 10,執行堆疊更新,而該更新失敗。CloudFormation 復原時會使用 1 作為批次上限,而不是 10。為了避免這種情況,請在可能啟動滾動更新的 Auto Scaling 群組任何更新之前,在個別更新中對 UpdatePolicy 進行變更。

  • CloudFormation 建議指定 SuspendProcesses 屬性,以暫時暫停可能干擾滾動更新並導致其失敗的 Amazon EC2 Auto Scaling 程序。如需詳細資訊,請參閱如何在更新 CloudFormation 堆疊時更新 Auto Scaling 群組?

    或者,AutoScalingInstanceRefresh政策支援堆疊更新期間的所有 Auto Scaling 群組程序,因此您不需要暫停這些程序。如果您需要運作狀態檢查和 AZ 重新平衡等程序來保持作用中狀態,請AutoScalingInstanceRefresh改用 。如需更多資訊,請參閱AutoScalingInstanceRefresh 政策

  • CloudFormation 支援在啟動或終止執行個體時使用 Amazon EC2 Auto Scaling lifecycle hook。這讓您有時間在執行個體上執行自訂動作,然後再移至下一個狀態。為了確保新執行個體達到 InService 狀態,請在自訂動作完成時,使用 CONTINUE 結果完成 lifecycle hook。根據預設,如果未收到回應且 lifecycle hook 逾時,執行個體啟動會被視為失敗並被捨棄。如果沒有執行個體達到 InService 狀態,滾動更新最終將失敗。

  • 其他 Amazon EC2 Auto Scaling 功能,例如終止政策和縮減保護,不適用於 CloudFormation 滾動更新。如果您需要任何這些功能,請AutoScalingInstanceRefresh改用 。如需詳細資訊,請參閱AutoScalingInstanceRefresh 政策

  • 如果使用 AutoScalingRollingUpdate 政策並移除置放群組設定,將從 Auto Scaling 群組和 CloudFormation 範本中移除置放群組。此外,這會觸發滾動更新,因此新執行個體不會在置放群組中啟動。

語法

JSON

"UpdatePolicy" : { "AutoScalingRollingUpdate" : { "MaxBatchSize" : Integer, "MinActiveInstancesPercent" : Integer, "MinInstancesInService" : Integer, "MinSuccessfulInstancesPercent" : Integer, "PauseTime" : String, "SuspendProcesses" : [ List of processes ], "WaitOnResourceSignals" : Boolean } }

Properties

MaxBatchSize

指定可同時取代的執行個體數目上限。

預設1

上限100

類型:整數

必要:否

MinActiveInstancesPercent

指定在滾動更新期間,Auto Scaling 群組中必須處於 InService 狀態的執行個體相對於該群組所需容量的百分比,以便成功更新。可指定介從 0 到 100 之間的值。CloudFormation 會四捨五入至最接近的 10%。例如,如果更新五個執行個體,且最低 InService 百分比為 50,則至少必須有三個執行個體處於 InService 狀態。如果執行個體未在 1 小時的固定時間內轉換為 InService 狀態,CloudFormation 會假設執行個體未更新。

AWS::AutoScaling::AutoScalingGroup 資源的 DesiredCapacity 屬性設定為高於 Auto Scaling 群組的目前所需容量時,在 UpdatePolicy 中設定 MinActiveInstancesPercent 也會影響執行個體的啟動。

預設100

類型:整數

必要:否

MinInstancesInService

指定在 CloudFormation 更新舊執行個體時,Auto Scaling 群組中必須為服務中的執行個體的最少數量。此值必須小於 Auto Scaling 群組的 MaxSize

警告

建議您將 MinInstancesInService 屬性的值至少設定為 Auto Scaling 群組的 MinSize。這可避免因 0 個執行個體提供客戶流量,而導致滾動更新期間的潛在可用性問題。

預設0

類型:整數

必要:否

MinSuccessfulInstancesPercent

指定 Auto Scaling 滾動更新中必須有多少百分比的執行個體成功發出訊號才能成功更新。可指定介從 0 到 100 之間的值。CloudFormation 會四捨五入至最接近的 10%。例如,如果更新 5 個執行個體,最低成功百分比為 50,則必須有 3 個執行個體成功發出訊號。如果執行個體未在 PauseTime 屬性指定的時間內傳送訊號,CloudFormation 將假設執行個體未更新。

建議將 MinSuccessfulInstancesPercent 屬性的值設定為大於 0 的值。當 MinSuccessfulInstancesPercent 屬性設定為 0 時,CloudFormation 會等待 0% 的容量執行個體處於 InService 狀態。MinSuccessfulInstancesPercent 會立即 (並在將 Auto Scaling 群組狀態視為 UPDATE_COMPLETE 之前) 傳回,以繼續處理堆疊範本中定義的後續資源。如果在 CloudFormation 範本中定義了其他 Auto Scaling 群組,則這些群組將會同時更新。當一次部署所有 Auto Scaling 群組且 0% 的容量執行個體處於 InService 狀態時,您將會遇到可用性問題,因為沒有執行個體提供客戶流量。

預設100

類型:整數

必要:否

PauseTime

CloudFormation 在變更一個批次的執行個體之後,為提供時間讓這些執行個體啟動軟體應用程式而暫停的時間量。

ISO8601 持續時間格式指定 PauseTime (格式為 PT#H#M#S,其中的各個 # 分別為小時、分鐘、秒鐘的數字)。PauseTime 上限為 1 小時 (PT1H)。

警告

WaitOnResourceSignals 設定為 true 時,PauseTime 會作為逾時值。它會透過增加 AWS::AutoScaling::AutoScalingGroup 資源的 DesiredCapacity 屬性,決定 CloudFormation 等待從滾動更新期間被取代的執行個體以及新增的新執行個體接收有效訊號所需數量的最長時間。如果在 CloudFormation 收到預期的訊號之前超過 PauseTime,則更新失敗。為獲得最佳結果,請指定可讓您的應用程式有足夠時間啟動的時段。如果需要復原更新,較短的 PauseTime 可能會導致復原失敗。

預設PT5M (5 分鐘),若 WaitOnResourceSignals 屬性設為 true。否則,不會設定預設值。

類型:字串

必要:否

SuspendProcesses

指定 Auto Scaling 程序在堆疊更新期間暫停。暫停程序可避免 Auto Scaling 影響堆疊更新。例如,您可以暫停警示,這樣 Amazon EC2 Auto Scaling 就不會啟動與警示相關的擴展政策。如需有效值,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的程序類型

預設:未指定

類型:Auto Scaling 程序清單

必要:否

WaitOnResourceSignals

指定 CloudFormation 是否在繼續更新之前等待來自新執行個體的成功訊號。CloudFormation 會等待指定的 PauseTime 持續時間,以接收成功訊號。

若要將訊號傳送至 Auto Scaling 群組,請使用 cfn-signal 協助程式指令碼。對於與 Elastic Load Balancing 相關聯的 Auto Scaling 群組,請考慮新增運作狀態檢查,以確保在使用 cfn-init 協助程式指令碼發出成功訊號之前,執行個體運作狀態良好。如需範例,請參閱 GitHub 儲存庫中 Amazon EC2 Auto Scaling 滾動式更新範例範本中的 verify_instance_health 命令。

預設false

類型:布林值

必要:有條件限制。如果指定 MinSuccessfulInstancesPercent 屬性,則必須將 WaitOnResourceSignals 屬性設為 true

AutoScalingInstanceRefresh 政策

若要透過執行 Auto Scaling 執行個體重新整理來更新 Auto Scaling 群組中的執行個體,請使用 AutoScalingInstanceRefresh政策。如需執行個體重新整理功能的完整清單,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的使用執行個體重新整理來更新 Auto Scaling 群組中的執行個體Amazon EC2 Auto Scaling

CloudFormation 只有在您更新下列其中一個AWS::AutoScaling::AutoScalingGroup資源屬性時,才會執行執行個體重新整理:

  • LaunchTemplate

  • MixedInstancesPolicy

  • VPCZoneIdentifier

  • AvailabilityZones

  • AvailabilityZoneIds

  • PlacementGroup

當您使用AutoScalingInstanceRefresh政策時,請考慮下列事項:

  • 您無法在相同的 Auto Scaling 群組上同時指定 AutoScalingInstanceRefreshAutoScalingRollingUpdate政策。如果您這樣做,堆疊更新會失敗。

  • CloudFormation 堆疊復原是 的復原機制AutoScalingInstanceRefresh。如果執行個體重新整理失敗,CloudFormation 會復原堆疊,並啟動新的執行個體重新整理,將群組還原至先前的組態。您無法在 CloudFormation 已啟動的執行個體重新整理上使用 Auto Scaling RollbackInstanceRefresh API 操作。若要還原重新整理,請使用 CancelInstanceRefresh API 或復原堆疊更新。

  • Auto Scaling 群組一次只能執行一個執行個體重新整理。當您使用 AutoScalingInstanceRefresh政策啟動堆疊更新時,如果使用者啟動的執行個體重新整理正在進行中,堆疊更新可能會失敗。

  • 當您將執行個體重新整理設定為 StrategyReplaceRootVolume,僅允許在啟動範本或混合執行個體政策ImageId內將 變更為 。其他屬性變更可能會導致堆疊更新失敗。如需詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的在執行個體重新整理期間取代根磁碟區。

  • 堆疊更新的每個方向 (向前和向後) 都受到 CloudFormation 資源逾時 36 小時的限制。

  • 長時間執行的執行個體重新整理可能會超過 CloudFormation 用來呼叫 Auto Scaling 的暫時登入資料生命週期。若要避免這種情況,請在堆疊上設定服務角色。如需詳細資訊,請參閱 CloudFormation 服務角色

注意

執行個體重新整理不支援cfn-signal協助程式指令碼。如需有關如何在執行個體重新整理期間驗證執行個體準備程度的資訊,請參閱 在執行個體重新整理期間確認執行個體就緒狀態

語法

JSON

"UpdatePolicy" : { "AutoScalingInstanceRefresh" : { "Strategy" : String, "Preferences" : { "AlarmSpecification" : { "Alarms" : [ List of alarm names ] }, "BakeTime" : Integer, "CheckpointDelay" : Integer, "CheckpointPercentages" : [ List of integers ], "InstanceWarmup" : Integer, "MaxHealthyPercentage" : Integer, "MinHealthyPercentage" : Integer, "ScaleInProtectedInstances" : String, "SkipMatching" : Boolean, "StandbyInstances" : String } } }

YAML

UpdatePolicy: AutoScalingInstanceRefresh: Strategy: String Preferences: AlarmSpecification: Alarms: - List of alarm names BakeTime: Integer CheckpointDelay: Integer CheckpointPercentages: - List of integers InstanceWarmup: Integer MaxHealthyPercentage: Integer MinHealthyPercentage: Integer ScaleInProtectedInstances: String SkipMatching: Boolean StandbyInstances: String

Properties

Strategy

用於執行個體重新整理的策略。有效值為 RollingReplaceRootVolume。如需 ReplaceRootVolume策略的相關資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的在執行個體重新整理期間取代根磁碟區。

類型:字串

必要:是

Preferences

設定執行個體重新整理的偏好設定。包括執行個體暖機時間、運作狀態百分比下限和上限,以及 Amazon EC2 Auto Scaling 在執行個體處於Standby狀態或受到縮減保護時所使用的行為。您也可以啟用其他功能:

  • 檢查點

  • CloudWatch 警示

  • 略過相符項目

  • 封裝時間

類型偏好設定

必要:否

Preferences (偏好設定)

AlarmSpecification

CloudWatch 警示規格。您可以使用 CloudWatch 警示來識別執行個體重新整理期間的任何問題,並在符合警示閾值時轉返堆疊。如需詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的使用自動復原啟動執行個體重新整理

類型AlarmSpecification

必要:否

BakeTime

在執行個體重新整理結束時,執行個體重新整理視為完成之前等待的時間,以秒為單位。

預設0

下限0

上限172800

類型:整數

必要:否

CheckpointDelay

到檢查點後再繼續前的等待時間 (以秒為單位)。如果您為 指定值CheckpointPercentages,但未為 指定值CheckpointDelay,則 CheckpointDelay 預設為 3600(1 小時)。

下限0

上限172800

類型:整數

必要:否

CheckpointPercentages

每個檢查點的閾值會以遞增順序排列。每個數字必須是唯一的。若要取代 Auto Scaling 群組中的所有執行個體,陣列中的最後一個號碼必須是 100。如需使用範例,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的將檢查點新增至執行個體重新整理

類型:整數清單

必要:否

InstanceWarmup

執行個體重新整理會等待一段時間 (以秒為單位),然後在新執行個體進入 InService 狀態後繼續取代下一個執行個體。

如果您未指定 InstanceWarmup,Auto Scaling 會改用 DefaultInstanceWarmup 屬性的值。建議您DefaultInstanceWarmup在所有使用案例中設定 的值。

如果您未指定任一屬性的值,Auto Scaling 會使用 HealthCheckGracePeriod 屬性的值。

類型:整數

必要:否

MaxHealthyPercentage

指定可處於服務狀態和運作狀態良好或待定狀態的群組百分比上限,以在取代執行個體時支援您的工作負載。此值以 Auto Scaling 群組所需容量的百分比表示。如果您指定 MaxHealthyPercentage,您也必須指定 MinHealthyPercentage,而且兩者之間的差異不能大於 100。範圍越大,可同時取代的執行個體數量便會越多。

預設:Auto Scaling 群組執行個體維護政策中設定的值,如果已定義。否則,110Strategy為 時Rolling,或100Strategy為 時ReplaceRootVolume

下限100

上限200

類型:整數

必要:否

MinHealthyPercentage

指定要保持服務狀態、運作狀態良好且準備好用來支援工作負載的群組百分比下限,以允許操作繼續。此值以 Auto Scaling 群組所需容量的百分比表示。

預設:Auto Scaling 群組執行個體維護政策中設定的值,如果已定義。否則,100Strategy為 時Rolling,或90Strategy為 時ReplaceRootVolume

下限0

上限100

類型:整數

必要:否

ScaleInProtectedInstances

如果找到受到縮減保護的執行個體,請選擇您希望 Amazon EC2 Auto Scaling 使用的行為。以下列出有效的值:

  • 重新整理:Amazon EC2 Auto Scaling 會取代受保護免於縮減的執行個體。

  • 忽略:Amazon EC2 Auto Scaling 會忽略受到縮減保護的執行個體,並繼續取代未受保護的執行個體。

  • 等待:Amazon EC2 Auto Scaling 會等待一小時,讓您移除縮減保護。否則,執行個體重新整理會失敗。

預設Wait

類型:字串

必要:否

SkipMatching

指出是否啟用略過比對。如果啟用 (true),Auto Scaling 會略過取代已符合堆疊範本中指定組態的執行個體。如需詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的使用執行個體重新整理搭配略過比對

預設true

類型:布林值

必要:否

StandbyInstances

如果找到 Standby 狀態的執行個體,請選擇您希望 Amazon EC2 Auto Scaling 使用的行為。以下列出有效的值:

  • 終止:Amazon EC2 Auto Scaling 終止 中的執行個體Standby

  • 忽略:Amazon EC2 Auto Scaling 會忽略 中的執行個體,Standby並繼續取代處於 InService 狀態的執行個體。

  • 等待:Amazon EC2 Auto Scaling 會等待一小時,讓您將執行個體傳回服務。否則,執行個體重新整理會失敗。

預設Wait

類型:字串

必要:否

AlarmSpecification

Alarms

要監控執行個體重新整理的一或多個 CloudWatch 警示名稱。您最多可以指定 10 個警示。

類型:字串清單

必要:否

在執行個體重新整理期間確認執行個體就緒狀態

根據預設,當新啟動的執行個體通過 Auto Scaling 群組上設定的運作狀態檢查時,執行個體重新整理會自動繼續進行下一組執行個體。其中包括 Amazon EC2 運作狀態檢查,以及如果已設定,Elastic Load Balancing 運作狀態檢查。如需詳細資訊,請參閱「Amazon EC2 Auto Scaling 使用者指南」中的針對 Auto Scaling 群組中的執行個體進行運作狀態檢查

如果您的執行個體在移至 之前需要應用程式引導InService,請將 autoscaling:EC2_INSTANCE_LAUNCHING lifecycle hook 新增至 Auto Scaling 群組。執行個體重新整理會等待生命週期關聯完成,然後再繼續執行下一組執行個體。呼叫 CompleteLifecycleAction API 來完成勾點。您可以使用啟動範本使用者資料指令碼,或從外部服務,從執行個體本身進行此呼叫。如需詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的 Amazon EC2 Auto Scaling 生命週期關聯完成 Auto Scaling 群組中的生命週期動作Amazon EC2 Auto Scaling

AutoScalingScheduledAction 政策

若要指定當 AWS::AutoScaling::AutoScalingGroup 資源有一個關聯的排程動作時,CloudFormation 如何處理 MinSizeMaxSizeDesiredCapacity 屬性的更新,請使用 AutoScalingScheduledAction 政策。

透過排程動作,可隨時改變 Auto Scaling 群組的群組大小屬性。當您使用 Auto Scaling 群組與排程動作更新堆疊時,CloudFormation 永遠會將您 Auto Scaling 群組的群組大小屬性設定為您範本內 AWS::AutoScaling::AutoScalingGroup 資源中定義的值,即使排程動作已生效。

當您有生效的排程動作時,如果不希望 CloudFormation 變更任何群組大小屬性值,請使用 AutoScalingScheduledAction 更新政策並將 IgnoreUnmodifiedGroupSizeProperties 設為 true,以避免CloudFormation 變更 MinSizeMaxSizeDesiredCapacity 屬性,除非您已在您的範本中修改這些值。

語法

JSON

"UpdatePolicy" : { "AutoScalingScheduledAction" : { "IgnoreUnmodifiedGroupSizeProperties" : Boolean } }

Properties

IgnoreUnmodifiedGroupSizeProperties

如為 true,在堆疊更新期間,CloudFormation 會忽略您現有 Auto Scaling 群組與您範本之 AWS::AutoScaling::AutoScalingGroup 資源所描述 Auto Scaling 群組之間的群組大小屬性差異。如果您修改範本中的任何群組大小屬性值,CloudFormation 將使用修改後的值並更新您的 Auto Scaling 群組。

注意

在堆疊復原期間會忽略此屬性。

預設false

類型:布林值

必要:否

UseOnlineResharding 政策

若要透過新增或移除碎片來修改複寫群組的碎片,而不是替換整個 AWS::ElastiCache::ReplicationGroup 資源,請使用 UseOnlineResharding 更新政策。

如果 UseOnlineResharding 設為 true,您可以更新 AWS::ElastiCache::ReplicationGroup 資源的 NumNodeGroupsNodeGroupConfiguration 屬性,且 CloudFormation 將會更新這些屬性而不被中斷。當 UseOnlineResharding 設為 false 或未指定,更新 NumNodeGroupsNodeGroupConfiguration 屬性會導致 CloudFormation 替換整個 AWS::ElastiCache::ReplicationGroup 資源。

UseOnlineResharding 更新政策沒有屬性。

UseOnlineResharding 更新政策設定為 true 時的一些考量事項:

  • 我們強烈建議您將 NumNodeGroupsNodeGroupConfiguration 屬性作為特定堆疊更新操作中唯一的更新來執行更新。

    更新複寫群組的節點群組組態是需要耗費大量資源的操作。如果堆疊更新失敗,CloudFormation 不會復原複寫群組中節點群組組態的變更。不過,CloudFormation 將復原任何其他屬性在更新操作失敗中的變更。

  • 任何節點群組更新都需要識別所有節點群組。

    如果您指定 NodeGroupConfiguration 屬性,您也必須為每個節點群組組態指定 NodeGroupId,才能讓 CloudFormation 更新節點數量而不被中斷。

    在建立複寫群組時,如果您沒有為每個節點群組指定 ID,ElastiCache 會自動為每個節點群組產生 ID。若要更新複寫群組而不被中斷,請使用 ElastiCache 主控台 (https://console.aws.amazon.com/elasticache/) 或 DescribeReplicationGroups 擷取該複寫群組中所有節點群組的 ID。然後,在嘗試新增或移除碎片之前,請為堆疊範本中的每個節點群組指定 ID。

    注意

    最佳實務是當您在堆疊範本中建立複寫群組時,就為您指定的每個節點群組包含 ID。

    此外,更新節點數量而不被中斷,也會需要您準確地為每個 NodeGroupConfiguration 指定 PrimaryAvailabilityZoneReplicaAvailabilityZonesReplicaCount 屬性。同樣地,您可以使用 ElastiCache 主控台 (https://console.aws.amazon.com/elasticache/) 或 DescribeReplicationGroups 擷取每個節點群組的實際值,並將其與堆疊範本中的值進行比較。您可以進行個別堆疊更新來更新節點群組的屬性值,或將更新作為變更節點群組數量相同堆疊更新的一部分。

    當您使用 UseOnlineResharding 更新政策來更新節點群組數量而不被中斷時,ElastiCache 會在指定數量的位置之間平均分配金鑰空間。這無法在稍後更新。因此,以這種方式更新節點群組後,您應該移除在堆疊範本中 NodeGroupConfiguration 為每個 Slots 屬性指定的值,因為其不再反映每個節點群組的實際值。

  • 實際節點群組移除結果可能有所差異。

    當您指定的 NumNodeGroups 值低於目前節點群組的數量,CloudFormation 會指示 ElastiCache 盡可能移除節點群組以達到指定的節點數量。不過,ElastiCache 可能無法總是移除所需節點群組數量。如果 ElastiCache 無法移除所需的節點群組數量,CloudFormation 會產生堆疊事件來提醒您。如果 ElastiCache 無法移除任何節點群組,則 CloudFormation 資源更新失敗。

如需修改複寫群組的詳細資訊,請參閱 Amazon ElastiCache API Reference (《Amazon ElastiCache API 參考》) 中的 ModifyReplicationGroupShardConfiguration

語法

JSON

"UpdatePolicy" : { "UseOnlineResharding" : Boolean }

YAML

UpdatePolicy: UseOnlineResharding: Boolean

EnableVersionUpgrade 政策

若要將 OpenSearch Service 網域升級為 OpenSearch 或 Elasticsearch 的新版本,而非取代整個 AWS::OpenSearchService::DomainAWS::Elasticsearch::Domain 資源,請使用 EnableVersionUpgrade 更新政策。

如果 EnableVersionUpgrade 設定為 true,您可以更新 AWS::OpenSearchService::Domain 資源的 EngineVersion 屬性 (或舊有 AWS::Elasticsearch::Domain 資源的 ElasticsearchVersion 屬性),並且 CloudFormation 會更新該屬性,而不會中斷。當 EnableVersionUpgrade 設定為 false,或是沒有指定時,更新 EngineVersionElasticsearchVersion 屬性會導致 CloudFormation 取代整個 AWS::OpenSearchService::Domain/AWS::Elasticsearch::Domain 資源。

EnableVersionUpgrade 更新政策沒有屬性。

如需詳細資訊,請參閱《Amazon OpenSearch Service 開發人員指南》中的升級 OpenSearch Service 網域

語法

JSON

"UpdatePolicy" : { "EnableVersionUpgrade" : Boolean }

YAML

UpdatePolicy: EnableVersionUpgrade: Boolean

CodeDeployLambdaAliasUpdate 政策

若要在 AWS::Lambda::Alias 資源進行版本變更時執行 CodeDeploy 部署,請使用 CodeDeployLambdaAliasUpdate 更新政策。

語法

JSON

"UpdatePolicy" : { "CodeDeployLambdaAliasUpdate" : { "AfterAllowTrafficHook" : String, "ApplicationName" : String, "BeforeAllowTrafficHook" : String, "DeploymentGroupName" : String } }

Properties

AfterAllowTrafficHook

在流量路由完成後,要執行的 Lambda 函數名稱。

必要:否

類型:字串

ApplicationName

CodeDeploy 應用程式名稱。

必要:是

類型:字串

BeforeAllowTrafficHook

在流量路由開始前,要執行的 Lambda 函數名稱。

必要:否

類型:字串

DeploymentGroupName

CodeDeploy 部署群組的名稱。這是設置流量轉換政策的位置。

必要:是

類型:字串

如需為 AWS::Lambda::Alias 資源指定 UpdatePolicy 屬性的範例,請參閱 Lambda 別名更新政策

範例

以下範例說明如何將更新政策新增至 Auto Scaling 群組,以及如何在更新中繼資料時保持可用性。

UpdatePolicy 新增至 Auto Scaling 群組

以下範例說明如何新增更新政策。在更新期間,Auto Scaling 群組將以兩個為一批更新執行個體,並至少保持一個服務中的執行個體。由於已設定 WaitOnResourceSignals 旗標,Auto Scaling 群組將等待在群組中新增的新執行個體。新執行個體必須發出訊號至 Auto Scaling 群組,才能更新下一個批次的執行個體。

JSON

"ASG" : { "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "VPCZoneIdentifier":[ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate":{ "LaunchTemplateId":{ "Ref":"logicalName" }, "Version":{ "Fn::GetAtt":[ "logicalName", "LatestVersionNumber" ] } }, "MaxSize":"4", "MinSize":"1" }, "UpdatePolicy":{ "AutoScalingScheduledAction":{ "IgnoreUnmodifiedGroupSizeProperties":"true" }, "AutoScalingRollingUpdate":{ "MinInstancesInService":"1", "MaxBatchSize":"2", "WaitOnResourceSignals":"true", "PauseTime":"PT10M", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions", "InstanceRefresh" ] } } }

YAML

ASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingScheduledAction: IgnoreUnmodifiedGroupSizeProperties: 'true' AutoScalingRollingUpdate: MinInstancesInService: '1' MaxBatchSize: '2' WaitOnResourceSignals: 'true' PauseTime: PT10M SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions - InstanceRefresh

AutoScalingReplacingUpdate 政策

以下範例宣告一項政策,強制在更新期間替換關聯的 Auto Scaling 群組。為了成功更新,必須在 MinSuccessfulPercentParameter 期間發出成功訊號的執行個體百分比 (以 Timeout 參數指定)。

JSON

"UpdatePolicy" : { "AutoScalingReplacingUpdate" : { "WillReplace" : true } }, "CreationPolicy" : { "ResourceSignal" : { "Count" : { "Ref" : "ResourceSignalsOnCreate"}, "Timeout" : "PT10M" }, "AutoScalingCreationPolicy" : { "MinSuccessfulInstancesPercent" : { "Ref" : "MinSuccessfulPercentParameter" } } }

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: true CreationPolicy: ResourceSignal: Count: !Ref 'ResourceSignalsOnCreate' Timeout: PT10M AutoScalingCreationPolicy: MinSuccessfulInstancesPercent: !Ref 'MinSuccessfulPercentParameter'

AutoScalingInstanceRefresh 政策

下列範例顯示AutoScalingInstanceRefresh政策的兩種常見組態。第一個範例使用launch-before-terminate來維護重新整理期間的容量。如果部署造成問題,第二個範例會使用 CloudWatch 警示來轉返堆疊。

Launch-before-terminate重新整理

下列範例會宣告使用 launch-before-terminate AutoScalingInstanceRefresh的政策。MinHealthyPercentage 將 設定為 100可確保新執行個體在現有執行個體終止之前啟動,而 MaxHealthyPercentage 200則可讓群組暫時加倍大小。此政策也會略過已符合組態的執行個體。

JSON
"ASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName" }, "Version" : { "Fn::GetAtt" : [ "logicalName", "LatestVersionNumber" ] } }, "MaxSize" : "4", "MinSize" : "1" }, "UpdatePolicy" : { "AutoScalingInstanceRefresh" : { "Strategy" : "Rolling", "Preferences" : { "MinHealthyPercentage" : 100, "MaxHealthyPercentage" : 200, "SkipMatching" : true } } } }
YAML
ASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingInstanceRefresh: Strategy: Rolling Preferences: MinHealthyPercentage: 100 MaxHealthyPercentage: 200 SkipMatching: true

使用警示型復原重新整理

下列範例會宣告具有檢查點、警示型復原和製作時間AutoScalingInstanceRefresh的政策。Auto Scaling 會在每個檢查點暫停 5 分鐘,並在完成後等待 10 分鐘,然後宣告成功。

JSON
"ASG" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "VPCZoneIdentifier" : [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "LaunchTemplate" : { "LaunchTemplateId" : { "Ref" : "logicalName" }, "Version" : { "Fn::GetAtt" : [ "logicalName", "LatestVersionNumber" ] } }, "MaxSize" : "4", "MinSize" : "1" }, "UpdatePolicy" : { "AutoScalingInstanceRefresh" : { "Strategy" : "Rolling", "Preferences" : { "CheckpointPercentages" : [ 33, 66, 100 ], "CheckpointDelay" : 300, "BakeTime" : 600, "AlarmSpecification" : { "Alarms" : [ "my-cloud-watch-alarm" ] } } } } }
YAML
ASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 LaunchTemplate: LaunchTemplateId: !Ref logicalName Version: !GetAtt logicalName.LatestVersionNumber MaxSize: '4' MinSize: '1' UpdatePolicy: AutoScalingInstanceRefresh: Strategy: Rolling Preferences: CheckpointPercentages: - 33 - 66 - 100 CheckpointDelay: 300 BakeTime: 600 AlarmSpecification: Alarms: - my-cloud-watch-alarm

在更新 cfn-init 協助程式指令碼的中繼資料時維持可用性

當您在執行個體上安裝軟體應用程式時,可使用 AWS::CloudFormation::Init 中繼資料金鑰與 cfn-init 協助程式指令碼以引導 Auto Scaling 群組中的執行個體。CloudFormation 安裝套件、執行命令,並執行中繼資料中所描述的其他引導動作。

當您僅更新中繼資料時 (例如,將套件更新為另一個版本時),可使用 cfn-hup 協助程式以偵測和套用更新。但是,cfn-hup 協助程式獨立執行於每個執行個體。如果協助程式剛好在所有執行個體上同時執行,您的應用程式或服務在更新期間可能會無法使用。為了保證可用性,您可以強制滾動更新,使 CloudFormation 每次更新一個批次的執行個體。

重要

強制執行滾動更新需要 CloudFormation 建立新的執行個體,然後刪除舊的執行個體。存放在舊執行個體的任何資訊都會遺失。

若要強制執行滾動更新,請變更啟動組態資源的邏輯 ID,然後更新堆疊及任何指向原始邏輯 ID 的參考 (例如關聯的 Auto Scaling 群組)。CloudFormation 在 Auto Scaling 群組上觸發滾動更新,並取代所有執行個體。

原始範本

"LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "Comment" : "Install a simple PHP application", "AWS::CloudFormation::Init" : { ... } } }

更新的邏輯 ID

"LaunchConfigUpdateRubygemsPkg": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "Comment" : "Install a simple PHP application", "AWS::CloudFormation::Init" : { ... } } }

Lambda 別名更新政策

以下範例指定 UpdatePolicy 資源的 AWS::Lambda::Alias 屬性。部署的所有詳細資訊皆由傳遞至政策的應用程式和部署群組所定義。

JSON

"Alias": { "Type": "AWS::Lambda::Alias", "Properties": { "FunctionName": { "Ref": "LambdaFunction" }, "FunctionVersion": { "Fn::GetAtt": [ "FunctionVersionTwo", "Version" ] }, "Name": "MyAlias" }, "UpdatePolicy": { "CodeDeployLambdaAliasUpdate": { "ApplicationName": { "Ref": "CodeDeployApplication" }, "DeploymentGroupName": { "Ref": "CodeDeployDeploymentGroup" }, "BeforeAllowTrafficHook": { "Ref": "PreHookLambdaFunction" }, "AfterAllowTrafficHook": { "Ref": "PreHookLambdaFunction" } } } }

YAML

Alias: Type: AWS::Lambda::Alias Properties: FunctionName: !Ref LambdaFunction FunctionVersion: !GetAtt FunctionVersionTwo.Version Name: MyAlias UpdatePolicy: CodeDeployLambdaAliasUpdate: ApplicationName: !Ref CodeDeployApplication DeploymentGroupName: !Ref CodeDeployDeploymentGroup BeforeAllowTrafficHook: !Ref PreHookLambdaFunction AfterAllowTrafficHook: !Ref PreHookLambdaFunction