Это иногда перестало работать в течение последнего года, и никто не заметил, что это выглядит так: /
Наши группы автоматического масштабирования имеют политику жизненного цикла для них во время завершения.
У нас есть событие 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, но я не могу найти это.