

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

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

# `UpdatePolicy` 屬性
<a name="aws-attribute-updatepolicy"></a>

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

**Topics**
+ [概觀](#aws-resource-update-policies)
+ [WorkSpaces 應用程式更新政策](#aws-attribute-update-policy-app-stream-fleet)
+ [AutoScalingReplacingUpdate 政策](#cfn-attributes-updatepolicy-replacingupdate)
+ [AutoScalingRollingUpdate 政策](#cfn-attributes-updatepolicy-rollingupdate)
+ [AutoScalingScheduledAction 政策](#cfn-attributes-updatepolicy-scheduledactions)
+ [UseOnlineResharding 政策](#cfn-attributes-updatepolicy-useonlineresharding)
+ [EnableVersionUpgrade 政策](#cfn-attributes-updatepolicy-upgradeopensearchdomain)
+ [CodeDeployLambdaAliasUpdate 政策](#cfn-attributes-updatepolicy-codedeploylambdaaliasupdate)
+ [範例](#aws-attribute-updatepolicy-examples)

## 概觀
<a name="aws-resource-update-policies"></a>

透過使用 `UpdatePolicy` 屬性，可以控制下列資源的更新方式，如此處所述：
+ **[AWS::AppStream::Fleet](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-appstream-fleet.html)** – CloudFormation 可以停止和啟動機群，這會導致取代機群的執行個體。如此一來，所有執行個體都會在堆疊更新後立即套用最新變更。
+ **[https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html)** – 透過 Auto Scaling 群組，您可以使用一個或多個更新政策來控制 CloudFormation 如何處理特定更新。這些政策包括：
  + **`AutoScalingReplacingUpdate` 和 `AutoScalingRollingUpdate` 政策** – CloudFormation 可以將 Auto Scaling 群組及其執行個體取代為 `AutoScalingReplacingUpdate` 政策，或僅將執行個體取代為 `AutoScalingRollingUpdate` 政策。當您進行下列一個或多個變更時，會發生這些取代操作：
    + 變更 Auto Scaling 群組的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-launchconfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-launchconfiguration.html)。
    + 變更 Auto Scaling 群組的 `VPCZoneIdentifier` 屬性。
    + 變更 Auto Scaling 群組的 `LaunchTemplate` 屬性。
    + 變更 Auto Scaling 群組的 `PlacementGroup` 屬性。
    + 更新 Auto Scaling 群組，其中包含不符合目前 `LaunchConfiguration` 的執行個體。

    如果已指定 `AutoScalingReplacingUpdate` 與 `AutoScalingRollingUpdate` 政策屬性，請將 `WillReplace` 屬性設定為 `true`，為 `AutoScalingReplacingUpdate` 提供優先順序。
  + **`AutoScalingScheduledAction` 政策** – 使用在特定時間擴展群組的排定動作來更新包含 Auto Scaling 群組的堆疊時，適用此政策。除非已在堆疊範本中明確變更，否則 CloudFormation 無法修改群組的上下限或所需容量。此政策有助於防止可能影響排程擴展活動的任何意外更新。
+ **[https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-replicationgroup.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-replicationgroup.html)** - CloudFormation 可以透過新增或移除碎片來修改複寫群組的碎片，而不是替換整個資源。
+ **[https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opensearchservice-domain.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opensearchservice-domain.html)** 和 **[https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticsearch-domain.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticsearch-domain.html)** (舊有) – CloudFormation 可以將 OpenSearch Service 網域升級為 OpenSearch 或 Elasticsearch 的新版本，而無須取代整個資源。
+ **[https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-alias.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-alias.html)** – CloudFormation 會在版本於別名上變更時執行 CodeDeploy 部署。

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

## WorkSpaces 應用程式更新政策
<a name="aws-attribute-update-policy-app-stream-fleet"></a>

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

### 語法
<a name="aws-attribute-update-policy-app-stream-fleet-syntax"></a>

#### JSON
<a name="aws-attribute-update-policy-app-stream-fleet-syntax-json"></a>

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

#### YAML
<a name="aws-attribute-update-policy-app-stream-fleet-syntax-yaml"></a>

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

`StopBeforeUpdate`  <a name="cfn-attributes-updatepolicy-replacingupdate-StopBeforeUpdate"></a>
在更新前停止指定機群。  
*必要*：否

`StartAfterUpdate`  <a name="cfn-attributes-updatepolicy-replacingupdate-StartAfterUpdate"></a>
在更新後啟動指定機群。  
*必要*：否

## AutoScalingReplacingUpdate 政策
<a name="cfn-attributes-updatepolicy-replacingupdate"></a>

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

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

### 語法
<a name="cfn-attributes-updatepolicy-replacingupdate-syntax"></a>

#### JSON
<a name="aws-attribute-updatepolicy-replacingupdate-syntax.json"></a>

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

#### YAML
<a name="aws-attribute-updatepolicy-replacingupdate-syntax.yaml"></a>

```
UpdatePolicy:
  AutoScalingReplacingUpdate:
    WillReplace: Boolean
```

### Properties
<a name="cfn-attributes-updatepolicy-replacingupdate-properties"></a>

`WillReplace`  <a name="cfn-attributes-updatepolicy-replacingupdate-willreplace"></a>
指定是否要在更新期間替換 Auto Scaling 群組及其所包含的執行個體。在替換過程中，CloudFormation 會保留舊群組，直到完成建立新的群組。如果更新失敗，CloudFormation 可復原到舊 Auto Scaling 群組並刪除新 Auto Scaling 群組。  
雖然 CloudFormation 建立新的群組，但它不會分離或連接任何執行個體。成功建立新 Auto Scaling 群組後，CloudFormation 將在清除程序中刪除舊 Auto Scaling 群組。  
當您設定 `WillReplace` 參數時，請記住指定相符的 [`CreationPolicy` 屬性](aws-attribute-creationpolicy.md)。如果執行個體的最低數量 (以 `MinSuccessfulInstancesPercent` 屬性指定) 未能在 `Timeout` 期間 (在 `CreationPolicy` 屬性中指定) 成功發出訊號，替換更新將會失敗，CloudFormation 將轉返到舊 Auto Scaling 群組。  
*類型*：布林值  
*必要*：否

## AutoScalingRollingUpdate 政策
<a name="cfn-attributes-updatepolicy-rollingupdate"></a>

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

使用 `AutoScalingRollingUpdate` 政策時的考量事項：
+ 當 CloudFormation 復原至先前版本時，會使用目前堆疊更新前的範本中所指定的 `UpdatePolicy` 組態。例如，您在 `UpdatePolicy` 中將 `MaxBatchSize` 從 1 變更為 10，執行堆疊更新，而該更新失敗。CloudFormation 復原時會使用 1 作為批次上限，而不是 10。為了避免這種情況，請在可能啟動滾動更新的 Auto Scaling 群組任何更新之前，在個別更新中對 `UpdatePolicy` 進行變更。
+ CloudFormation 建議指定 `SuspendProcesses` 屬性，以暫時暫停可能干擾滾動更新並導致其失敗的 Amazon EC2 Auto Scaling 程序。如需詳細資訊，請參閱[如何在更新 CloudFormation 堆疊時更新 Auto Scaling 群組？](https://repost.aws/knowledge-center/auto-scaling-group-rolling-updates)
+ CloudFormation 支援在啟動或終止執行個體時使用 Amazon EC2 Auto Scaling lifecycle hook。這讓您有時間在執行個體上執行自訂動作，然後再移至下一個狀態。為了確保新執行個體達到 `InService` 狀態，請在自訂動作完成時，使用 `CONTINUE` 結果完成 lifecycle hook。根據預設，如果未收到回應且 lifecycle hook 逾時，執行個體啟動會被視為失敗並被捨棄。如果沒有執行個體達到 `InService` 狀態，滾動更新最終將失敗。
+ 諸如執行個體維護政策、終止政策和縮減保護等 Amazon EC2 Auto Scaling 功能不適用於 CloudFormation 滾動更新。相應地規劃滾動更新。
+ 如果使用 `AutoScalingRollingUpdate` 政策並移除置放群組設定，將從 Auto Scaling 群組和 CloudFormation 範本中移除置放群組。此外，這會觸發滾動更新，因此新執行個體不會在置放群組中啟動。

### 語法
<a name="cfn-attributes-updatepolicy-rollingupdate-syntax"></a>

#### JSON
<a name="aws-attribute-updatepolicy-rollingupdate-syntax.json"></a>

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

#### YAML
<a name="aws-attribute-updatepolicy-rollingupdate-syntax.yaml"></a>

```
UpdatePolicy:
  AutoScalingRollingUpdate:
    MaxBatchSize: Integer
    MinActiveInstancesPercent: Integer
    MinInstancesInService: Integer
    MinSuccessfulInstancesPercent: Integer
    PauseTime: String
    SuspendProcesses:
      - List of processes
    WaitOnResourceSignals: Boolean
```

### Properties
<a name="aws-attribute-updatepolicy-rollingupdate-properties"></a>

`MaxBatchSize`  <a name="cfn-attributes-updatepolicy-rollingupdate-maxbatchsize"></a>
指定可同時取代的執行個體數目上限。  
*預設*：`1`  
*上限*：`100`  
*類型*：整數  
*必要*：否

`MinActiveInstancesPercent`  <a name="cfn-attributes-updatepolicy-rollingupdate-minactiveinstancespercent"></a>
指定在滾動更新期間，Auto Scaling 群組中必須處於 `InService` 狀態的執行個體相對於該群組所需容量的百分比，以便成功更新。可指定介從 0 到 100 之間的值。CloudFormation 會四捨五入至最接近的 10%。例如，如果更新五個執行個體，且最低 `InService` 百分比為 50，則至少必須有三個執行個體處於 `InService` 狀態。如果執行個體未在 1 小時的固定時間內轉換為 `InService` 狀態，CloudFormation 會假設執行個體未更新。  
當 `AWS::AutoScaling::AutoScalingGroup` 資源的 `DesiredCapacity` 屬性設定為高於 Auto Scaling 群組的目前所需容量時，在 `UpdatePolicy` 中設定 `MinActiveInstancesPercent` 也會影響執行個體的啟動。  
*預設*：`100`  
*類型*：整數  
*必要*：否

`MinInstancesInService`  <a name="cfn-attributes-updatepolicy-rollingupdate-mininstancesinservice"></a>
指定在 CloudFormation 更新舊執行個體時，Auto Scaling 群組中必須為服務中的執行個體的最少數量。此值必須小於 Auto Scaling 群組的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html#cfn-autoscaling-autoscalinggroup-maxsize](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html#cfn-autoscaling-autoscalinggroup-maxsize)。  
建議您將 `MinInstancesInService` 屬性的值至少設定為 Auto Scaling 群組的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html#cfn-autoscaling-autoscalinggroup-minsize](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html#cfn-autoscaling-autoscalinggroup-minsize)。這可避免因 0 個執行個體提供客戶流量，而導致滾動更新期間的潛在可用性問題。
*預設*：`0`  
*類型*：整數  
*必要*：否

`MinSuccessfulInstancesPercent`  <a name="cfn-attributes-updatepolicy-rollingupdate-minsuccessfulinstancespercent"></a>
指定 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`  <a name="cfn-attributes-updatepolicy-rollingupdate-pausetime"></a>
CloudFormation 在變更一個批次的執行個體之後，為提供時間讓這些執行個體啟動軟體應用程式而暫停的時間量。  
以 [ISO8601 持續時間格式](https://en.wikipedia.org/wiki/ISO_8601#Durations)指定 `PauseTime` (格式為 `PT#H#M#S`，其中的各個 *\$1* 分別為小時、分鐘、秒鐘的數字)。`PauseTime` 上限為 1 小時 (`PT1H`)。  
當 `WaitOnResourceSignals` 設定為 `true` 時，`PauseTime` 會作為逾時值。它會透過增加 `AWS::AutoScaling::AutoScalingGroup` 資源的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html#cfn-autoscaling-autoscalinggroup-desiredcapacity](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-autoscaling-autoscalinggroup.html#cfn-autoscaling-autoscalinggroup-desiredcapacity) 屬性，決定 CloudFormation 等待從滾動更新期間被取代的執行個體以及新增的新執行個體接收有效訊號所需數量的最長時間。如果在 CloudFormation 收到預期的訊號之前超過 `PauseTime`，則更新失敗。為獲得最佳結果，請指定可讓您的應用程式有足夠時間啟動的時段。如果需要復原更新，較短的 `PauseTime` 可能會導致復原失敗。
*預設*：`PT5M` (5 分鐘)，若 `WaitOnResourceSignals` 屬性設為 `true`。否則，不會設定預設值。  
*類型：*字串  
*必要*：否

`SuspendProcesses`  <a name="cfn-attributes-updatepolicy-rollingupdate-suspendprocesses"></a>
指定 Auto Scaling 程序在堆疊更新期間暫停。暫停程序可避免 Auto Scaling 影響堆疊更新。例如，您可以暫停警示，這樣 Amazon EC2 Auto Scaling 就不會啟動與警示相關的擴展政策。如需有效值，請參閱《*Amazon EC2 Auto Scaling 使用者指南*》中的[程序類型](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html#process-types)。  
*預設*：未指定  
*類型*：Auto Scaling 程序清單  
*必要*：否

`WaitOnResourceSignals`  <a name="cfn-attributes-updatepolicy-rollingupdate-waitonresourcesignals"></a>
指定 CloudFormation 是否在繼續更新之前等待來自新執行個體的成功訊號。CloudFormation 會等待指定的 `PauseTime` 持續時間，以接收成功訊號。  
若要將訊號傳送至 Auto Scaling 群組，請使用 [cfn-signal](cfn-signal.md) 協助程式指令碼。對於與 Elastic Load Balancing 相關聯的 Auto Scaling 群組，請考慮新增運作狀態檢查，以確保在使用 [cfn-init](cfn-init.md) 協助程式指令碼發出成功訊號之前，執行個體運作狀態良好。如需範例，請參閱 [GitHub 儲存庫](https://github.com/aws-cloudformation/aws-cloudformation-templates/tree/main/AutoScaling)中 Amazon EC2 Auto Scaling 滾動式更新範例範本中的 `verify_instance_health` 命令。  
*預設*：`false`  
*類型*：布林值  
*必要*：有條件限制。如果指定 `MinSuccessfulInstancesPercent` 屬性，則必須將 `WaitOnResourceSignals` 屬性設為 `true`。

## AutoScalingScheduledAction 政策
<a name="cfn-attributes-updatepolicy-scheduledactions"></a>

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

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

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



### 語法
<a name="cfn-attributes-updatepolicy-scheduledactions-syntax"></a>

#### JSON
<a name="aws-attribute-updatepolicy-scheduledactions-syntax.json"></a>

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

#### YAML
<a name="aws-attribute-updatepolicy-scheduledactions-syntax.yaml"></a>

```
UpdatePolicy:
  AutoScalingScheduledAction:
    IgnoreUnmodifiedGroupSizeProperties: Boolean
```

### Properties
<a name="cfn-attributes-updatepolicy-scheduledactions-properties"></a>

`IgnoreUnmodifiedGroupSizeProperties`  <a name="cfn-attributes-updatepolicy-scheduledactions-ignoreunmodifiedgroupsizeproperties"></a>
如為 `true`，在堆疊更新期間，CloudFormation 會忽略您現有 Auto Scaling 群組與您範本之 `AWS::AutoScaling::AutoScalingGroup` 資源所描述 Auto Scaling 群組之間的群組大小屬性差異。如果您修改範本中的任何群組大小屬性值，CloudFormation 將使用修改後的值並更新您的 Auto Scaling 群組。  
在堆疊復原期間會忽略此屬性。
*預設*：`false`  
*類型*：布林值  
*必要*：否

## UseOnlineResharding 政策
<a name="cfn-attributes-updatepolicy-useonlineresharding"></a>

若要透過新增或移除碎片來修改複寫群組的碎片，而不是替換整個 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-replicationgroup.html) 資源，請使用 `UseOnlineResharding` 更新政策。

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

`UseOnlineResharding` 更新政策沒有屬性。

將 `UseOnlineResharding` 更新政策設定為 `true` 時的一些考量事項：
+ 我們強烈建議您將 `NumNodeGroups` 和 `NodeGroupConfiguration` 屬性作為特定堆疊更新操作中唯一的更新來執行更新。

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

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

  在建立複寫群組時，如果您沒有為每個節點群組指定 ID，ElastiCache 會自動為每個節點群組產生 ID。若要更新複寫群組而不被中斷，請使用 ElastiCache 主控台 ([https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)) 或 [DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) 擷取該複寫群組中所有節點群組的 ID。然後，在嘗試新增或移除碎片之前，請為堆疊範本中的每個節點群組指定 ID。
**注意**  
最佳實務是當您在堆疊範本中建立複寫群組時，就為您指定的每個節點群組包含 ID。

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

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

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

如需修改複寫群組的詳細資訊，請參閱 *Amazon ElastiCache API Reference* (《Amazon ElastiCache API 參考》) 中的 [ModifyReplicationGroupShardConfiguration](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroupShardConfiguration.html)。

### 語法
<a name="cfn-attributes-updatepolicy-useonlineresharding-syntax"></a>

#### JSON
<a name="cfn-attributes-updatepolicy-useonlineresharding-syntax.json"></a>

```
"UpdatePolicy" : {
  "UseOnlineResharding" : Boolean
}
```

#### YAML
<a name="cfn-attributes-updatepolicy-useonlineresharding-syntax.yaml"></a>

```
UpdatePolicy:
  UseOnlineResharding: Boolean
```

## EnableVersionUpgrade 政策
<a name="cfn-attributes-updatepolicy-upgradeopensearchdomain"></a>

若要將 OpenSearch Service 網域升級為 OpenSearch 或 Elasticsearch 的新版本，而非取代整個 [AWS::OpenSearchService::Domain](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opensearchservice-domain.html) 或 [AWS::Elasticsearch::Domain](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticsearch-domain.html) 資源，請使用 `EnableVersionUpgrade` 更新政策。

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

`EnableVersionUpgrade` 更新政策沒有屬性。

如需詳細資訊，請參閱《Amazon OpenSearch Service 開發人員指南》中的[升級 OpenSearch Service 網域](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/version-migration.html)。

### 語法
<a name="cfn-attributes-updatepolicy-upgradeopensearchdomain-syntax"></a>

#### JSON
<a name="cfn-attributes-updatepolicy-upgradeopensearchdomain-syntax.json"></a>

```
"UpdatePolicy" : {
  "EnableVersionUpgrade" : Boolean
}
```

#### YAML
<a name="cfn-attributes-updatepolicy-upgradeopensearchdomain-syntax.yaml"></a>

```
UpdatePolicy:
  EnableVersionUpgrade: Boolean
```

## CodeDeployLambdaAliasUpdate 政策
<a name="cfn-attributes-updatepolicy-codedeploylambdaaliasupdate"></a>

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

### 語法
<a name="cfn-attributes-updatepolicy-codedeploylambdaaliasupdate-syntax"></a>

#### JSON
<a name="aws-attribute-updatepolicy-codedeploylambdaaliasupdate-syntax.json"></a>

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

#### YAML
<a name="aws-attribute-updatepolicy-codedeploylambdaaliasupdate-syntax.yaml"></a>

```
UpdatePolicy:
  CodeDeployLambdaAliasUpdate:
    AfterAllowTrafficHook: String
    ApplicationName: String
    BeforeAllowTrafficHook: String
    DeploymentGroupName: String
```

### Properties
<a name="aws-attribute-updatepolicy-codedeploylambdaaliasupdate-properties"></a>

`AfterAllowTrafficHook`  <a name="cfn-attributes-updatepolicy-codedeploylambdaaliasupdate-afterallowtraffichook"></a>
在流量路由完成後，要執行的 Lambda 函數名稱。  
*必要*：否  
*類型：*字串

`ApplicationName`  <a name="cfn-attributes-updatepolicy-codedeploylambdaaliasupdate-applicationname"></a>
CodeDeploy 應用程式名稱。  
*必要*：是  
*類型：*字串

`BeforeAllowTrafficHook`  <a name="cfn-attributes-updatepolicy-codedeploylambdaaliasupdate-beforeallowtraffichook"></a>
在流量路由開始前，要執行的 Lambda 函數名稱。  
*必要*：否  
*類型：*字串

`DeploymentGroupName`  <a name="cfn-attributes-updatepolicy-codedeploylambdaaliasupdate-deploymentgroupname"></a>
CodeDeploy 部署群組的名稱。這是設置流量轉換政策的位置。  
*必要*：是  
*類型：*字串

如需為 `AWS::Lambda::Alias` 資源指定 `UpdatePolicy` 屬性的範例，請參閱 [Lambda 別名更新政策](#aws-resource-lambda-alias-example)。

## 範例
<a name="aws-attribute-updatepolicy-examples"></a>

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

### 將 `UpdatePolicy` 新增至 Auto Scaling 群組
<a name="aws-attribute-updatepolicy-example-1"></a>

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

#### JSON
<a name="attribute-updatepolicy-example-1.json"></a>

```
"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
<a name="attribute-updatepolicy-example-1.yaml"></a>

```
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 政策
<a name="attribute-updatepolicy-AutoScalingReplacingUpdate"></a>

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

#### JSON
<a name="attribute-updatepolicy-example-2.json"></a>

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

#### YAML
<a name="attribute-updatepolicy-example-2.yaml"></a>

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

### 在更新 cfn-init 協助程式指令碼的中繼資料時維持可用性
<a name="aws-attribute-updatepolicy-cfn-init-metadata"></a>

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

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

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

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

### 原始範本
<a name="aws-attribute-updatepolicy-cfn-init-metadata-original"></a>

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

### 更新的邏輯 ID
<a name="aws-attribute-updatepolicy-cfn-init-metadata-updated"></a>

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

### Lambda 別名更新政策
<a name="aws-resource-lambda-alias-example"></a>

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

#### JSON
<a name="aws-attribute-updatepolicy-codedeploylambda.json"></a>

```
"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
<a name="aws-attribute-updatepolicy-codedeploylambda-example.yaml"></a>

```
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
```