为什么我无法在 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 主机名处于禁用状态。

要解决此错误,请尝试执行以下操作:

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 策略是否拒绝对文件系统的访问。如果这些策略拒绝了权限,请修改策略以授予访问文件系统的权限。如果文件系统策略不存在,则在创建过程中,默认情况下会向所有主体授予对文件系统的访问权限。