EventBridge中的ECS Fargate任务失败,出现ResourceInitializationError



我创建了一个ECS Fargate Task,可以手动运行。它更新了一个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....

我认为这可能是权限问题。然而,我测试了赋予Task Execution Role完全权限的用户权限,但仍然得到了相同的错误。问题可能是其他原因吗?

这是由于连接问题。

医生说:

对于Fargate上的任务,为了让任务提取容器映像,它必须使用公用子网并被分配一个公用IP地址,或者一个具有到internet的路由或可以将请求路由到internet的NAT网关的专用子网。

因此,您需要确保您的任务有一条到互联网网关(即位于公用子网中(或NAT网关的路由。

或者,如果您的服务位于孤立的子网中,则需要为ECR和其他需要调用的服务创建VPC端点,如文档中所述:

要允许您的任务从Amazon ECR中提取私有映像,您必须为Amazon ECR创建接口VPC端点。

创建计划任务时,还可以指定网络选项。文档中提到了这个步骤:

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

因此,网络配置在手动运行任务和计划任务之间发生了更改。请参阅上面的内容,了解您的案例所需的设置。

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

然而,要做到这一点,我必须首先从";容量提供商策略"-"使用集群默认值";,至";发射类型"-"FARGATE";。然后,在EventBridge UI的下拉列表中,启用自动分配公共IP的选项变为可用。

这对我来说似乎很奇怪,因为我集群的默认容量提供商策略是Fargate。但它现在正在发挥作用。

需要使用网关来跟踪ECS到ECR的流量。它最终可以是互联网网关,也可以是NAT网关,这将是影响成本因素。

但是,我们可以通过创建VPC端点来解决这种情况。它维护AWS资源中的流量。

所需的终点是:S3网关ECRECS

最新更新