AWS Lambda会在完成生命周期操作时挂起

时间:2016-12-26 12:38:43

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

我使用aws lambda来执行自定义操作,因为Auto Scaling会终止实例。看起来像这样

def scaledown_handler(event, context):
    # customs actions
    client = boto3.client('autoscaling')
    response = client.complete_lifecycle_action(LifecycleHookName=event['detail']['LifecycleHookName'],
                                     LifecycleActionToken=event['detail']['LifecycleActionToken'],
                                     AutoScalingGroupName=event['detail']['AutoScalingGroupName'],
                                     LifecycleActionResult='CONTINUE',
                                     InstanceId=event['detail']['EC2InstanceId'])

问题是该函数只挂在client.complete_lifecycle_action()上并且在没有任何响应的情况下超时完成,我的ec2实例总是“等待终止生命周期操作”。

在aws CLI中

aws autoscaling complete-lifecycle-action工作正常,但我需要从AWS lambda完成此操作。如何找出complete_lifecycle_action()没有回复的原因?

2 个答案:

答案 0 :(得分:1)

如果您的VPC中没有NAT网关,则Lambda函数将无法访问VPC之外的任何内容。 AWS API存在于您的VPC之外,因此Lambda函数在尝试访问它时会出现网络超时。

您必须向VPC添加NAT网关,以便Lambda功能(以及您的VPC中没有公共IP的其他内容)访问VPC之外的任何内容。

答案 1 :(得分:0)

您需要使用put_lifecycle_hook()API。 http://www.callumpember.com/auto-scaling-lifecycle-hooks/ 在此链接上,您可以获得完整的python脚本,以便在终止实例之前执行自定义操作。