AWS CloudFormation
用户指南 (API 版本 2010-05-15)

AWS::AutoScaling::AutoScalingGroup

使用指定的名称和属性创建 Amazon EC2 Auto Scaling 组。

要配置作为该组的一部分启动的 Amazon EC2 实例,您可以指定启动模板或启动配置。我们建议您使用启动模板,以确保您可以使用最新的 Amazon EC2 功能,例如 T2 无限实例。有关更多信息,请参阅为 Auto Scaling 组创建启动模板

重要

您可以向您的 Auto Scaling 组添加 UpdatePolicy 属性,以在对组进行更改后执行滚动更新。您可以在示例部分中找到滚动更新的示例更新策略。

有关更多信息,请参阅 Amazon EC2 Auto Scaling API 参考中的 CreateAutoScalingGroupUpdateAutoScalingGroup。有关 Amazon EC2 Auto Scaling 的更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AutoScalingGroupName" : String, "AvailabilityZones" : [ String, ... ], "Cooldown" : String, "DesiredCapacity" : String, "HealthCheckGracePeriod" : Integer, "HealthCheckType" : String, "InstanceId" : String, "LaunchConfigurationName" : String, "LaunchTemplate" : LaunchTemplateSpecification, "LifecycleHookSpecificationList" : [ LifecycleHookSpecification, ... ], "LoadBalancerNames" : [ String, ... ], "MaxSize" : String, "MetricsCollection" : [ MetricsCollection, ... ], "MinSize" : String, "MixedInstancesPolicy" : MixedInstancesPolicy, "NotificationConfigurations" : [ NotificationConfiguration, ... ], "PlacementGroup" : String, "ServiceLinkedRoleARN" : String, "Tags" : [ TagProperty, ... ], "TargetGroupARNs" : [ String, ... ], "TerminationPolicies" : [ String, ... ], "VPCZoneIdentifier" : [ String, ... ] } }

属性

AutoScalingGroupName

Auto Scaling 组的名称。对于每个区域、每个账户来说,该名称必须是唯一的。

必需:否

类型:字符串

最低1

最高255

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: Replacement

AvailabilityZones

该组的可用区列表。您必须指定下列属性之一:VPCZoneIdentifierAvailabilityZones

如果您的账户支持 EC2-Classic 和 VPC,需要此属性才能将实例启动到 EC2-Classic 中。

必需:条件

类型:字符串列表

Update requires: No interruption

Cooldown

一个扩展活动完成后、另一个扩展活动开始前的时长(秒)。默认值为 300

仅在未给目标跟踪扩展策略、步进扩展策略或计划扩展指定特定于扩展的冷却并且不受支持时使用。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的扩展冷却时间

必需:否

类型:字符串

Update requires: No interruption

DesiredCapacity

Auto Scaling 组试图维护的 Amazon EC2 实例的数量。该数字必须大于或等于组的最小大小并且小于或等于组的最大大小。如果您不指定所需容量,默认值为该组的最小大小。

如果未在 Auto Scaling 组的 LaunchConfiguration 中设置 SpotPrice,Amazon EC2 Auto Scaling 将基于 DesiredCapacity 开始启动实例。在达到所需的容量之前,CloudFormation 不会将该 Auto Scaling 组标记为“成功”(通过将其状态设置为 CREATE_COMPLETE)。

如果 设置 SpotPrice,则不会将 DesiredCapacity 作为成功的标准,因为只有匹配 Spot 价格时实例才会启动。但是,在 Spot 价格匹配后,Amazon EC2 Auto Scaling 会使用 DesiredCapacity 作为组的目标容量。

必需:否

类型:字符串

Update requires: No interruption

HealthCheckGracePeriod

Amazon EC2 Auto Scaling 在检查已投入使用的 EC2 实例的运行状况之前等待的时间(以秒为单位)。

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的 Auto Scaling 实例的运行状况检查

如果要添加 ELB 运行状况检查,则必须指定此属性。

必需:条件

类型:整数

Update requires: No interruption

HealthCheckType

要用于运行状况检查的服务。有效值为 EC2 (默认值) 和 ELB。如果将您的 Auto Scaling 组配置为使用 ELB 运行状况检查,而某实例未能通过 EC2 状态检查或负载均衡器运行状况检查,则它会认为该实例运行状况不佳。

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的 Auto Scaling 实例的运行状况检查

必需:否

类型:字符串

最低1

最高32

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

InstanceId

用于创建组的启动配置的实例 ID。

当您指定实例的 ID 时,Amazon EC2 Auto Scaling 将创建新的启动配置并将其与 Auto Scaling 组关联。新启动配置从该实例派生其所有属性 (BlockDeviceMappingAssociatePublicIpAddress 除外)。

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的使用 EC2 实例创建 Auto Scaling 组

创建 Auto Scaling 组时,必须在请求中指定以下属性之一:LaunchConfigurationNameLaunchTemplateInstanceIdMixedInstancesPolicy

必需:条件

类型:字符串

Update requires: Replacement

LaunchConfigurationName

用来启动实例的 LaunchConfiguration 的名称。

如果此资源具有公有 IP 地址,并且也位于同一模板中定义的 VPC 中,则必须使用 DependsOn 属性声明 VPC 网关连接的依赖关系。

创建 Auto Scaling 组时,必须在请求中指定以下属性之一:LaunchConfigurationNameLaunchTemplateInstanceIdMixedInstancesPolicy

注意

更新 LaunchConfigurationName 时,现有 Amazon EC2 实例将继续采用它们最初启动时采用的配置运行。要更新现有实例,请为 Auto Scaling 组指定 UpdatePolicy 属性

必需:条件

类型:字符串

最低1

最高255

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

LaunchTemplate

用于启动实例的启动模板

创建 Auto Scaling 组时,必须在请求中指定以下属性之一:LaunchConfigurationNameLaunchTemplateInstanceIdMixedInstancesPolicy

注意

更新 LaunchTemplate 时,现有 Amazon EC2 实例将继续采用它们最初启动时采用的配置运行。要更新现有实例,请为 Auto Scaling 组指定 UpdatePolicy 属性

必需:条件

类型LaunchTemplateSpecification

Update requires: No interruption

LifecycleHookSpecificationList

组的生命周期挂钩,它指定在 Amazon EC2 Auto Scaling 启动或终止实例时执行的操作。

必需:否

类型LifecycleHookSpecification 的列表

Update requires: No interruption

LoadBalancerNames

与该 Auto Scaling 组关联的 Classic Load Balancer 列表。要指定 Application Load Balancer 或网络负载均衡器,请改为使用 TargetGroupARNs

必需:否

类型:字符串列表

Update requires: No interruption

MaxSize

Auto Scaling 组中的 Amazon EC2 实例的最大数量。

必需:是

类型:字符串

Update requires: No interruption

MetricsCollection

启用 Auto Scaling 组的组指标监控。这些指标默认处于禁用状态。

必需:否

类型MetricsCollection列表

Update requires: No interruption

MinSize

Auto Scaling 组中的 Amazon EC2 实例的最小数量。

必需:是

类型:字符串

Update requires: No interruption

MixedInstancesPolicy

嵌入式数据元,用于指定混合实例策略。

该策略包含多种属性,这些属性不仅定义了按需实例和 Spot 实例的分配、为 Spot 实例支付的最大价格以及 Auto Scaling 组如何分配实例类型才能满足按需容量和 Spot 容量,而且还指定了配置信息(启动模板和实例类型)。

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的具有多个实例类型和购买选项的 Auto Scaling 组

创建 Auto Scaling 组时,必须在请求中指定以下属性之一:LaunchConfigurationNameLaunchTemplateInstanceIdMixedInstancesPolicy

必需:条件

类型MixedInstancesPolicy

Update requires: No interruption

NotificationConfigurations

配置 Auto Scaling 组,使其在发生指定事件时发送通知。

必需:否

类型NotificationConfiguration 的列表

Update requires: No interruption

PlacementGroup

您希望从中启动实例的现有集群置放群组的名称。置放群组是单个可用区中的实例的逻辑分组。您不能指定多个可用区和置放组。

必需:否

类型:字符串

最低1

最高255

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

ServiceLinkedRoleARN

Auto Scaling 组用来代表您调用其他 AWS 服务的服务相关角色的 Amazon 资源名称 (ARN)。默认情况下,Amazon EC2 Auto Scaling 使用名为 AWSServiceRoleForAutoScaling 的服务相关角色(如果此角色不存在,则将创建它)。

必需:否

类型:字符串

最低1

最高1600

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

Tags

组的标签。

必需:否

类型TagProperty 的列表

Update requires: No interruption

TargetGroupARNs

要与 Auto Scaling 组关联的目标组的 Amazon 资源名称 (ARN) 的列表。

必需:否

类型:字符串列表

Update requires: No interruption

TerminationPolicies

用于选择要终止的实例的一个或一系列策略。将按照排列顺序执行策略。Amazon EC2 Auto Scaling 支持的终止策略:OldestInstanceOldestLaunchConfigurationNewestInstanceClosestToNextInstanceHourDefaultOldestLaunchTemplateAllocationStrategy

有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南中的控制在扩展期间终止哪些 Auto Scaling 实例

必需:否

类型:字符串列表

Update requires: No interruption

VPCZoneIdentifier

Virtual Private Cloud (VPC) 的子网 ID 的列表。您必须指定下列属性之一:VPCZoneIdentifierAvailabilityZones。如果使用 VPCZoneIdentifier 指定 AvailabilityZones,则为此属性指定的子网必须位于这些可用区内。

如果您的账户支持 EC2-Classic 和 VPC 中,需要此属性才能将实例启动到 VPC 中。

注意

更新 VPCZoneIdentifier 时,该方法会保留相同的 Auto Scaling 组并根据指定的子网用新实例替换旧实例。您可以指定 AWS CloudFormation 如何使用 UpdatePolicy 属性处理这些更新。

必需:条件

类型:字符串的列表

最低1

最高2047

模式[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\r\n\t]*

Update requires: No interruption

返回值

Ref

当该资源的逻辑 ID 提供给 Ref内部函数时,Ref 将返回资源名称。例如:mystack-myasgroup-NT5EUXTNTXXD

有关使用 Ref 函数的更多信息,请参阅参考

示例

以下示例创建或更改 Auto Scaling 组。要查看更多示例,请参阅 Auto Scaling 模板代码段

带有负载均衡器和多个属性的 Auto Scaling 组

以下示例将一个 Elastic Load Balancing 负载均衡器连接到一个名为 myASGroup 的 Auto Scaling 组。它会使用 MetricsCollection 属性启用两个组指标以及使用 Tags 属性创建标签。第一个标签 Environment=Production 将分配给 Auto Scaling 组和作为 Auto Scaling 组的一部分启动的任何 EC2 实例。第二个标签 Purpose=WebServerGroup 只分配给 Auto Scaling 组本身。

它还指定 Auto Scaling 组用于启动 EC2 实例的启动配置。AvailabilityZones 属性指定将创建 Auto Scaling 组的实例的可用区。Fn::GetAZs 函数调用 { "Fn::GetAZs" : "" } 会指定创建堆栈所在区域的所有可用区。Amazon EC2 Auto Scaling 可以根据 MinSizeMaxSize 的值将组中的实例数量最少扩展 1 个实例、最多扩展 4 个实例。

JSON

{ "myASGroup":{ "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "AvailabilityZones":{ "Fn::GetAZs":"" }, "LaunchConfigurationName":{ "Ref":"myLaunchConfig" }, "MinSize":"1", "MaxSize":"4", "LoadBalancerNames":[ { "Ref":"myLoadBalancer" } ], "MetricsCollection":[ { "Granularity":"1Minute", "Metrics":[ "GroupMinSize", "GroupMaxSize" ] } ], "Tags":[ { "Key":"Environment", "Value":"Production", "PropagateAtLaunch":"true" }, { "Key":"Purpose", "Value":"WebServerGroup", "PropagateAtLaunch":"false" } ] } } }

YAML

myASGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: "" LaunchConfigurationName: Ref: "myLaunchConfig" MinSize: "1" MaxSize: "4" LoadBalancerNames: - Ref: "myLoadBalancer" MetricsCollection: - Granularity: "1Minute" Metrics: - "GroupMinSize" - "GroupMaxSize" Tags: - Key: Environment Value: Production PropagateAtLaunch: "true" - Key: Purpose Value: WebServerGroup PropagateAtLaunch: "false"

使用批量更新策略滚动更新

以下示例为 Auto Scaling 组指定 UpdatePolicy 属性,并将其配置为使用具有定义更新策略设置的属性的 AutoScalingRollingUpdate 策略。

示例更新策略指示 CloudFormation 执行滚动更新。滚动更新使用基于MaxBatchSize 的小批量和基于 PauseTime 的更新批次之间的暂停时间更改 Auto Scaling 组(在此示例中,逐个实例)。MinInstancesInService 指定 CloudFormation 更新旧实例时 Auto Scaling 组内必须处于服务状态的实例的最小数量。

在堆栈执行更新时,以下 Auto Scaling 进程会暂停:HealthCheckReplaceUnhealthyAZRebalanceAlarmNotificationScheduledActions。注意:请勿暂停 LaunchTerminateAddToLoadBalancer(如果 Elastic Load Balancing 正在使用 Auto Scaling 组)进程类型,因为这可能会导致滚动更新无法正常工作。

JSON

{ "myASGroup":{ "UpdatePolicy":{ "AutoScalingRollingUpdate":{ "MinInstancesInService":"1", "MaxBatchSize":"1", "PauseTime":"PT12M5S", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions" ] } }, "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "AvailabilityZones":{ "Fn::GetAZs":{ "Ref":"AWS::Region" } }, "LaunchConfigurationName":{ "Ref":"myLaunchConfig" }, "MaxSize":"3", "MinSize":"1" } } }

YAML

myASGroup: UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: "1" MaxBatchSize: "1" PauseTime: "PT12M5S" SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: Ref: "AWS::Region" LaunchConfigurationName: Ref: "myLaunchConfig" MaxSize: "3" MinSize: "1"

带有等待条件的批量更新策略

以下示例演示了一个批量更新策略,该策略指示 CloudFormation 等到新实例向 Auto Scaling 组发送信号之后,该组才继续更新下一批实例。在 UpdatePolicy 属性中,WaitOnResourceSignals 属性将设置为 true。AWS CloudFormation 必须收到指定的 PauseTime 内每个新实例的信号,然后才能继续更新。要向 Auto Scaling 组发送信号,cfn-signal 帮助程序脚本(未显示)必须在每个实例上运行。

JSON

{ "myASGroup":{ "UpdatePolicy":{ "AutoScalingRollingUpdate":{ "MinInstancesInService":"1", "MaxBatchSize":"1", "PauseTime":"PT15M", "WaitOnResourceSignals":"true", "SuspendProcesses":[ "HealthCheck", "ReplaceUnhealthy", "AZRebalance", "AlarmNotification", "ScheduledActions" ] } }, "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "AvailabilityZones":{ "Fn::GetAZs":{ "Ref":"AWS::Region" } }, "LaunchConfigurationName":{ "Ref":"myLaunchConfig" }, "MaxSize":"3", "MinSize":"1" } } }

YAML

myASGroup: UpdatePolicy: AutoScalingRollingUpdate: MinInstancesInService: "1" MaxBatchSize: "1" PauseTime: "PT15M" WaitOnResourceSignals: "true" SuspendProcesses: - HealthCheck - ReplaceUnhealthy - AZRebalance - AlarmNotification - ScheduledActions Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: Fn::GetAZs: Ref: "AWS::Region" LaunchConfigurationName: Ref: "myLaunchConfig" MaxSize: "3" MinSize: "1"

另请参阅