我使用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 autoscaling complete-lifecycle-action
工作正常,但我需要从AWS lambda完成此操作。如何找出complete_lifecycle_action()
没有回复的原因?
答案 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脚本,以便在终止实例之前执行自定义操作。