11

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

Run tasks failed
Reasons : ["ATTRIBUTE"]

像许多其他人一样,我被推荐查看我的任务的“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 是一个非常酷的产品,但这反映了它的一些不成熟。实际上,我是从 beanstalk 背景进入 ECS 的,希望专业套件能够像承诺的那样编排容器。相反,我在使用 3 小时后有一些合理的投诉!

4

2 回答 2

8

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

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

在此处输入图像描述

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

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

因此,根据您的情况,您可能会发现可以应用一些覆盖来为您的 ECS 实例提供它们所需的属性。

于 2019-05-31T04:03:36.917 回答
0

除非实例和实例上的 ECS 代理具有该功能,否则您不能只添加这些属性。例如,如果您没有运行使用远程 API 版本 1.19 的 Docker 版本,那么如果您添加该属性,您只会破坏事情,因为 ECS 会认为实例能够做某事,因为您添加了该属性,但实例实际上并不能做到这一点。

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

于 2018-06-24T17:13:56.563 回答