如何将 Amazon EFS 文件系统挂载到 Amazon ECS 容器上或 Fargate 上运行的任务中?

上次更新日期:2020 年 12 月 17 日

我想要将 Amazon Elastic File System (Amazon EFS) 文件系统挂载到 Amazon Elastic Container Service (Amazon ECS) 容器上或在 AWS Fargate 上运行的任务上。

简短描述

要将 Amazon EFS 文件系统挂载到 Fargate 任务或容器上,您必须创建任务定义,然后跨您的 AWS 区域中的所有可用区将该任务定义提供给您任务中的容器。然后,您的 Fargate 任务使用 Amazon EFS 自动将文件系统挂载到您在任务定义中指定的任务中。

重要提示:以下解决方法适用于 Fargate 平台版本 1.4.0 或更高版本,该版本具有持久性存储,您可以在 Amazon ECS 中进行任务和容器级别定义。Fargate 平台版本 1.3.0 或更早版本不支持使用 Amazon EFS 的持久性存储。

在您完成解决方法部分的步骤前,您必须拥有以下各项:

解决方法

创建和配置 Amazon EFS 文件系统

1.    创建 Amazon EFS 文件系统,然后记下 EFS ID 和安全组 ID。

注意:您的 Amazon EFS 文件系统、Amazon ECS 集群和 Fargate 任务必须都位于相同的 VPC 中。

2.    要允许从与 Fargate 任务或服务关联的安全组在端口 2049(网络文件系统或 NFS)中进行入站连接,请编辑 EFS 文件系统的安全组规则

3.    更新 Amazon ECS 服务的安全组,以允许在端口 2049 上出站连接到 Amazon EFS 文件系统的安全组。

创建任务定义

1.    打开 Amazon ECS 控制台

2.    从导航窗格中,选择任务定义,然后选择新建任务定义

3.    在 Select launch type compatibility(选择启动类型兼容性)部分,选择 FARGATE,然后选择 Next Step(下一步)。

4.    在 Configure task and container definitions(配置任务和容器定义)部分,对于 Task definition name(任务定义名称),输入任务定义的名称。

5.    在 Volumes(卷)部分中,选择 Add volume(添加卷)。

6.    对于 Name(名称),输入您的卷名称。

7.    对于 Volume type(卷类型),输入 EFS。

8.    对于 File system ID(文件系统 ID),输入您的 Amazon EFS 文件系统的 ID。

注意:您可以为 Root directory(根目录)、Encryption in transit(传输中的加密)、EFS IAM authorization(EFS IAM 授权)指定自定义选项。 或者,您可以接受默认值,其中“/”是根目录。

9.    选择 Add(添加)。

10.    在 Container Definition(容器定义)部分,选择 Add container(添加容器)。

11.    在 STORAGE AND LOGGING(存储和日志记录)部分的 Mount points(挂载点)子部分中,选择您在步骤 5 中为 Source volume(源卷)创建的卷。

12.    对于 Container path(容器路径),请选择您的容器路径。

13.    (可选)在 ENVIRONMENT(环境)部分中,对于 Entry point(接入点),请输入您的接入点。

14.    对于 Command(命令),请输入 [df ,-h] 命令以显示挂载的文件系统。 

注意:您可以使用接入点和命令来测试 Amazon EFS 文件系统是否已成功挂载。默认情况下,容器将在 df -h 命令成功执行后退出。步骤 16 中的 JSON 任务定义示例使用无限 while 循环来保持任务运行。

15.    选择 Add(添加)。

16.    填写任务定义向导中的其余字段,然后选择 Create(创建)。

在以下示例中,任务定义创建了一个名为 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"
}
注意:fileSystemIdlogConfigurationcontainerPath 和其他占位符值替换为您的自定义配置的值。此外,请确认您的任务定义具有支持 awslogs 日志驱动程序的执行角色 Amazon 资源名称 (ARN)。

运行 Fargate 任务并检查任务日志

1.    使用您之前创建的任务定义运行 Fargate 任务。

重要提示:务必在 Fargate 平台版本 1.4.0 上运行您的任务。

2.    要验证您的 Amazon EFS 文件系统是否已成功挂载到 Fargate 容器中,请检查任务日志

df-h 的输出应与以下类似:

2020-10-27 15:15:35
Filesystem 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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?