【发布时间】:2017-05-10 22:18:36
【问题描述】:
我使用 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 CLI 中工作正常,但我需要从 AWS lambda 完成此操作。我怎样才能知道为什么complete_lifecycle_action() 挂起而没有响应?
【问题讨论】:
-
您是否将 Lambda 函数放置在 VPC 中?
-
是的,Lambda 与我的 ec2 实例在同一个 VPC 中。
-
您真的需要它在 VPC 中吗?如果您的 VPC 中没有 NAT 网关,则 Lambda 函数将无法访问 VPC 之外的任何内容。 AWS API 存在于您的 VPC 之外,因此 Lambda 函数在尝试访问它时遇到网络超时。
-
“但据我所知,如果我没有为我的 Lambda 设置 VPC,它将在默认系统管理的 VPC 中安全运行”这是不正确的。就像我说的那样,如果您需要 VPC 访问权限,那么您必须将 NAT 网关添加到您的 VPC。
标签: python amazon-web-services amazon-ec2 aws-lambda