ECS Fargate计划任务未运行

时间:2017-12-25 21:13:06

标签: amazon-web-services scheduled-tasks amazon-ecs aws-fargate

我正在尝试使用ECS Fargate设置计划任务,但我无法弄清楚它为什么没有运行。我可以使用RunTask确认任务正常工作,但是当我尝试按计划触发它时,我得到的是一堆'FailedInvocations',没有任何解释。

我确实知道该规则正在被触发,所以这是一个好兆头。请参见下面的屏幕截图:

enter image description here

但每次触发时都会出现'FailedInvocation'。这是调度规则:

enter image description here

ecsEventRole的{​​{1}}的默认权限:

enter image description here

ecs:runTask

我的预感是这个{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "*" ] } ] } 没有足够的权限。我应该试着给它ecsEventsRole有吗?

由于

编辑:现在ecsTaskExecutionRole地区支持此功能。见评论。

6 个答案:

答案 0 :(得分:8)

我遇到了类似的问题,其中常规ECS计划任务未运行。

我最终通过向ecsEventsRole添加一个额外的策略来解决它,该策略允许CloudWatch Events将IAM角色传递给ECS任务:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListInstanceProfiles",
                "iam:ListRoles",
                "iam:PassRole"
            ],
            "Resource": "*"
        }
    ]
}

答案 1 :(得分:3)

这是一个可能的解决方法:使用lambda函数作为cloudwatch规则的目标,并在lambda函数代码中创建任务。

以下是lambda函数的示例代码: https://lobster1234.github.io/2017/12/03/run-tasks-with-aws-fargate-and-lambda/

这些链接描述了如何使用lambda函数打包新的boto版本,但由于AWS已将lambda boto版本更新为1.4.8,因此不再需要这样做。

我已经测试过并且有效。

答案 2 :(得分:2)

尽管已经一年多了,但是AWS仍然没有正确的方法来查看调用日志。

您已经知道我们可以通过RunTask手动调用任务,计划任务也可以。

唯一的区别是计划任务是由CloudWatch规则触发的。

我们可以轻松地看到CloudTrail Event history中的调用日志,去那里并过滤事件名称为RunTask的事件,然后选择要检查的时间范围,找到事件并单击View Event ,您将看到错误代码和响应。

答案 3 :(得分:1)

在CloudFormation中定义规则时,我必须确保目标RoleArn属性引用了ecsEventsRole

Targets:
- Id: !Sub ${AWS::StackName}-cron-test-1
  Arn: arn:aws:ecs:eu-west-1:<account id>:cluster/fargate-cluster
  RoleArn: !Join
    - ':'
    - - "arn:aws:iam"
      - ""
      - !Ref "AWS::AccountId"
      - "role/ecsEventsRole"

ecsEventsRole定义了AmazonEC2ContainerServiceEventsRole策略的地方

答案 4 :(得分:0)

您是否尝试过使用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"}'

答案 5 :(得分:0)

我在ECS Fargate任务计划程序中遇到了类似的问题。我已通过在任务IAM角色中添加以下策略来解决此问题。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": [
                "arn:aws:ecs:*:548503722878:task-definition/test-services-20200813124716"
            ],
            "Condition": {
                "ArnLike": {
                    "ecs:cluster": "arn:aws:ecs:*:548503722878:cluster/test-cluster"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "ecs-tasks.amazonaws.com"
                }
            }
        }
    ]
}