如果用于终止实例的lambda耗尽机制在生命周期挂钩的cloudformation中设置的HeartbeatTimeout参数内未完成,则需要让EC2实例运行。
我有一个lambda函数,该函数会耗尽EC2实例并在cloudformation中触发按比例缩小警报时终止它。我目前使用LifeCycle挂钩终止我的cloudformation中的实例。但是,我知道生命周期挂钩有一个HeartbeatTimeout参数,当lambda耗尽机制在此期间未完成时,该参数会杀死实例。如果lambda无法在HeartbeatTimeout内耗尽实例,则我不希望杀死该实例,因为仍然有正在运行的任务。在这种情况下,我想中止实例终止并让实例运行,有什么办法吗?
这是cloudformation中的生命周期钩子
"Terminationhook": {
"Type": "AWS::AutoScaling::LifecycleHook",
"Properties": {
"AutoScalingGroupName": { "Ref": "Cluster" },
"DefaultResult": "ABANDON",
"HeartbeatTimeout": "3600",
"LifecycleTransition": "autoscaling:EC2_INSTANCE_TERMINATING",
"NotificationTargetARN": { "Ref" : "SNSTOPIC"},
"RoleARN": {
"Fn::GetAtt": [
"Role",
"Arn"
]
}
},
"DependsOn": "SNSTOPIC"
}
如果lambda不会在3600秒的HeartbeatTimeout内耗尽实例,那么我想中止实例终止
答案 0 :(得分:0)
来自Amazon EC2 Auto Scaling Lifecycle Hooks - Amazon EC2 Auto Scaling:
将实例保持在等待状态
实例可以在一定时间内保持等待状态。默认值为一小时(3600秒)。您可以通过以下方式调整时间:
- 在创建生命周期挂钩时,为生命周期挂钩设置心跳超时。通过put-lifecycle-hook命令,使用
--heartbeat-timeout
参数。通过PutLifecycleHook
操作,使用HeartbeatTimeout
参数。- 如果您在超时时间结束之前完成操作,请使用complete-lifecycle-action命令或
CompleteLifecycleAction
操作进入下一个状态。- 使用record-lifecycle-action-heartbeat命令或
RecordLifecycleActionHeartbeat
操作通过记录心跳来重新启动超时时间。这会将心跳超时增加创建生命周期挂钩时指定的超时值。例如,如果超时值为1小时,而您在30分钟后调用此命令,则实例将在等待状态下再等待一个小时,或总共90分钟。您可以使实例处于等待状态的最大时间为48小时或心跳超时的100倍,以较小者为准。
底线::如果需要更多时间,可以通过记录心跳来重新启动超时时间。