UpdatePolicy 属性 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

UpdatePolicy 属性

使用 UpdatePolicy 属性来指定 Amazon CloudFormation 在堆栈更新操作期间将如何处理特定资源的更新。

概述

通过使用 UpdatePolicy 属性,您可以控制以下资源的更新方式,如下所述:

  • AWS::AppStream::Fleet – CloudFormation 可以停止和启动实例集,这会导致实例集中的实例被替换。这样,所有实例都将在堆栈更新后立即应用最新的更改。

  • AWS::AutoScaling::AutoScalingGroup –借助自动扩缩组,您可以使用一个或多个更新策略来控制 CloudFormation 处理特定更新的方式。这些策略包括:

    • AutoScalingReplacingUpdateAutoScalingRollingUpdate 策略 – CloudFormation 可以使用 AutoScalingReplacingUpdate 策略来替换自动扩缩组及其实例,也可以使用 AutoScalingRollingUpdate 策略仅替换实例。这些替换操作将在您执行下列一项或多项更改时发生:

      • 更改自动扩缩组的 AWS::AutoScaling::LaunchConfiguration

      • 更改自动扩缩组的 VPCZoneIdentifier 属性。

      • 更改自动扩缩组的 LaunchTemplate 属性。

      • 更改自动扩缩组的 PlacementGroup 属性。

      • 更新包含与当前 LaunchConfiguration 不匹配的实例的自动扩缩组。

      如果同时指定 AutoScalingReplacingUpdateAutoScalingRollingUpdate 策略,则将 WillReplace 属性设置为 true 将使 AutoScalingReplacingUpdate 优先。

    • AutoScalingScheduledAction 策略 – 更新包含具有计划操作的自动扩缩组的堆栈时将应用此策略,这些计划操作会在特定时间扩缩该组。除非已在堆栈模板中显式更改,否则 CloudFormation 无法修改该组的最小大小、最大大小或所需容量。此策略有助于防止任何可能干扰计划扩缩活动的意外更新。

  • AWS::ElastiCache::ReplicationGroup – CloudFormation 可以通过增加或移除分片来修改副本组的分片,而不是替换整个资源。

  • AWS::OpenSearchService::DomainAWS::Elasticsearch::Domain(旧版)– CloudFormation 可以将 OpenSearch Service 域升级到新版本的 OpenSearch 或 Elasticsearch,而无需替换整个资源。

  • AWS::Lambda::Alias – CloudFormation 可以在别名发生版本更改时执行 CodeDeploy 部署。

以下章节描述了每种资源类型所支持的 UpdatePolicy 属性的语法和特性。

AppStream 2.0 更新策略

要在更新之前停止 AppStream 2.0 实例集并在更新后将其重启,请使用 AppStream 2.0 更新策略。

语法

JSON

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

YAML

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

更新前停止指定的实例集。

必需:否

StartAfterUpdate

更新后启动指定的实例集。

必需:否

AutoScalingReplacingUpdate 策略

要替换自动扩缩组及其包含的实例,请使用 AutoScalingReplacingUpdate 策略。

在尝试更新之前,请确保您具有足够的 Amazon EC2 容量来容纳旧的和新的自动扩缩组。

语法

JSON

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

YAML

UpdatePolicy: AutoScalingReplacingUpdate: WillReplace: Boolean

属性

WillReplace

指定在更新期间是否替换自动扩缩组及其包含的实例。在替换期间,CloudFormation 将保留旧组,直至完成创建新组。如果更新失败,CloudFormation 可以回滚到旧的自动扩缩组,并删除新的自动扩缩组。

当 CloudFormation 创建新组时,不会分离或附加任何实例。在成功创建新的自动扩缩组后,CloudFormation 在清除过程中,删除旧的自动扩缩组。

在设置 WillReplace 参数时,请记住指定匹配的 CreationPolicy。如果在 Timeout 期间(在 CreationPolicy 策略中指定)发出成功信号的实例未达到最小实例数(由 MinSuccessfulInstancesPercent 属性指定),替换更新将失败,并且 CloudFormation 回滚到旧的自动扩缩组。

类型:布尔值

必需:否

AutoScalingRollingUpdate 策略

要对自动扩缩组中的实例执行滚动更新,而不是等待扩缩活动逐渐用较新的实例替换旧实例,请使用 AutoScalingRollingUpdate 策略。此策略让您可以灵活指定 CloudFormation 是分批替换自动扩缩组中的实例,还是一次性全部替换自动扩缩组中的实例,但不替换整个资源。

使用 AutoScalingRollingUpdate 策略时的注意事项:

  • 回滚更新时,CloudFormation 会使用在当前堆栈更新之前在模板中指定的 UpdatePolicy 配置。例如,假设您在 UpdatePolicy 中将 MaxBatchSize 从 1 更改为 10 并执行堆栈更新,但更新失败了。CloudFormation 在回滚时将以 1 为最大批次大小,而不是 10。要避免这种情况,请首先通过单独的更新更改 UpdatePolicy,然后再进行任何可能启动滚动更新的自动扩缩组更新。

  • CloudFormation 建议指定 SuspendProcesses 属性来临时暂停可能会干扰滚动更新并导致更新失败的 Amazon EC2 Auto Scaling 进程。有关更多信息,请参阅如何在更新 CloudFormation 堆栈时更新我的自动扩缩组?

  • CloudFormation 支持在启动或终止实例时使用 Amazon EC2 Auto Scaling 生命周期挂钩。这样,在实例进入下一个状态之前,您将有时间在实例上执行自定义操作。要确保新实例达到 InService 状态,请在自定义操作完成后完成生命周期挂钩并确保返回了 CONTINUE 结果。默认情况下,如果未收到任何响应并且生命周期挂钩超时,实例启动将被视为失败并被放弃。如果没有实例达到 InService 状态,则滚动更新最终将会失败。

  • 实例维护策略、终止策略和横向缩减保护等 Amazon EC2 Auto Scaling 功能不支持 CloudFormation 滚动更新。请相应地计划您的滚动更新。

  • 如果您使用 AutoScalingRollingUpdate 策略并移除置放群组设置,则该置放群组将从自动扩缩组和 CloudFormation 模板中移除。此外,这还会触发滚动更新,因此新实例不会启动到置放群组中。

语法

JSON

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

属性

MaxBatchSize

指定可以同时替换的最大实例数量。

默认值1

最大值100

类型:整数

必需:否

MinActiveInstancesPercent

指定要确保更新成功,自动扩缩组中必须处于 InService 状态的实例相对于滚动更新期间该组所需容量的百分比。可以指定从 0 到 100 的值。CloudFormation 取整到最接近的十分位值。例如,如果您更新五个实例,最小 InService 百分比为 50,则至少有三个实例必须处于 InService 状态。如果实例未在 1 小时的固定时间内转换为 InService 状态,則 CloudFormation 会假定该实例未更新。

UpdatePolicy 中设置 MinActiveInstancesPercent 还会影响在 AWS::AutoScaling::AutoScalingGroup 资源中的 DesiredCapacity 属性高于该自动扩缩组当前所需容量时启动的实例。

默认值100

类型:整数

必需:否

MinInstancesInService

指定当 Auto Scaling 更新旧实例时,CloudFormation 组中必须处于服务状态的实例的最小数目。该值必须小于自动扩缩组的 MaxSize

警告

我们建议您将 MinInstancesInService 属性的值至少设置为自动扩缩组的 MinSize。这样,在滚动更新期间,可以避免由于没有实例为客户流量提供服务而导致的潜在可用性问题。

默认值0

类型:整数

必需:否

MinSuccessfulInstancesPercent

指定 Auto Scaling 回滚更新中必须有多少实例 (百分比) 发送成功信号,才认为更新成功。可以指定从 0 到 100 的值。CloudFormation 取整到最接近的十分位值。例如,如果您更新五个实例,最小成功百分比为 50,则必须有三个实例发送成功信号才行。如果实例未在 PauseTime 属性中指定的时间内发出信号,则 CloudFormation 会假定实例未更新。

建议您将 MinSuccessfulInstancesPercent 属性的值设置为大于 0 的值。将 MinSuccessfulInstancesPercent 属性将设定为 0 时,CloudFormation 会等待 0% 的容量实例进入 InService 状态。MinSuccessfulInstancesPercent 在将自动扩缩组的状态视为 UPDATE_COMPLETE 之前立即返回,以继续进入堆栈模板中定义的后续资源。如果在 CloudFormation 模板中定义了其他自动扩缩组,则它们将同时更新。当所有自动扩缩组在 0% 的容量实例处于 InService 状态时同时部署时,您将遇到可用性问题,因为有 0 个实例提供客户流量。

默认值100

类型:整数

必需:否

PauseTime

在对一批实例进行更改以便为这些实例提供启动软件应用程序的时间后,CloudFormation 暂停的时间量。

使用 ISO8601 持续时间格式(在 PT#H#M#S 格式中,每个 # 分别表示小时数、分钟数和秒数)指定 PauseTime。最大 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 用户指南》中的 Types of processes

默认值:未指定

类型:Auto Scaling 流程列表

必需:否

WaitOnResourceSignals

指定在继续更新之前,CloudFormation 是否等待来自新实例的成功信号。CloudFormation 在指定的 PauseTime 持续时间内等待成功信号。

要将信号发送到自动扩缩组,请使用 cfn-signal 帮助程序脚本或 SignalResource API。对于与弹性负载均衡关联的自动扩缩组,可以考虑使用 cfn-init 帮助程序脚本添加运行状况检查,以确保在实例运行状况良好后再发出成功信号。有关示例,请参阅 GitHub 存储库中 Amazon EC2 Auto Scaling 滚动更新示例模板中的 verify_instance_health 命令。

默认值false

类型:布尔值

必填:条件性。如果指定 MinSuccessfulInstancesPercent 属性,则必须将 WaitOnResourceSignals 属性设为 true

AutoScalingScheduledAction 策略

要指定在 AWS::AutoScaling::AutoScalingGroup 资源具有关联的计划操作时 CloudFormation 如何处理 MinSizeMaxSizeDesiredCapacity 属性的更新,请使用 AutoScalingScheduledAction 策略。

利用计划操作,自动扩缩组的组大小属性可随时更改。当您利用自动扩缩组和计划操作更新堆栈时, CloudFormation 始终将您的自动扩缩组的组大小属性值设置为模板的 AWS::AutoScaling::AutoScalingGroup 资源中定义的值,即使计划操作已生效。

如果您不希望 CloudFormation 在您具有生效的计划操作时,更改任何组大小属性值,请使用 AutoScalingScheduledAction 更新策略并将 IgnoreUnmodifiedGroupSizeProperties 设置为 true 来阻止 CloudFormation 更改 MinSizeMaxSizeDesiredCapacity 属性,除非您已在模板中修改这些值。

语法

JSON

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

属性

IgnoreUnmodifiedGroupSizeProperties

如果为 true,则 CloudFormation 在堆栈更新期间,忽略当前自动扩缩组与模板的 AWS::AutoScaling::AutoScalingGroup 资源中所述自动扩缩组之间的组大小属性差异。如果修改了模板中的任何组大小属性值,CloudFormation 将使用修改后的值并更新自动扩缩组。

默认值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 将在指定数量的槽之间平均分配密钥空间。以后,无法对其进行更新。因此,在以这种方式更新节点组数后,应删除从堆栈模板中为每个 NodeGroupConfigurationSlots 属性指定的值,因为它不再反映每个节点组中的实际值。

  • 实际节点组删除结果可能会有所不同。

    在指定的 NumNodeGroups 值小于当前节点组数时,CloudFormation 指示 ElastiCache 删除所需数量的节点组以达到指定的节点数。不过,ElastiCache 可能并非始终能够删除所需数量的节点组。如果 ElastiCache 无法删除所需数量的节点组,CloudFormation 将生成一个堆栈事件,以提醒您该问题。如果 ElastiCache 无法删除任何节点组,CloudFormation 资源更新将失败。

有关修改复制组的更多信息,请参阅《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 更新策略没有任何属性。

有关升级 OpenSearch Service 域的更多信息,请参阅《Amazon OpenSearch Service 开发人员指南》中的 UpgradeDomain

语法

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

属性

AfterAllowTrafficHook

要在流量路由完成后运行的 Lambda 函数的名称。

必需:否

类型:字符串

ApplicationName

CodeDeploy 应用程序的名称。

必需:是

类型:字符串

BeforeAllowTrafficHook

要在流量路由开始前运行的 Lambda 函数的名称。

必需:否

类型:字符串

DeploymentGroupName

CodeDeploy 部署组的名称。这是设置流量转移策略的位置。

必需:是

类型:字符串

有关为 AWS::Lambda::Alias 资源指定 UpdatePolicy 属性的示例,请参阅 Lambda 别名更新策略

示例

以下示例说明如何将更新策略添加到自动扩缩组,以及如何在更新元数据时维护可用性。

UpdatePolicy 添加到自动扩缩组中

以下示例说明如何添加更新策略。更新期间,自动扩缩组将更新两批实例并至少保留一个实例可用。由于设置了 WaitOnResourceSignals 标记,自动扩缩组将等待添加到组中的新实例发送信号。新实例必须在其更新下一批实例之前,向自动扩缩组发送信号。

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 策略

以下示例声明在更新期间强制替换关联的自动扩缩组的策略。要使更新成功,必须有一定百分比的实例 (由 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'

在更新 cfn-init 帮助程序脚本的元数据时维护可用性

在实例上安装软件应用程序时,您使用 AWS::CloudFormation::Init 元数据键和 cfn-init 帮助程序脚本来引导自动扩缩组中的实例。CloudFormation 安装软件包、运行命令并执行元数据中描述的其他引导操作。

在仅更新元数据(例如:在将软件包更新为另一个版本时)时,您使用 cfn-hup 帮助程序守护进程检测和应用更新。不过,cfn-hup 守护进程会在每个实例上单独运行。如果守护进程同时在所有实例上运行,则您的应用程序或服务可能在更新期间不可用。要确保可用性,您可以强制滚动更新,以便 CloudFormation 一次更新一批实例。

重要

强制滚动更新要求 CloudFormation 创建新实例,然后删除旧实例。旧实例中存储的任何信息都将丢失。

要强制滚动更新,请更改启动配置资源的逻辑 ID,然后更新堆栈和任何指向原始逻辑 ID 的引用(例如,关联的自动扩缩组)。CloudFormation 会触发自动扩缩组的滚动更新,以替换所有实例。

原始模板

"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