将 Amazon EFS 卷与 Amazon ECS 结合使用
Amazon Elastic File System (Amazon EFS) 提供简单的可扩展文件存储以供您的 Amazon ECS 任务使用。使用 Amazon EFS 时,存储容量是弹性的。它会随着您添加和删除文件而自动增加和缩减。您的应用程序可在需要时获得所需存储。
您可以将 Amazon EFS 文件系统与 Amazon ECS 配合使用,以便导出跨容器实例队列的文件系统数据。这样,无论您的任务登录的是哪个实例,都可以访问相同的持久性存储。您的任务定义必须引用容器实例上的卷挂载才能使用该文件系统。
有关教程,请参阅 使用控制台为 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 优化的 Linux 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 ECS 的 Fargate 平台版本。
-
在 Fargate 上托管的任务中使用 Amazon EFS 卷时,Fargate 将创建负责管理 Amazon EFS 卷的主管容器。主管容器使用少量的任务内存。主管容器在查询任务元数据版本 4 端点时可见。此外,它作为容器名称
aws-fargate-supervisor
在 CloudWatch Container Insights 中可见。有关使用 Amazon EC2 启动类型的更多信息,请参阅Amazon ECS 任务元数据端点版本 4。有关使用 Fargate 启动类型的更多信息,请参阅Fargate 上任务的 Amazon ECS 任务元数据端点版本 4。 -
不支持在外部实例上使用 Amazon EFS 卷或指定
EFSVolumeConfiguration
。 -
建议您将代理配置文件中的
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
参数值设置为小于默认值(约 1 小时)。此更改有助于防止 EFS 挂载凭证过期,并允许清理未使用的挂载。有关更多信息,请参阅 Amazon ECS 容器代理配置。
使用 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 角色的更多信息,请参阅Amazon ECS 任务 IAM 角色。