Amazon EFS 卷 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon EFS 卷

Amazon Elastic File System (Amazon EFS) 提供简单的可扩展文件存储以供您的 Amazon ECS 任务使用。使用 Amazon EFS 时,存储容量是弹性的。它会随着您添加和删除文件而自动增加和缩减。您的应用程序可在需要时获得所需存储。

您可以将 Amazon EFS 文件系统与 Amazon ECS 配合使用,以便导出跨容器实例队列的文件系统数据。这样,无论您的任务登录的是哪个实例,都可以访问相同的持久性存储。您的任务定义必须引用容器实例上的卷挂载才能使用该文件系统。下面几个部分描述了如何开始将 Amazon EFS 与 Amazon ECS 配合使用。

有关教程,请参阅 教程:使用经典控制台将 Amazon EFS 文件系统与 Amazon ECS 结合使用

Amazon EFS 卷注意事项

使用 Amazon EFS 卷时应考虑以下事项:

  • 对于使用 EC2 启动类型的任务,已将 Amazon EFS 文件系统支持作为一个公共预览版添加,其中包括经 Amazon ECS 优化的 AMI 版本 20191212 以及容器代理版本 1.35.0。但是,Amazon EFS 文件系统支持通过经 Amazon ECS 优化的 AMI 版本 20200319 和容器代理版本1.38.0 正式推出,该版本包含 Amazon EFS 访问点和 IAM 授权功能。我们建议您使用经 Amazon ECS 优化的 AMI 版本 20200319 或更高版本以利用这些功能。有关更多信息,请参阅经 Amazon ECS 优化的 AMI 版本

    注意

    如果您创建自己的 AMI,则必须使用容器代理 1.38.0 或更高版本、ecs-init 1.38.0-1 或更高版本,并在 Amazon EC2 实例上运行以下命令以启用 Amazon ECS 卷插件。命令取决于您将 Amazon Linux 2 还是 Amazon Linux 用作基本映像。

    Amazon Linux 2

    yum install amazon-efs-utils systemctl enable --now amazon-ecs-volume-plugin

    Amazon Linux

    yum install amazon-efs-utils sudo shutdown -r now
  • 对于 Fargate 托管的任务,平台版本 1.4.0 或更高版本(Linux)支持 Amazon EFS 文件系统。有关更多信息,请参阅Amazon Fargate 平台版本

  • 在 Fargate 上托管的任务中使用 Amazon EFS 卷时,Fargate 将创建负责管理 Amazon EFS 卷的主管容器。主管容器使用少量的任务内存。主管容器在查询任务元数据版本 4 端点时可见。此外,它作为容器名称 aws-fargate-supervisor 在 CloudWatch Container Insights 中可见。有关更多信息,请参阅任务元数据终端节点版本 4

  • 不支持在外部实例上使用 Amazon EFS 卷或指定 EFSVolumeConfiguration

  • 我们建议您将代理配置文件中的 ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION 参数值设置为小于默认值(约 1 小时)。此更改有助于防止 EFS 挂载凭证过期,并允许清理未使用的挂载。有关更多信息,请参阅 可用参数

使用 Amazon EFS 访问点

Amazon EFS 访问点是 EFS 文件系统中特定于应用程序的入口点,用于管理应用程序对共享数据集的访问。有关 Amazon EFS 访问点以及如何控制访问的更多信息,请参阅《Amazon Elastic File System 用户指南》中的使用 Amazon EFS 访问点

访问点可以为通过访问点发出的所有文件系统请求强制执行用户身份(包括用户的 POSIX 组)。访问点还可以为文件系统强制执行不同的根目录。这样,客户端只能访问指定目录或其子目录中的数据。

注意

创建 EFS 访问点时,请在文件系统上指定用作根目录的路径。在 Amazon ECS 任务定义中引用具有访问点 ID 的 EFS 文件系统时,必须忽略根目录或将根目录设置为 /,以便在 EFS 访问点上强制执行设置的路径。

您可以使用 Amazon ECS 任务 IAM 角色强制特定应用程序使用特定的访问点。通过将 IAM policy 与访问点相结合,您可以为您的应用程序提供对特定数据集的安全访问。有关如何使用任务 IAM 角色的更多信息,请参阅任务 IAM 角色

在任务定义中指定 Amazon EFS 文件系统

要为容器使用 Amazon EFS 文件系统卷,您必须在任务定义中指定卷和挂载点配置。以下任务定义 JSON 代码段显示容器的 volumesmountPoints 对象的语法。

{ "containerDefinitions": [ { "name": "container-using-efs", "image": "amazonlinux:2", "entryPoint": [ "sh", "-c" ], "command": [ "ls -la /mount/efs" ], "mountPoints": [ { "sourceVolume": "myEfsVolume", "containerPath": "/mount/efs", "readOnly": true } ] } ], "volumes": [ { "name": "myEfsVolume", "efsVolumeConfiguration": { "fileSystemId": "fs-1234", "rootDirectory": "/path/to/my/data", "transitEncryption": "ENABLED", "transitEncryptionPort": integer, "authorizationConfig": { "accessPointId": "fsap-1234", "iam": "ENABLED" } } } ] }
efsVolumeConfiguration

类型:对象

必需:否

使用 Amazon EFS 卷时将指定此参数。

fileSystemId

类型:字符串

必需:是

要使用的 Amazon EFS 文件系统 ID。

rootDirectory

类型:字符串

必需:否

Amazon EFS 文件系统中要作为主机内的根目录挂载的目录。如果忽略此参数,将使用 Amazon EFS 卷的根目录。指定 / 与忽略此参数效果相同。

重要

如果在 authorizationConfig 中指定了 EFS 访问点,则必须省略根目录值,或者将其设置为 /,以便在 EFS 访问点上强制执行设置的路径。

transitEncryption

类型:字符串

有效值:ENABLED | DISABLED

必需:否

指定是否对 Amazon ECS 主机和 Amazon EFS 服务器之间传输的 Amazon EFS 数据启用加密。如果使用 Amazon EFS IAM 授权,则必须启用传输加密。如果忽略此参数,将使用默认值 DISABLED。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的加密传输中的数据

transitEncryptionPort

类型:整数

必需:否

在 Amazon ECS 主机和 Amazon EFS 服务器之间发送加密数据时要使用的端口。如果未指定传输加密端口,将使用 Amazon EFS 挂载帮助程序使用的端口选择策略。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的 EFS 挂载帮助程序

authorizationConfig

类型:对象

必需:否

Amazon EFS 文件系统的授权配置详细信息。

accessPointId

类型:字符串

必需:否

要使用的访问点 ID。如果指定了访问点,则必须省略在 efsVolumeConfiguration 中指定的根目录值,或者将其设置为 /,以便在 EFS 访问点上强制执行设置的路径。如果使用访问点,则必须在 EFSVolumeConfiguration 中启用传输加密。有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的使用 Amazon EFS 访问点

iam

类型:字符串

有效值:ENABLED | DISABLED

必需:否

指定挂载 Amazon EFS 文件系统时是否使用在任务定义中定义的 Amazon ECS 任务 IAM 角色。如果启用,则必须在 EFSVolumeConfiguration 中启用传输加密。如果忽略此参数,将使用默认值 DISABLED。有关更多信息,请参阅适用于任务的 IAM 角色