如果达到生命周期挂钩超时,请不要终止EC2实例

时间:2019-03-24 16:13:51

标签: amazon-web-services amazon-ec2 aws-lambda amazon-ecs

如果用于终止实例的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内耗尽实例,那么我想中止实例终止

1 个答案:

答案 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倍,以较小者为准。

底线::如果需要更多时间,可以通过记录心跳来重新启动超时时间。