2016-12-26 112 views
0

由於Auto Scaling終止實例,因此我使用aws lambda執行自定義操作。它看起來像這樣AWS Lambda在完成生命週期操作時掛起

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拉姆達做到了這一點。如何找出complete_lifecycle_action()爲什麼沒有響應而掛起?

+0

您是否將Lambda函數放入VPC中? –

+0

是的,Lambda與我的ec2實例處於相同的VPC。 –

+0

你真的需要它在VPC嗎?如果您的VPC中沒有NAT網關,則Lambda功能將無法訪問VPC外的任何內容。 AWS API存在於VPC之外,因此Lambda函數正在嘗試訪問它的網絡超時。 –

回答

1

如果你沒有一個NAT網關在您的VPC然後拉姆達功能將無法訪問的VPC以外的任何東西。 AWS API存在於VPC之外,因此Lambda函數正在嘗試訪問它的網絡超時。

你有一個NAT網關,以便lambda函數(和您的VPC其他的事情,沒有一個公網IP)到VPC外訪問任何添加到您的VPC。

0

您需要使用put_lifecycle_hook()API。 http://www.callumpember.com/auto-scaling-lifecycle-hooks/ 在這個鏈接,就可以得到完整的python腳本,用於解除實例之前執行自定義操作。

+0

我已經通過CLI命令'aws autoscaling put-lifecycle-hook'創建了自動調節生命週期鉤子 –