Запланированная задача 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"}'