使用控制台在 Amazon ECS 上使用 Amazon EFS 文件系统 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用控制台在 Amazon ECS 上使用 Amazon EFS 文件系统

Amazon Elastic File System (Amazon EFS) 提供简单的可扩展文件存储以供您的 Amazon ECS 任务使用。使用 Amazon EFS 时,存储容量是弹性的,可在您添加和删除文件时自动增加和缩减。您的应用程序可在需要时获得所需存储。

您可以将 Amazon EFS 文件系统与 Amazon ECS 配合使用,以便访问您的 Amazon ECS 任务队列中的文件系统数据。这样,无论您的任务登录的是基础设施实例还是容器实例,都可以访问相同的持久性存储。当您在 Amazon ECS 任务定义中引用 Amazon EFS 文件系统和容器挂载点时,Amazon ECS 负责在容器中挂载文件系统。下面几个部分可帮助您了解如何将 Amazon EFS 与 Amazon ECS 配合使用。

同时使用 EC2 和 Fargate 启动类型的任务支持此功能,但本教程将使用的 Amazon ECS 任务将使用 EC2 启动类型。本教程还会采取分步介绍的形式,不过,如果您已经在您的帐户中创建了这些资源中的一部分,您也许可以跳过一些步骤。

注意

Amazon EFS 可能并未在所有区域提供。有关哪些区域支持 Amazon EFS 的更多信息,请参阅 Amazon Web Services 一般参考 中的 Amazon Elastic File System 端点和配额

步骤 1:创建 Amazon ECS 集群

请按照以下步骤创建 Amazon ECS 集群。

要创建新集群(Amazon ECS 控制台)

在开始之前,分配相应的 IAM 权限。有关更多信息,请参阅 集群示例

  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. 从导航栏中,选择要使用的区域。

  3. 在导航窗格中,选择集群

  4. Clusters(集群)页面上,选择 Create cluster(创建集群)。

  5. 集群配置下方的集群名称中,输入 EFS-tutorial 作为集群名称。

  6. (可选)要更改任务和服务启动所在的 VPC 和子网,在 Networking(联网)下,执行以下任一操作:

    • 要删除子网,请在 Subnets(子网)下,为您要删除的每个子网选择 X

    • 要更改为默认 VPC 以外的 VPC,在 VPC 下,选择现有的 VPC,然后在 Subnets(子网)中,选择每个子网。

  7. 要向集群添加 Amazon EC2 实例,请展开基础设施,然后选择 Amazon EC2 实例。接下来,配置充当容量提供程序的 自动扩缩组:

    1. 要创建 自动扩缩组,请从 自动扩缩组(ASG)(自动扩缩组(ASG))中,选择 Create new group(创建新组),然后提供有关组的以下详细信息:

      • 对于操作系统/架构,选择 Amazon Linux 2。

      • 对于 EC2 instance type (EC2 实例类型),选择 t2.micro

        对于 SSH key pair(SSH 密钥对),连接到实例时,选择可证明您身份的密钥对。

      • 对于容量,输入 1

  8. 选择 创建

步骤 2:为 Amazon EC2 实例和 Amazon EFS 文件系统创建安全组

在此步骤中,您需要为 Amazon EFS 文件系统创建一个安全组,以允许端口 80 上的入站网络流量,并为 Amazon EFS 文件系统创建一个安全组,以允许您的容器实例进行入站访问。

使用以下选项为您的 Amazon EC2 实例创建安全组:

  • 安全组名称 - 安全组的唯一名称。

  • VPC - 您之前为集群确定的 VPC。

  • 入站规则

    • 类型 - HTTP

    • 来源 - 0.0.0.0/0

使用以下选项为您的 Amazon EFS 文件系统创建安全组:

  • 安全组名称 - 安全组的唯一名称。例如,EFS-access-for-sg-dc025fa2

  • VPC - 您之前为集群确定的 VPC。

  • 入站规则

    • 类型 - NFS

    • 来源 - 使用您为实例创建的安全组的 ID 自定义

有关如何创建安全组的信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的创建安全组

步骤 3:创建 Amazon EFS 文件系统

在该步骤中,您将创建一个 Amazon EFS 文件系统。

为 Amazon ECS 任务创建 Amazon EFS 文件系统。
  1. 访问 https://console.aws.amazon.com/efs/,打开 Amazon Elastic File System 控制台。

  2. 选择 Create file system

  3. 输入文件系统的名称,然后选择托管容器实例的 VPC。默认情况下,指定 VPC 中的每个子网都会收到使用该 VPC 默认安全组的挂载目标。然后,选择自定义

    注意

    本教程假设您的 Amazon EFS 文件系统、Amazon ECS 集群、容器实例和任务位于同一 VPC 中。有关从其他 VPC 挂载文件系统的更多信息,请参阅 Amazon EFS 用户指南中的演练:从其他 VPC 挂载文件系统

  4. 文件系统设置页面上,配置可选设置,然后在性能设置下,为您的文件系统选择突增吞吐量模式。配置完设置后,选择下一步

    1. (可选) 为文件系统添加标签。例如,通过在 Name 键旁边的 Value 列中输入名称可以为文件系统指定唯一的名称。

    2. (可选)启用生命周期管理可节省不经常访问的存储的成本。有关更多信息,请参阅 Amazon Elastic File System 用户指南中的 EFS 生命周期管理

    3. (可选)启用加密。选中该复选框可对 Amazon EFS 文件系统启用静态加密。

  5. 网络访问页面的挂载目标下,将每个可用区的现有安全组配置替换为您在 步骤 2:为 Amazon EC2 实例和 Amazon EFS 文件系统创建安全组 中为文件系统创建的安全组,然后选择下一步

  6. 您无需为本教程配置文件系统策略,因此您可以通过选择下一步来跳过本部分。

  7. 查看文件系统选项,然后选择创建以完成此过程。

  8. 文件系统屏幕中,记录文件系统 ID。在下一步中,您将在 Amazon ECS 任务定义中引用此值。

步骤 4:向 Amazon EFS 文件系统添加内容

在此步骤中,您将 Amazon EFS 文件系统挂载到 Amazon EC2 实例并向其添加内容。这在本教程中用于测试,目的是说明数据的持久性质。使用此功能时,您通常会使用您的应用程序或其他方法将数据写入 Amazon EFS 文件系统。

创建 Amazon EC2 实例并挂载 Amazon EFS 文件系统
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 选择 Launch Instance(启动实例)

  3. 应用程序和操作系统映像(Amazon 系统映像)下,选择 Amazon Linux 2 AMI(HVM)

  4. 实例类型下,保留默认实例类型 t2.micro

  5. 密钥对(登录)下,选择用于 SSH 访问实例的密钥对。

  6. 网络设置下,选择您为 Amazon EFS 文件系统和 Amazon ECS 集群指定的 VPC。选择子网和在 步骤 2:为 Amazon EC2 实例和 Amazon EFS 文件系统创建安全组 中创建的实例安全组。配置实例的安全组。确保已启用自动分配公有 IP

  7. 配置存储下,选择文件系统的编辑按钮,然后选择 EFS。选择您在 步骤 3:创建 Amazon EFS 文件系统 中创建的文件系统。您可以选择更改挂载点或保留默认值。

    重要

    您必须先选择子网,然后才能将文件系统添加到实例中。

  8. 清除自动创建和附加安全组。将另一个复选框保持选中状态。请选择 Add shared file system(添加共享文件系统)。

  9. Advanced Details (高级详细信息) 下,确保通过 Amazon EFS 文件系统挂载步骤自动填充用户数据脚本。

  10. 摘要下,确保实例数1。选择启动实例

  11. 启动状态页面上,选择查看所有实例以查看实例的状态。最初,实例状态PENDING。在状态变为 RUNNING 且实例通过所有状态检查后,实例就可以使用了。

现在,您可以连接到 Amazon EC2 实例并向 Amazon EFS 文件系统添加内容。

连接到 Amazon EC2 实例并向 Amazon EFS 文件系统添加内容
  1. SSH 到您创建的 Amazon EC2 实例。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的连接到您的 Linux 实例

  2. 从终端窗口,运行 df -T 命令以验证 Amazon EFS 文件系统是否已挂载。在下面的输出中,我们突出了 Amazon EFS 文件系统挂载。

    $ df -T Filesystem Type 1K-blocks Used Available Use% Mounted on devtmpfs devtmpfs 485468 0 485468 0% /dev tmpfs tmpfs 503480 0 503480 0% /dev/shm tmpfs tmpfs 503480 424 503056 1% /run tmpfs tmpfs 503480 0 503480 0% /sys/fs/cgroup /dev/xvda1 xfs 8376300 1310952 7065348 16% / 127.0.0.1:/ nfs4 9007199254739968 0 9007199254739968 0% /mnt/efs/fs1 tmpfs tmpfs 100700 0 100700 0% /run/user/1000
  3. 导航到挂载 Amazon EFS 文件系统的目录。在上述示例中,即为 /mnt/efs/fs1

  4. 使用以下内容创建名为 index.html 的文件:

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

步骤 5:创建任务定义

以下任务定义创建名为 efs-html 的数据卷。nginx 容器将该主机数据卷挂载在 NGINX 根目录 (/usr/share/nginx/html) 下。

要使用 Amazon ECS 控制台创建新的任务定义
  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. 在导航窗格中,选择 Task definitions(任务定义)。

  3. 选择 Create new task definition(创建新的任务定义)、Create new task definition with JSON(使用 JSON 创建新的任务定义)。

  4. 在 JSON 编辑器框中,复制并粘贴以下 JSON 文本,将 fileSystemId 替换为 Amazon EFS 文件系统的 ID。

    { "containerDefinitions": [ { "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ], "essential": true, "mountPoints": [ { "containerPath": "/usr/share/nginx/html", "sourceVolume": "efs-html" } ], "name": "nginx", "image": "nginx" } ], "volumes": [ { "name": "efs-html", "efsVolumeConfiguration": { "fileSystemId": "fs-1324abcd", "transitEncryption": "ENABLED" } } ], "family": "efs-tutorial", "executionRoleArn":"arn:aws::iam::111122223333:role/ecsTaskExecutionRole" }
    注意

    您可以将以下权限添加到您的 Amazon ECS 任务执行 IAM 角色中,以允许 Amazon ECS 代理在任务启动时找到并挂载 Amazon EFS 文件系统。

    • elasticfilesystem:ClientMount

    • elasticfilesystem:ClientWrite

    • elasticfilesystem:DescribeMountTargets

    • elasticfilesystem:DescribeFileSystems

  5. 选择 创建

步骤 6:运行任务并查看结果

现在,您的 Amazon EFS 文件系统已经创建,并且已经有 NGINX 容器要提供的 Web 内容,您可以使用您创建的任务定义运行任务了。NGINX Web 服务器提供简单的 HTML 页面。如果更新 Amazon EFS 文件系统中的内容,更改会传播到挂载了该文件系统的所有容器。

该任务在您为集群定义的子网中运行。

使用控制台运行任务并查看结果
  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. Clusters(集群)页面上,选择包含要运行独立任务的集群。

    确定要从其中启动服务的资源。

    从中启动服务 步骤

    集群

    1. 集群页面上,选择要在其中创建服务的集群。

    2. 任务选项卡上,选择运行新任务

    启动类型
    1. Task(任务)页面上,选择任务定义。

    2. 如果有多个修订版,请选择相应的修订版。

    3. 选择 Create(创建)、Run task(运行任务)。

  3. (可选)选择计划任务在集群基础设施中的分发方式。展开 Compute configuration(计算配置),然后执行以下操作:

    分配方式 步骤
    启动类型
    1. Compute options(计算选项)部分中,选择 Launch type(启动类型)。

    2. 对于启动类型,选择 EC2

  4. 对于应用程序类型,选择任务

  5. 对于任务定义,选择您之前创建的 efs-tutorial 任务定义。

  6. 对于所需任务,输入 1

  7. 选择 创建

  8. 集群页面上,选择基础设施

  9. 容器实例下,选择要连接的容器实例。

  10. 容器实例页面的联网下,记录您的实例的公有 IP

  11. 打开浏览器并输入公有 IP 地址。您将看到以下消息:

    It works! You are using an Amazon EFS file system for persistent container storage.
    注意

    如果没有看到该消息,请确保容器实例的安全组允许端口 80 上的入站网络流量,且文件系统的安全组允许从容器实例进行入站访问。