Ich verwende aws Lambda, um benutzerdefinierte Aktionen auszuführen, da Auto Scaling Instanzen beendet. Es sieht aus wie diesesAWS Lambda hängt beim Abschließen der Lifecycle-Aktion ab
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'])
Das Problem ist, dass die Funktion hängt nur auf client.complete_lifecycle_action()
und endet durch Timeout ohne Antwort und meine EC2-Instanzen sind immer „Waiting for Lifecycle Aktion beenden“.
aws autoscaling complete-lifecycle-action
in aws CLI funktioniert gut, aber ich muss dies von AWS Lambda getan werden. Wie kann ich herausfinden, warum complete_lifecycle_action()
hängt ohne eine Antwort?
Haben Sie die Lambda-Funktion in einer VPC platziert? –
Ja, das Lambda ist in der gleichen VPC wie meine ec2-Instanzen. –
Brauchen Sie es wirklich in der VPC? Wenn Sie in Ihrer VPC kein NAT-Gateway haben, hat die Lambda-Funktion keinen Zugriff auf Daten außerhalb der VPC. Die AWS-API existiert außerhalb Ihrer VPC, sodass die Lambda-Funktion beim Versuch, auf sie zuzugreifen, ein Netzwerk-Timeout erhält. –