AWS Lambda 在完成生命周期操作时挂起
AWS Lambda hangs on completing lifecycle action
我使用 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 实例始终是 "Waiting for Terminate Lifecycle Action"。
aws autoscaling complete-lifecycle-action
在 aws CLI 中工作正常,但我需要从 AWS lambda 完成此操作。我如何找出 complete_lifecycle_action()
挂起而没有响应的原因?
您需要使用 put_lifecycle_hook() API。
http://www.callumpember.com/auto-scaling-lifecycle-hooks/
在这个 link 上,您可以获得完整的 python 脚本,用于在终止实例之前执行自定义操作。
如果您的 VPC 中没有 NAT 网关,那么 Lambda 函数将无法访问 VPC 之外的任何内容。 AWS API 存在于您的 VPC 之外,因此 Lambda 函数在尝试访问它时遇到网络超时。
您必须向您的 VPC 添加一个 NAT 网关,以便 Lambda 函数(以及您 VPC 中没有 public IP 的其他东西)访问 VPC 之外的任何东西。
我使用 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 实例始终是 "Waiting for Terminate Lifecycle Action"。
aws autoscaling complete-lifecycle-action
在 aws CLI 中工作正常,但我需要从 AWS lambda 完成此操作。我如何找出 complete_lifecycle_action()
挂起而没有响应的原因?
您需要使用 put_lifecycle_hook() API。 http://www.callumpember.com/auto-scaling-lifecycle-hooks/ 在这个 link 上,您可以获得完整的 python 脚本,用于在终止实例之前执行自定义操作。
如果您的 VPC 中没有 NAT 网关,那么 Lambda 函数将无法访问 VPC 之外的任何内容。 AWS API 存在于您的 VPC 之外,因此 Lambda 函数在尝试访问它时遇到网络超时。
您必须向您的 VPC 添加一个 NAT 网关,以便 Lambda 函数(以及您 VPC 中没有 public IP 的其他东西)访问 VPC 之外的任何东西。