我想对我的 Amazon Elastic Container Service (Amazon ECS) 任务不启动问题进行故障排除。由于我的 Amazon Elastic File System (Amazon EFS) 文件系统 DNS 名称出现问题,任务无法启动。
简短描述
当您在 ECS 任务定义中引用 EFS 文件系统和容器挂载点时,ECS 会将文件系统挂载到您的容器中。当您使用带有 EFS 卷挂载的 ECS 任务定义来运行 ECS 任务时,该任务会失败并出现以下错误:
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: Failed to resolve "fs-<id>.efs。<region>.amazonaws.com" - check that your file system ID is correct, and ensure that the VPC has an EFS mount target for this file system ID. See https://docs.aws.amazon.com/console/efs/mount-dns-name for more detail. Attempting to lookup mount target ip address using botocore. Failed to import necessary dependency botocore, please install botocore first."
出现该错误的原因如下:
- 您在虚拟私有云 (VPC) 中使用自定义域名和服务器,而不是 AmazonProvidedDNS。
- 您的 VPC DNS 主机名已关闭。
- 您的 EFS 没有挂载目标,或者目标与您的 ECS 任务不在同一个可用区内。
当 DNS 名称无法解析 EFS 文件系统时,ECS 使用 efs-util 工具安装 botocore 并检索挂载目标 IP 地址。由于默认情况下,botocore 未安装在 ECS 优化的 AMI 上,因此任务会失败。
解决方法
您的 VPC 中有自定义域名和服务器
适用于在 Amazon EC2 上运行的任务
**注意:**这些步骤仅适用于 Amazon EC2 实例。
1.使用 SSH 连接到容器实例。要安装 botocore,请运行以下命令:
sudo pip3 install botocore --upgrade
在实例启动期间安装 botocore,作为您在 Auto Scaling 组中为容器实例配置的 UserData 的一部分。
2.为容器实例的 AWS Identity and Access Management (IAM) 角色添加以下权限:
elasticfilesystem:DescribeMountTargets
ec2:DescribeAvailabilityZones
适用于在 Fargate 上运行的任务
要允许您的自定义域名服务器解析 AWS 资源,请配置条件 DNS 转发。
**注意:**对于 AWS Fargate 实例,您无法访问该实例来安装 botocore,必须使用 DNS 名称解析。
您的 VPC DNS 主机名已关闭
要查看 DNS 属性,请完成 DNS 属性中的步骤。如果 DNS 主机名已关闭,请将其打开,然后检查 ECS 任务是否正在运行。
您的 EFS 没有挂载目标或目标与您的 ECS 任务不在同一个可用区内
您的 EFS 文件系统必须具有挂载目标,并且目标必须与 ECS 任务位于同一个可用区内。有关详细信息,请参阅创建和管理挂载目标和安全组。
相关信息:
GitHub 网站上的 Using botocore to retrieve the mount target IP address when the DNS name cannot be resolved(当无法解析 DNS 名称时,使用 botocore 检索挂载目标 IP 地址)