AWS ECS:运行任务失败原因:[“ ATTRIBUTE”]

时间:2018-06-24 03:09:37

标签: amazon-web-services aws-ecs

尝试在EC2实例中运行任务时,我得到了这个可怕的错误消息。

Run tasks failed
Reasons : ["ATTRIBUTE"]

Like many others,我被引荐去我发现该列表的任务的“ requiresAttributes”部分:

  "requiresAttributes": [
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-ecr-pull"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.task-eni"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.ecr-auth"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.task-iam-role"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
    }
  ]

在尝试将这些看似无用的属性添加到群集的实例时,我被阻止了。 AWS控制台表示不允许自定义/添加某些前缀(如ecs)。

平台不允许的情况下,如何匹配属性?

我还研究了如何使用不同的AMI创建实例,但是Amazon ECS不允许这样做,而只是默认使用最新的实例。

Amazon ECS是一个非常酷的产品,但这反映了它的一些不成熟。实际上,我是从beantalk的背景进入ECS的,希望专业套件能够如期编排容器。相反,使用3个小时后,我收到了一些合理的投诉!

2 个答案:

答案 0 :(得分:0)

除非实例和实例上的ECS代理具有此功能,否则您不能仅添加这些属性。例如,如果您未运行使用远程API版本1.19的Docker版本,则如果添加该属性,则将造成问题,因为ECS会认为实例能够执行某些操作,因为添加了属性,但该实例实际上无法做到这一点。

我的建议是使用来自AWS的官方AMI,因为它已经具有Docker版本,代理版本,操作系统兼容性和正确的属性的正确组合。

答案 1 :(得分:0)

我在ECS中尝试运行Windows docker容器时遇到了同样的情况。

就我而言,任务定义显示了以下必需属性:

enter image description here

aws ecs describe-container-instances --cluster=ClusterName --container-instances arn:<rest of the instance arn>描述ECS实例表明他们缺少ecs.capability.execution-role-awslogscom.amazonaws.ecs.capability.logging-driver.awslogs属性。

该解决方案记录在https://github.com/aws/amazon-ecs-agent/issues/1395上,该解决方案是使用命令ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDETrue环境变量设置为[Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine")Amazon ECS服务重新启动后,我就可以部署任务了。

因此,根据您的情况,您可能会发现可以应用一些替代方法来为ECS实例赋予它们所需的属性。