为什么我无法在 AWS Fargate 任务上挂载我的 Amazon EFS 卷?
上次更新日期:2022 年 12 月 22 日
当我在 AWS Fargate 任务上挂载 Amazon Elastic File System(Amazon EFS)卷时出现错误。
解决方法
Amazon EFS 为 Fargate 任务提供了持久性存储解决方案,以在不同的任务之间共享文件和数据。
如果出现下面的一个或多个原因,您可能会无法在 Fargate 任务上挂载 Amazon EFS 卷:
- Amazon EFS 文件系统配置不正确。
- Amazon Elastic Container Service(Amazon ECS)任务 IAM 角色不具有所需的权限。
- 存在与网络和 Amazon Virtual Private Cloud(Amazon VPC)配置相关的问题。
当您尝试在 Fargate 任务上挂载 EFS 卷时,可能会出现下面的一种错误。
ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: b'mount.nfs4: Connection timed out' : unsuccessful EFS utils command execution; code: 32(ResourceInitializationError:无法调用 EFS utils 命令来设置 EFS 卷:stderr:b'mount.nfs4:连接超时:EFS utils 命令执行失败;代码:32)
当您的 Fargate 任务由于连接时间问题无法连接到 EFS 文件系统时,您会收到上述错误。要解决此错误,请尝试以下问题排查步骤:
1. 打开 Amazon EFS 控制台。
2. 在导航窗格中选择 File systems(文件系统)。
3. 通过选择 Name(名称)或 File system ID(文件系统 ID)来选择要检查的文件系统。
4. 选择 Network(网络)以显示现有挂载目标的列表。
5. 选择 Manage(管理)。
您可以查看挂载目标的安全组和安全组入站规则。
请确保安全组的入站规则允许来自 Fargate 任务安全组的流量通过端口 2049。确认子网级别允许网络流量。要进行确认,请验证网络访问控制列表是否允许文件系统和任务之间的流量。如果不允许该流量,则相应地修改规则。有关更多信息,请参阅“带有公有和私有子网(NAT)的 VPC”文档中的安全性一节。
ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: mount.nfs4: Connection reset by peer : unsuccessful EFS utils command execution; code: 32(ResourceInitializationError:无法调用 EFS utils 命令来设置 EFS 卷:stderr:mount.nfs4:对等方重置连接:EFS utils 命令执行失败;代码:32)
由于以下原因之一,您会收到上述错误:
- 您在创建文件系统后立即挂载了 EFS 文件系统。
- 挂载目标的安全组不允许来自 Fargate 任务的入站流量通过端口 2049。
- 您使用的是 AWS App Mesh,由于代理规则,到端口 2049 的出站被阻止。
要解决此错误,请执行以下步骤:
- 创建挂载目标后,DNS 记录在 AWS 区域中完整传播所需时间可能需要 90 秒。如果您以编程方式创建和挂载文件系统(例如使用 AWS CloudFormation 模板),则建议实施等待条件。
- 确认附加到 EFS 文件系统挂载目标的入站安全组规则允许来自 Fargate 任务的流量通过端口 2049。
- 如果您使用的是 AppMesh,请确保在 TaskDefinition 中指定的代理配置包含 2049 作为 EgressIgnoredPorts。
ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: Failed to resolve "fs-xxxxxxxxxxx.efs.us-east-1.amazonaws.com" - check that your file system ID is correct(ResourceInitializationError:无法调用 EFS utils 命令来设置 EFS 卷:stderr:无法解析“fs-xxxxxxxxxxx.efs.us-east-1.amazonaws.com”- 请检查您的文件系统 ID 是否正确)
由于以下原因之一,您会收到上述错误:
- EFS 文件系统挂载目标未在启动 Fargate 任务的可用区中创建或在该可用区不可用。
- 您正在为 VPC 使用自定义 DNS 服务器。
- VPC DNS 主机名已禁用。默认情况下,DNS 主机名处于禁用状态。
要解决此错误,请尝试执行以下操作:
- 确保 EFS 文件系统挂载目标与 Fargate 任务位于同一可用区中。您可以通过 Amazon EFS 控制台查看挂载目标的可用区、子网和安全组。然后,验证挂载目标是否使用与 Fargate 任务相同的可用区和子网。
- 如果您为 VPC DHCP 选项指定了自定义 DNS 服务器,而不是 AmazonProvidedDNS,请务必配置有条件的 DNS 转发器。DNS 转发器必须将 AWS 资源(*.amazonaws.com)的 DNS 查询发送到位于 VPC CIDR .2 或 169.254.169.253 的 VPC 默认 DNS 服务器。有关更多信息,请参阅如何使用 AWS Directory Service 和 Microsoft Active Directory 设置本地网络与 AWS 之间的 DNS 解析。
ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: b'mount.nfs4: access denied by server while mounting 127.0.0.1:/' : unsuccessful EFS utils command execution; code: 32(ResourceInitializationError:无法调用 EFS utils 命令来设置 EFS 卷:stderr:b'mount.nfs4:挂载 127.0.0.1:/' 时服务器拒绝访问:EFS utils 命令执行失败;代码:32)
当以下策略和权限拒绝访问文件系统时,您会收到上述错误:
- 文件系统策略
- 任务角色策略
- POSIX 文件系统级别的权限
对 EFS 文件系统的访问可能由以下资源中定义的权限进行控制:
- 网络访问控制列表
- 安全组
- EFS 文件系统策略
- ECS 任务角色 IAM 策略
- POSIX 文件
有关更多信息,请参阅将 Amazon EFS 与 Amazon ECS 和 AWS Fargate 结合使用的开发人员指南 – 第 2 部分。
要解决此错误,请检查文件系统策略或 ECS 任务角色 IAM 策略是否拒绝对文件系统的访问。如果这些策略拒绝了权限,请修改策略以授予访问文件系统的权限。如果文件系统策略不存在,则在创建过程中,默认情况下会向所有主体授予对文件系统的访问权限。