事件桥中的ECS Fargate任务失败,错误为ResourceInitializationError。

8

我创建了一个 ECS Fargate 任务,可以手动运行。它会更新 Dynomodb 并生成日志。

现在我想按计划运行它。我通过 EventBridge 设置了定时的 ECS 任务。但是它并没有运行。

我查看了 EventBridge 日志,发现容器出于以下停止原因已停止:

ResourceInitializationError: unable to pull secrets or registry auth: execution resource 
retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3
time(s): RequestError: send request failed caused by: Post https://api.ecr....

我认为这可能是权限问题。但是,我测试了给予任务执行角色完整的超级用户权限,但仍然出现相同的错误。问题可能是其他原因引起的吗?


1
您是否为Eventbridge规则配置了具有足够权限的角色?请参见https://dev59.com/mLb3oIgBc1ULPQZF7a5u#71630839。 - Paolo
我会查看CloudTrail,谢谢! - Mhairi McNeill
CloudTrail中没有任何内容!只有一个RunTask,看起来很正常。其他事件也没有错误,并且它们看起来都是正确的(至少在我理解的范围内)。 - Mhairi McNeill
您的ECS任务/服务是否可以访问互联网?也许它根本无法连接到ECR端点,因为它位于私有子网中,没有NAT等。 - Marcin
3个回答

7
这是由于连接问题引起的。 文档中说:
对于在Fargate上运行的任务,为了拉取容器镜像,它必须使用公共子网并分配公共IP地址,或者使用具有通往Internet的路由或可以将请求路由到Internet的NAT网关的私有子网。
因此,您需要确保您的任务有一个通往Internet网关的路由(即它位于公共子网中)或NAT网关。
或者,如果您的服务处于隔离的子网中,则需要创建ECR和其他需要调用的服务的VPC终端节点,如文档所述:
为允许您的任务从Amazon ECR拉取私有映像,必须创建Amazon ECR的接口VPC终端节点。
当您创建计划任务时,还需指定网络选项。文档中提到了这一步骤:

(可选)展开“配置网络配置”以指定网络配置。对于托管在 Fargate 上的任务和使用 awsvpc 网络模式的任务,这是必需的。 对于子网,请指定一个或多个子网 ID。 对于安全组,请指定一个或多个安全组 ID。 对于自动分配公共 IP,请指定是否从您的子网为任务分配公共 IP 地址。

因此,手动运行任务和计划任务之间的网络配置发生了变化。请参考上述内容,找出您的情况所需的设置。

她提到她可以手动运行任务。 - Paolo
没错,但是在创建定时任务时,您还需要指定网络选项。我会更新答案以反映这一点。 - gshpychka
是的,很好的观点。 - Paolo
从我阅读文档来看,我的网络设置正确。我只有默认的VPC和其默认子网。当我配置计划任务时,我已经添加了三个子网。安全组是自动配置的。查看这些内容,它们允许所有出站流量。对于自动分配公共IP,无论是编辑现有规则还是创建新规则,唯一的选项都是“禁用”。 - Mhairi McNeill
这与安全组无关。在创建计划任务时,您必须启用公共IP。由于您的任务未获得公共IP,因此您的网络设置不正确。 - gshpychka
所以,这是一个网络错误,谢谢@gshpychka,但并不是文档中涵盖的内容 - 我认为这可能是一个漏洞。我会在我的答案中解释。 - Mhairi McNeill

2

我通过启用自动分配公共IP解决了这个问题。

但是,在此之前,我必须将“容量提供商策略”从“使用集群默认值”更改为“启动类型”-“FARGATE”。然后,在EventBridge UI的下拉菜单中,启用自动分配公共IP选项变得可用。

这对我来说似乎有些奇怪,因为我的集群默认容量提供商策略就是Fargate。但现在它起作用了。


-1

需要使用网关来跟踪从ECS到ECR的流量。最终可以是Internet Gateway或NAT Gateway,这将影响成本因素。

但是我们可以通过创建VPC端点来解决此场景。它在AWS资源内维护流量。

所需的端点包括: S3网关 ECR ECS


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接