如何将 Amazon EFS 文件系统挂载到 Amazon ECS 容器上或 Fargate 上运行的任务中?
3 分钟阅读
0
我想在 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 年前
没有评论
