AWS Лямбда-скрипт Autoscaling Lifecycle - перестал работать - PullRequest
0 голосов
/ 24 января 2020

Это иногда перестало работать в течение последнего года, и никто не заметил, что это выглядит так: /

Наши группы автоматического масштабирования имеют политику жизненного цикла для них во время завершения.

У нас есть событие cloudwatch , который запускает Lambda.

Cloudwatch event
{
  "detail-type": [
    "EC2 Instance-terminate Lifecycle Action"
  ],
  "source": [
    "aws.autoscaling"
  ]
}

Lambda была изначально развернута с python 3.6, мы просто подтолкнули ее к 3.8, ошибка сохранилась.

import boto3

ssm = boto3.client('ssm')


def lifecycle(event, context):
    print("Event detail-type: " + event['detail-type'])
    print("LifecycleActionToken: " + event['detail']['LifecycleActionToken'])
    print("AutoScalingGroupName: " + event['detail']['AutoScalingGroupName'])
    print("LifecycleHookName: " + event['detail']['LifecycleHookName'])
    print("EC2InstanceId: " + event['detail']['EC2InstanceId'])
    print("LifecycleTransition: " + event['detail']['LifecycleTransition'])

    instance_id = event['detail']['EC2InstanceId']
    lifecycleActionToken = event['detail']['LifecycleActionToken']
    lifecycleHookName = event['detail']['LifecycleHookName']
    autoscalingGroupName = event['detail']['AutoScalingGroupName']
    command = f'/var/opt/admin/scripts/awsScaleIn.sh --lifecycleActionToken="{lifecycleActionToken}" --lifecycleHookName="{lifecycleHookName}" --autoscalingGroupName="{autoscalingGroupName}"'

    print("command = " + command)
    ssm.send_command(
        InstanceIds=[instance_id],
        DocumentName='AWS-RunShellScript',
        Parameters={
            'commands': [command],
            'executionTimeout': ['60']  # Seconds all commands have to complete
        }
    )

Ошибка в cloudwatch

START RequestId: a50a0611-7ba4-4cba-9eef-c2caa9031fdc Version: $LATEST
Event detail-type: EC2 Instance-terminate Lifecycle Action
LifecycleActionToken: 95b82a53-31a4-44c3-aa35-0bf6e3303935
AutoScalingGroupName: asg-prd20200109141539524600000002
LifecycleHookName: lch-prd
EC2InstanceId: i-005c3ba7b882bc99b
LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
command = /var/opt/admin/scripts/awsScaleIn.sh --lifecycleActionToken="95b82a53-31a4-44c3-aa35-0bf6e3303935" --lifecycleHookName="lch-prd" --autoscalingGroupName="asg-prd20200109141539524600000002"
[ERROR] InvalidInstanceId: An error occurred (InvalidInstanceId) when calling the SendCommand operation: 
Traceback (most recent call last):
  File "/var/task/lifecycle_service.py", line 21, in lifecycle
    ssm.send_command(
  File "/var/runtime/botocore/client.py", line 272, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/runtime/botocore/client.py", line 576, in _make_api_call
    raise error_class(parsed_response, operation_name)
END RequestId: a50a0611-7ba4-4cba-9eef-c2caa9031fdc

Идентификаторы экземпляров, которые он записывает, являются правильными идентификаторами экземпляров. Они попадают в ожидание завершения, и в конечном итоге просто тайм-аут. Я предполагаю, что что-то изменилось в boto3, но я не могу найти это.

...