Я использую Amazon Web Services и пытаюсь запустить определение задачи ECS в кластере, запущенном с лямбды.
Когда я запускаю эту задачу вручную в консоли ECS и выбираю все те же параметры, которые я передаю в run_task, она работает просто отлично. Я вижу журналы в Cloudwatch, и результаты задачи (обновление базы данных) произошли, как и ожидалось. Но когда я запускаю задачу из лямбды, она не работает, но также не дает мне ошибок, которые я вижу.
Вот определение лямбды:
import boto3
def lambda_handler(event, context):
print("howMuchSnowDoUpdate")
client = boto3.client('ecs')
response = client.run_task(
cluster='HowMuchSnow',
taskDefinition='HowMuchSnow:2',
count=1,
launchType='FARGATE',
networkConfiguration={
'awsvpcConfiguration': {
'subnets': [
'subnet-ebce7c8c',
],
'securityGroups': [
'sg-03bb63bf7b3389d42',
],
'assignPublicIp': 'DISABLED'
}
},
)
print(response)
Я назначил роль IAM лямбды политикой ECSFull. До этого я получал ожидаемое разрешение, которое было отклонено при запуске run_task. Но как только я добавил эту политику, Lambda работает нормально, без сообщений об ошибках, и это ответ, который я получаю из этой строки печати (ответа):
{'tasks': [{'taskArn': 'arn:aws:ecs:us-east-1:221691463461:task/10b2473f-482d-4f75-ab43-3980f6995b17', 'clusterArn': 'arn:aws:ecs:us-east-1:221691463461:cluster/HowMuchSnow', 'taskDefinitionArn': 'arn:aws:ecs:us-east-1:221691463461:task-definition/HowMuchSnow:2', 'overrides': {'containerOverrides': [{'name': 'HowMuchSnow'}]}, 'lastStatus': 'PROVISIONING', 'desiredStatus': 'RUNNING', 'cpu': '256', 'memory': '512', 'containers': [{'containerArn': 'arn:aws:ecs:us-east-1:221691463461:container/9a76562b-1fef-457f-ae04-0f0eb4003e7b', 'taskArn': 'arn:aws:ecs:us-east-1:221691463461:task/10b2473f-482d-4f75-ab43-3980f6995b17', 'name': 'HowMuchSnow', 'lastStatus': 'PENDING', 'networkInterfaces': []}], 'version': 1, 'createdAt': datetime.datetime(2019, 6, 17, 14, 57, 29, 831000, tzinfo=tzlocal()), 'group': 'family:HowMuchSnow', 'launchType': 'FARGATE', 'platformVersion': '1.3.0', 'attachments': [{'id': 'e6ec4941-9e91-47d1-adff-d406f28b1931', 'type': 'ElasticNetworkInterface', 'status': 'PRECREATED', 'details': [{'name': 'subnetId', 'value': 'subnet-ebce7c8c'}]}]}], 'failures': [], 'ResponseMetadata': {'RequestId': '3a2506ef-9110-11e9-b57a-d7e334b6f5f7', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3a2506ef-9110-11e9-b57a-d7e334b6f5f7', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1026', 'date': 'Mon, 17 Jun 2019 14:57:29 GMT'}, 'RetryAttempts': 0}}
На мой взгляд, все в порядке. Но задача никогда не выполняется. Я кратко вижу отложенную задачу в списке задач на консоли ECS для моего кластера. Но он выполняется не так долго, как должно выполняться фактическое задание. Он не выдает журналы в CloudWatch, как при запуске вручную. Я также не вижу ошибок в журналах.
Одна вещь, которую я хочу отметить, заключается в том, что мне приходится выбирать VPC при запуске задачи вручную из консоли, но это недопустимый аргумент для функции ECS run_task в boto3, поэтому я не передаю ее.
Кто-нибудь знает, что может быть не так или где я могу искать информацию?