New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何将 Amazon EFS 文件系统挂载到 Amazon ECS 容器上或 Fargate 上运行的任务中?
我想在 Amazon Elastic Container Service(Amazon ECS)容器或任务上挂载 Amazon Elastic File System(Amazon EFS)文件系统。Amazon ECS 容器或任务正在 AWS Fargate 上运行。
解决方法
要在 Fargate 任务或容器上挂载 Amazon EFS 文件系统,必须先创建任务定义。然后,将该任务定义提供给 AWS 区域内所有可用区的任务中的容器。最后,Fargate 任务使用 Amazon EFS 自动将文件系统挂载到在任务定义中指定的任务。
**重要事项:**以下解决方法适用于 Fargate 版本 1.4.0 及更高版本。这些版本具有可在 Amazon ECS 的任务和容器级别定义的永久存储。Fargate 版本 1.3.0 或更早版本不支持将永久存储用于 Amazon EFS。
先决条件
必须具备以下条件:
创建和配置 Amazon EFS 文件系统
- 创建 Amazon EFS 文件系统,然后记下 EFS ID 和安全组 ID。
**注意:**Amazon EFS 文件系统、Amazon ECS 集群和 Fargate 任务必须全部位于同一 VPC 中。 - 编辑 EFS 文件系统的安全组规则以允许入站连接。您必须允许通过端口 2049(网络文件系统,简称 NFS)从与 Fargate 任务或服务关联的安全组进行连接。
- 更新 Amazon ECS 服务的安全组,以允许通过端口 2049 对 Amazon EFS 文件系统的安全组进行出站连接。
创建任务定义
- 打开 Amazon ECS 经典控制台。
- 在导航窗格中,选择 Task Definitions(任务定义),然后选择 Create new Task Definition(创建新的任务定义)。
- 在 Select launch type compatibility(选择启动类型兼容性)部分中,选择 FARGATE,然后选择 Next Step(下一步)。
- 在 Configure task and container definitions(配置任务和容器定义)部分中,对于 Task Definition Name(任务定义名称),输入任务定义的名称。
- 在 Volumes(卷)部分中,选择 Add volume(添加卷)。
- 对于 Name(名称),输入卷的名称。
- 对于 Volume type(卷类型),输入 EFS。
- 对于 File system ID(文件系统 ID),输入 Amazon EFS 文件系统的 ID。
**注意:**您可以为 Root directory(根目录)、Encryption in transit(传输中加密)和 EFS AWS Identity and Access Management (IAM) authorization(EFS AWS Identity and Access Management (IAM) 授权)指定自定义选项。或者,您可以接受默认选项,其中“/”为根目录。 - 选择 Add(添加)。
- 在 Containers Definition(容器定义)部分中,选择 Add container(添加容器)。
- 在 STORAGE AND LOGGING(存储和日志)部分的 Mount points(挂载点)子部分中,选择在步骤 5 中为 Source volume(源卷)创建的卷。
- 对于 Container path(容器路径),选择容器路径。
- (可选)在环境部分中,为入口点输入相应的入口点。
- 对于命令,输入 [df ,-h] 命令以显示已挂载的文件系统。
**注意:**可以使用入口点和命令来测试 Amazon EFS 文件系统是否已成功挂载。默认情况下,容器在 df -h 命令成功运行后退出。步骤 16 中的 JSON 任务定义示例使用无限的 while 循环来保持任务运行。 - 选择 Add(添加)。
- 在任务定义向导中为其余字段输入信息,然后选择创建。
在以下示例中,JSON 任务定义使用无限循环来让任务一直运行。任务定义创建了一个名为 efs-test 的数据卷。nginx 容器将主机数据卷挂载到 Any_Container_Path 路径上。
{ "family": "sample-fargate-test", "networkMode": "awsvpc", "executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "fargate-app", "image": "nginx", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "df -h && while true; do echo \"RUNNING\"; done" ], "mountPoints": [ { "sourceVolume": "efs-test", "containerPath": "Any_Container_Path" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "AWS_LOG_GROUP_PATH", "awslogs-region": "AWS_REGION", "awslogs-stream-prefix": "AWS_STREAM_PREFIX" } } } ], "volumes": [ { "name": "efs-test", "efsVolumeConfiguration": { "fileSystemId": "fs-123xx4x5" } } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" }
**注意:**使用自定义配置的值替换 fileSystemId、logConfiguration、containerPath 和其他占位符值。此外,请确认任务定义具有执行角色 Amazon 资源名称 (ARN) 以支持 awslogs 日志驱动程序。
要将多个 EFS 挂载到不同的目标 (containerPath),可以在任务定义中定义多个 mountPoints 和 volumes。
运行 Fargate 任务并检查任务日志
- 使用您之前创建的任务定义运行 Fargate 任务。
**重要事项:**您必须使用 Fargate 平台版本 1.4.0 来运行任务。 - 要验证 Amazon EFS 文件系统是否已成功挂载到 Fargate 容器上,请检查任务日志。
df-h 的输出类似于以下内容:2020-10-27 15:15:35Filesystem 1K-blocks Used Available Use% Mounted on 2020-10-27 15:15:35 overlay 30832548 9859324 19383976 34% / 2020-10-27 15:15:35 tmpfs 65536 0 65536 0% /dev 2020-10-27 15:15:35 shm 2018788 0 2018788 0% /dev/shm 2020-10-27 15:15:35 tmpfs 2018788 0 2018788 0% /sys/fs/cgroup 2020-10-27 15:15:35 fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ 9007199254739968 0 9007199254739968 0% /Any_Container_Path 2020-10-27 15:15:35 /dev/xvdcz 30832548 9859324 19383976 34% /etc/hosts 2020-10-27 15:15:35 tmpfs 2018788 0 2018788 0% /proc/acpi 2020-10-27 15:15:35 tmpfs 2018788 0 2018788 0% /sys/firmware 2020-10-27 15:15:35 tmpfs 2018788 0 2018788 0% /proc/scsi RUNNING
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 个月前