Запланированная задача ECS Fargate не запущена
Я пытаюсь настроить запланированное задание с помощью ECS Fargate, но не могу понять, почему оно не выполняется. Я могу подтвердить, что задача работает правильно, используя RunTask
, но когда я пытаюсь запустить ее по расписанию, все, что я получаю, это набор "FailedInvocations" без объяснения причин.
Однако я знаю, что правило срабатывает, так что это хороший знак. Смотрите на скриншот ниже:
![enter image description here]()
Но каждый раз, когда он срабатывает, происходит просто "FailedInvocation". Вот правило планирования:
![enter image description here]()
И разрешения по умолчанию для ecsEventRole
только с ecs:runTask
:
![enter image description here]()
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunTask"
],
"Resource": [
"*"
]
}
]
}
Моя догадка говорит, что у этого ecsEventsRole
недостаточно разрешений. Должен ли я попытаться дать ему те, которые есть у ecsTaskExecutionRole
?
Благодаря
ОБНОВЛЕНИЕ: Это теперь поддерживается в регионе us-east-1
. Смотрите комментарии.
Ответы
Ответ 1
У меня возникла аналогичная проблема, когда регулярные запланированные задачи ECS не выполнялись.
Я, наконец, разрешил это, добавив дополнительную политику к ecsEventsRole
, которая позволяет CloudWatch Events передавать роли IAM в задачи ECS:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListInstanceProfiles",
"iam:ListRoles",
"iam:PassRole"
],
"Resource": "*"
}
]
}
Ответ 2
Вот возможное обходное решение: используйте лямбда-функцию в качестве цели для правила облачного просмотра и создайте задачу в коде функции лямбда.
Вот пример кода для лямбда-функции:
https://lobster1234.github.io/2017/12/03/run-tasks-with-aws-fargate-and-lambda/
В ссылках описывается, как упаковать новую версию boto с помощью функции лямбда, но это уже не нужно, поскольку AWS уже обновил версию lambda boto до 1.4.8
Я тестировал и работает.
Ответ 3
Несмотря на то, что прошло более года, AWS все еще не имеет надлежащего способа просмотра журналов вызовов.
Как вы уже знаете, мы можем вызывать задачи с помощью RunTask
вручную, как и запланированные задачи.
Единственное отличие состоит в том, что запланированная задача запускается по правилам CloudWatch.
Мы можем легко увидеть журналы вызовов в CloudTrail Event history
, перейти туда и отфильтровать события с именем события: RunTask
и выбрать диапазон времени, который вы хотите проверить, найти событие и нажать View Event
, вы увидите код ошибки и ответ.
Ответ 4
Вы пытались использовать aws cli и запустить aws events put-rule
, а затем aws events put-targets --rule <value> --targets <value>
? У меня была похожая проблема, и я использовал (последнюю версию) aws cli для меня.
Вот образец:
aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"
Далее следует команда в одной строке:
aws events put-targets --rule cli-RS-rule --targets '{"Arn":"arn:aws:ecs:1234/cluster/clustername","EcsParameters":{"LaunchType": "FARGATE","NetworkConfiguration": {"awsvpcConfiguration": {"AssignPublicIp": "ENABLED", "SecurityGroups": [ "sg-id1233" ], "Subnets": [ "subnet-1234" ] }},"TaskCount": 1,"TaskDefinitionArn": "arn:aws:ecs:1234:task-definition/taskdef"},"Id": "sampleID111","RoleArn": "arn:aws:iam:1234:role/eventrole"}'