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

AWS::AutoScaling::LifecycleHook

定义 Amazon EC2 Auto Scaling 组的生命周期挂钩。生命周期挂钩指定在 Amazon EC2 Auto Scaling 启动或终止实例时要执行的操作。在使用生命周期挂钩时,Auto Scaling 组在实例启动后(在它投入运行之前)或在实例终止时(在它完全终止前)将其暂停。

有关更多信息,请参阅 Amazon EC2 Auto Scaling API 参考 中的 PutLifecycleHook 以及 Amazon EC2 Auto Scaling 用户指南 中的 Amazon EC2 Auto Scaling 生命周期挂钩

语法

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

JSON

{ "Type" : "AWS::AutoScaling::LifecycleHook", "Properties" : { "AutoScalingGroupName" : String, "DefaultResult" : String, "HeartbeatTimeout" : Integer, "LifecycleHookName" : String, "LifecycleTransition" : String, "NotificationMetadata" : String, "NotificationTargetARN" : String, "RoleARN" : String } }

YAML

Type: AWS::AutoScaling::LifecycleHook Properties: AutoScalingGroupName: String DefaultResult: String HeartbeatTimeout: Integer LifecycleHookName: String LifecycleTransition: String NotificationMetadata: String NotificationTargetARN: String RoleARN: String

属性

AutoScalingGroupName

生命周期挂钩的 Auto Scaling 组的名称。

必需:是

类型:字符串

最低1

最高1600

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

Update requires: Replacement

DefaultResult

生命周期挂钩超时结束时或发生意外失败时 Auto Scaling 组执行的操作。有效值为 CONTINUEABANDON(默认值)。

必需:否

类型:字符串

Update requires: No interruption

HeartbeatTimeout

在生命周期挂钩超时之前经过的时间长度(以秒为单位)。如果生命周期挂钩超时,则 Amazon EC2 Auto Scaling 会执行您在 DefaultResult 属性中指定的操作。

必需:否

类型:整数

Update requires: No interruption

LifecycleHookName

生命周期挂钩的名称。

必需:否

类型:字符串

最低1

最高255

模式[A-Za-z0-9\-_\/]+

Update requires: Replacement

LifecycleTransition

要将生命周期挂钩挂载到的实例状态。有效值为:

  • autoscaling:EC2_INSTANCE_LAUNCHING

  • autoscaling:EC2_INSTANCE_TERMINATING

必需:是

类型:字符串

Update requires: No interruption

NotificationMetadata

在 Amazon EC2 Auto Scaling 向通知目标发送消息时随时包含的其他信息。

必需:否

类型:字符串

最低1

最高1023

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

Update requires: No interruption

NotificationTargetARN

通知目标的 Amazon 资源名称 (ARN),Amazon EC2 Auto Scaling 使用该目标在实例处于生命周期挂钩的转换状态时发出通知。可以指定 Amazon SQS 队列或 Amazon SNS 主题。通知消息包含以下信息:生命周期操作令牌、用户账户 ID、Auto Scaling 组名称、生命周期挂钩名称、实例 ID、生命周期转换和通知元数据。

必需:否

类型:字符串

最低1

最高1600

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

Update requires: No interruption

RoleARN

IAM 角色的 ARN,它允许 Auto Scaling 组发布到指定的通知目标(例如,Amazon SNS 主题或 Amazon SQS 队列)。有关创建此角色的信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的准备通知

必需:否

类型:字符串

最低1

最高1600

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

Update requires: No interruption

返回值

Ref

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

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

示例

以下示例指定生命周期挂钩。

实例终止的生命周期挂钩

以下示例指定一个生命周期挂钩,该挂钩支持在实例终止时的自定义操作。它使用 Ref 内部函数来引用在同一模板中的其他位置声明的 Auto Scaling 组(其逻辑名称为 myASGroup)。

请注意,代码段使用 NotificationTargetARNRoleARN 属性指定在发生生命周期操作时用于接收通知的 Amazon SNS 主题和 IAM 角色。

JSON

{ "myLifecycleHook":{ "Type":"AWS::AutoScaling::LifecycleHook", "Properties":{ "AutoScalingGroupName":{ "Ref":"myASGroup" }, "LifecycleTransition":"autoscaling:EC2_INSTANCE_TERMINATING", "NotificationTargetARN":{ "Ref":"lifecycleHookTopic" }, "RoleARN":{ "Fn::GetAtt":[ "lifecycleHookRole", "Arn" ] } } } }

YAML

myLifecycleHook: Type: AWS::AutoScaling::LifecycleHook Properties: AutoScalingGroupName: Ref: myASGroup LifecycleTransition: "autoscaling:EC2_INSTANCE_TERMINATING" NotificationTargetARN: Ref: lifecycleHookTopic RoleARN: Fn::GetAtt: - lifecycleHookRole - Arn

实例启动的生命周期挂钩

以下示例指定一个生命周期挂钩,该挂钩支持在实例启动时的自定义操作。生命周期挂钩将添加到从同一代码段创建的新 Auto Scaling 组中。有关更多信息,请参阅 LifecycleHookSpecification

请注意,代码段使用 NotificationTargetARNRoleARN 属性指定在发生生命周期操作时用于接收通知的 Amazon SQS 队列和 IAM 角色。

JSON

{ "AWSTemplateFormatVersion":"2018-09-09", "Parameters":{ "Subnets":{ "Type":"CommaDelimitedList" }, "AZs":{ "Type":"CommaDelimitedList" } }, "Resources":{ "myASGroup":{ "Type":"AWS::AutoScaling::AutoScalingGroup", "Properties":{ "AvailabilityZones":[ { "Ref":"AZs" } ], "VPCZoneIdentifier":{ "Ref":"Subnets" }, "DesiredCapacity":"2", "MaxSize":"3", "MinSize":"1", "LaunchConfigurationName":{ "Ref":"myLaunchConfig" }, "LifecycleHookSpecificationList":[ { "LifecycleTransition":"autoscaling:EC2_INSTANCE_LAUNCHING", "LifecycleHookName":"myLifecycleHook", "HeartbeatTimeout":4800, "NotificationTargetARN":{ "Fn::GetAtt":[ "SQS", "Arn" ] }, "RoleArn":{ "Fn::Join":[ ":", [ "arn:aws:iam:", { "Ref":"AWS::AccountId" }, "role/role-name" ] ] } } ] } }, "SQS":{ "Type":"AWS::SQS::Queue" } } }

YAML

AWSTemplateFormatVersion: 2018-09-09 Parameters: Subnets: Type: CommaDelimitedList AZs: Type: CommaDelimitedList Resources: myASGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: AvailabilityZones: - !Ref AZs VPCZoneIdentifier: !Ref Subnets DesiredCapacity: '2' MaxSize: '3' MinSize: '1' LaunchConfigurationName: !Ref myLaunchConfig LifecycleHookSpecificationList: - LifecycleTransition: "autoscaling:EC2_INSTANCE_LAUNCHING" LifecycleHookName: "myLifecycleHook" HeartbeatTimeout: 4800 NotificationTargetARN: !GetAtt SQS.Arn RoleARN: !Join - ':' - - 'arn:aws:iam:' - !Ref 'AWS::AccountId' - role/role-name SQS: Type: AWS::SQS::Queue

本页内容: