amazon-web-services - AmazonEC2为什么我的ECS服务 register 不能用我的ELB提供实例?

  显示原文与译文双语对照的内容
131 3

我有一个EC2启动配置,构建了ECS优化的AMI 。我有一个自动缩放组,确保至少有两个可用的实例。最后我得到了一个负载平衡器。

我正在尝试创建一个in服务,该服务在负载平衡器的实例中分发我的任务。

通过阅读ECS负载平衡文档,我理解ASG不应该自动地使用ELB实例,因为ECS负责处理 that 。因此,我的助手没有指定 ELB 。同样,我的ELB没有任何注册的EC2实例。

创建ECS服务时,我选择ELB并选择 ecsServiceRole 。创建服务后,在ECS实例tab中看不到任何可用的实例。服务也无法启动任何任务,具有非常普遍的错误。

服务无法放置任务,因为找不到资源。

我现在已经经有两天的时间了,看不出什么配置设置没有正确配置。对于可能导致这个问题的人,谁有什么想法?

更新 @ 06/25/2015:

我想这可能与 ECS_CLUSTER 用户数据设置有关。

在of配置中,如果让用户数据输入完全空白,那么实例是用 ECS_CLUSTER 值创建的。发生这种情况时,我会看到一个自动创建集群,名为"默认值"。在这个默认集群中,我看到了实例,并且可以像预期的那样使用ELB任务。当任务注册到ELB时,我的ELB健康状况检查会通过,而且所有的工作都在世界上很好。

但是,如果我将 ECS_CLUSTER 设置更改为自定义的,我永远不会看到用这个名称创建的集群。如果手动创建具有该名称的群集,则实例在群集中永远不会可见。我不能在这个场景中使用ELB来完成任务。

有什么想法吗?

时间:原作者:0个回答

51 4

最后,我的EC2实例没有被分配为 public IP地址。它似乎需要能够直接与每个EC2实例通信,这需要每个实例都有一个 public IP 。我没有分配容器实例 public IP地址,因为我认为我会把它们全部放在 public 负载平衡器后面。

原作者:
115 0

在日志文件中我发现了类似的症状,但最终发现了答案:

/var/log/ecs/ecs-agent. 2016-04-06:

2016-04-06T03:05:26Z [ERROR] Error registering: AccessDeniedException: User: arn:aws:sts::<removed>:assumed-role/<removed>/<removed is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-west-2:<removed:cluster/MyCluster-PROD
 status code: 400, request id: <removed>

在我的例子中,资源存在但不可访问。听起来像OP指向一个不存在或者不可见的资源。你的集群和实例是否在同一区域中?日志应该确认细节。

响应其他帖子:

你不需要 public IP地址。

需要:为与ECS服务通信而分配给EC2实例的ecsServiceRole或者等效IAM角色。还必须指定ECS群集,并且可以在实例启动或者启动配置定义期间通过用户数据完成,如下所示:

#!/bin/bash
echo ECS_CLUSTER=GenericSericeECSClusterPROD>> /etc/ecs/ecs.config

如果在新启动的实例上执行这里操作,则可以在实例启动后执行这里操作,然后重新启动服务。

原作者:
64 4

可能出现的另一个问题是没有为启动配置分配一个具有适当策略的角色。我的角色没有AmazonEC2ContainerServiceforEC2Role策略( 或者它所包含的权限) 按这里指定为

原作者:
87 3

也可能是ECS代理在/var/lib/ecs/data 中创建一个存储集群名称的文件。

如果代理首先启动'默认值'群集名,则需要删除该文件,然后重新启动代理。

原作者:
...