如何在 EC2 上运行的 ECS 容器或任务上挂载 EFS 文件系统?

上次更新日期:2022 年 7 月 18 日

我想将 Amazon Elastic File System (Amazon EFS) 与使用 Amazon Elastic Compute Cloud (Amazon EC2) 启动类型的 Amazon Elastic Container Service (Amazon ECS) 容器或任务配合使用。我该如何操作?

简短描述

您可以在 EC2 实例上运行的任务或容器上挂载 EFS 文件系统。为此,请创建一个在卷任务定义参数中提供文件系统 ID 的任务定义。这让 EFS 文件系统能够自动挂载到您在任务定义中指定的任务。

所需资源:

解决方法

网络要求

  • EFS 文件系统和 ECS 集群必须位于同一 VPC 中。
  • 与 EFS 文件系统关联的安全组必须允许通过端口 2049(网络文件系统或 NFS)从 ECS 容器实例和 ECS 任务进行入站连接。
  • ECS 实例或任务的安全组必须允许通过端口 2049 与 EFS 文件系统的安全组进行出站连接。

创建任务定义

1.    打开 Amazon ECS 控制台,然后依次选择 Task Definitions(任务定义)、Create new Task Definition(创建新任务定义)。

2.    选择 EC2 以获得启动类型兼容性,然后选择 Next step(下一步)。

3.    在 Configure task and container definitions(配置任务和容器定义)中,输入任务定义的名称。

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

5.    输入卷的名称,然后从 Volume types(卷类型)下拉菜单中选择 EFS

6.    对于 File system ID(文件系统 ID),选择要与 ECS 任务配合使用的文件系统的 ID。

7.    (可选)根据您的要求指定根目录传输中加密EFS IAM 授权。如果未修改任何选项,则使用默认根目录“/”。

8.    选择 Add(添加)。

9.    创建容器时,在 Container definitions(容器定义)下,选择 Add container(添加容器)以使用之前创建的卷。然后,在 Mount points(挂载点)子部分的 Storage and Logging(存储和日志记录)下,选择您在步骤 4 中创建的卷。

10.    对于容器路径,选择应用程序容器中的目录路径,然后选择 Add(添加)。

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

在以下示例中,任务定义创建了一个名为 efs-ec2-test 的数据卷。nginx 容器会将主机数据卷挂载到 /usr/share/nginx/html 路径。

{
  "containerDefinitions": [
    {
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "essential": true,
      "mountPoints": [
        {
          "containerPath": "/usr/share/nginx/html",
          "sourceVolume": "efs-ec2-test"
        }
      ],
      "name": "nginx",
      "image": "nginx"
    }
  ],
  "volumes": [
    {
      "name": "efs-ec2-test",
      "efsVolumeConfiguration": {
        "fileSystemId": "fs-1324abcd",
        "transitEncryption": "ENABLED"
      }
    }
  ],
  "family": "efs-test"
}

注意:根据自定义配置的值替换 fileSystemidcontainerPath 和其他任务定义参数。

在前面的示例中,您可以在文件系统的根目录下创建一个示例 index.html 文件,其内容如下:

<html>
  <body>
    <h1>You are using an Amazon EFS file system for persistent container storage.</h1>
  </body>
</html>

运行 ECS 任务

1.    使用之前创建的任务定义运行 ECS 任务

2.    通过使用 ECS 实例的公有 IP 地址访问网站,确保 EFS 文件系统成功挂载到 EC2 容器。


这篇文章对您有帮助吗?


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