EventBridge 中的 ECS Fargate 任务因 ResourceInitializationError 失败

ECS Fargate Task in EventBridge fails with ResourceInitializationError

我已经创建了一个 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....

我认为这可能是权限问题。但是,我测试了为任务执行角色授予完全高级用户权限,但我仍然遇到相同的错误。会不会是其他问题?

这是由于连接问题。

docs 说如下:

For tasks on Fargate, in order for the task to pull the container image it must either use a public subnet and be assigned a public IP address or a private subnet that has a route to the internet or a NAT gateway that can route requests to the internet.

因此,您需要确保您的任务有通往互联网网关(即它在 Public 子网中)或 NAT 网关的路由。

或者,如果您的服务位于隔离子网中,您需要为 ECR 和您需要调用的其他服务创建 VPC 端点,如 docs:

中所述

To allow your tasks to pull private images from Amazon ECR, you must create the interface VPC endpoints for Amazon ECR.

创建计划任务时,您还可以指定网络选项。 docs提到这一步:

(Optional) Expand Configure network configuration to specify a network configuration. This is required for tasks hosted on Fargate and for tasks using the awsvpc network mode. For Subnets, specify one or more subnet IDs. For Security groups, specify one or more security group IDs. For Auto-assign public IP, specify whether to assign a public IP address from your subnet to the task.

因此网络配置在手动 运行 任务和计划任务之间发生了变化。参考上面的内容来确定您的案例所需的设置。

我通过启用 auto-assign public IP 解决了这个问题。

然而,要做到这一点,我必须首先改变“容量提供者策略”—— “使用集群默认值”,到“启动类型”-“FARGATE”。然后启用 auto-assign public IP 的选项在 EventBridge UI.

的下拉列表中变得可用

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