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

Amazon EFS 卷

Amazon Elastic File System (Amazon EFS) 提供简单的可扩展文件存储以供与 Amazon EC2 实例配合使用。使用 Amazon EFS 时,存储容量是弹性的,可在您添加和删除文件时自动增加和缩减。您的应用程序可在需要时获得所需存储。

您可以将 Amazon EFS 文件系统与 Amazon ECS 配合使用,以便导出跨容器实例队列的文件系统数据。这样,无论您的任务登录的是哪个实例,都可以访问相同的持久性存储。但是,您必须将容器实例 AMI 配置为在 Docker 守护程序启动前挂载 Amazon EFS 文件系统。此外,您的任务定义必须引用容器实例上的卷挂载才能使用该文件系统。下面几节可帮助您了解如何将 Amazon EFS 与 Amazon ECS 配合使用。

有关教程,请参阅教程:将 Amazon EFS 文件系统与 Amazon ECS 配合使用

Amazon EFS 卷注意事项

使用 Amazon EFS 卷时应注意以下事项:

  • 对于使用 EC2 启动类型的任务,已将 Amazon EFS 文件系统支持作为一个公共预览版添加,其中包括 Amazon ECS-optimized AMI 版本 20191212 以及容器代理版本 1.35.0。但是,Amazon EFS 文件系统支持已通过 Amazon ECS-optimized AMI 版本 20200319 和容器代理版本 1.38.0 正式推出(包含 Amazon EFS 访问点和 IAM 授权功能)。建议您使用 Amazon ECS-optimized 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 或更高版本时已添加 Amazon EFS 文件系统支持。有关更多信息,请参阅AWS Fargate 平台版本

  • 在使用 Fargate 启动类型的任务中指定 Amazon EFS 卷时,Fargate 将创建负责管理 Amazon EFS 卷的主管容器。主管容器使用少量的任务内存。主管容器在查询任务元数据版本 4 终端节点时可见,但在 CloudWatch Container Insights 中不可见。有关更多信息,请参阅任务元数据终端节点版本 4

使用 Amazon EFS 访问点

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

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

您可以使用 Amazon ECS 任务 IAM 角色强制特定应用程序使用特定的访问点。通过将 IAM 策略与访问点相结合,您可以轻松地为您的应用程序提供对特定数据集的安全访问。有关使用任务 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 卷的根目录。指定 / 与忽略此参数效果相同。

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 中启用传输加密。有关更多信息,请参阅 Amazon Elastic File System 用户指南 中的使用 Amazon EFS 访问点

iam

类型:字符串

有效值:ENABLED | DISABLED

必需:否

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