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

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

教程:使用控制台在 Amazon ECS 上使用亚马逊 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 一般参考

步骤 1:创建 Amazon ECS 集群

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

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

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

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

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

  3. 在导航窗格中,选择 Clusters

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

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

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

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

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

  7. (可选)要向集群添加 Amazon EC2 实例,请展开 Infrastructure(基础设施),然后选择 Amazon EC2 instances(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 EFS 文件系统创建安全组

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

使用以下选项创建安全组:

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

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

  • 入站规则

    • 类型-NFS

    • 来源-自定义使用安全组 ID。

有关如何创建安全组的信息,请参阅创建安全组适用于 Linux 实例的亚马逊 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. Configure network access (配置网络访问) 页面上,选择托管容器实例的 VPC。默认情况下,指定 VPC 中的每个子网都会收到使用该 VPC 默认安全组的挂载目标。

    重要

    您的 Amazon EFS 文件系统、Amazon ECS 集群、容器实例和任务必须位于同一 VPC 中。

  4. Create mount targets (创建挂载目标) 下,对于 Security groups (安全组),添加您在步骤 2 中创建的安全组。选择 Next Step

  5. Configure file system settings (配置文件系统设置) 页面上,配置可选设置,然后选择 Next Step (下一步) 继续。

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

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

    3. 为文件系统选择吞吐量模式。Bursting (突增) 模式是默认值,建议大多数文件系统使用它。

    4. 为文件系统选择性能模式。General Purpose (通用) 模式是默认值,建议大多数文件系统使用它。

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

  6. Configure client access (配置客户端访问) 页面上,选择下一步

  7. 查看文件系统选项,然后选择 Create File System (创建文件系统) 完成此过程。

  8. 在文件系统详细信息屏幕中,记录 File system ID (文件系统 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. Choose an Amazon Machine Image (选择 Amazon 系统映像) 页面上,选择最新的 Amazon Linux 2 AMI (HVM) AMI。

  4. Choose an Instance Type 页面上,保留默认的实例类型 t2.micro,然后选择 Next: Configure Instance Details

  5. Configure Instance Details (配置实例详细信息) 页面中,执行以下操作:

    1. 对于网络,选择您为 Amazon EFS 文件系统和 Amazon ECS 集群指定的 VPC。

    2. 对于 Auto-assign Public IP (自动分配公有 IP),选择 Enable (启用)。否则,您的实例将不会得到公有 IP 地址或公有 DNS 名称。

    3. 对于文件系统,选择 Amazon EFS 文件系统。您可以选择更改挂载位置或保留默认值。

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

  6. 选择 Next: Add Storage (下一步: 添加存储)Next: Add Tags (下一步: 添加标签)Next: Configure Security Group (下一步: 配置安全组),进入实例向导的步骤 5。

  7. Configure Security Group (配置安全组) 页面上,选择 Select an existing security group (选择现有安全组),选择您在步骤 1 中创建的安全组,然后选择 Review and Launch (查看并启动)

  8. Review Instance Launch 页面上,选择 Launch

  9. Select an existing key pair or create a new key pair (选择现有密钥对或创建新密钥对) 对话框中,选择 Choose an existing key pair (选择现有密钥对),然后选择您的密钥对。选择确认复选框,然后选择 Launch Instances

  10. Launch Status (启动状态) 页面上,选择 View Instances (查看实例) 以查看实例的状态。最初,其状态是 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) 下。

使用经典控制台创建新的任务定义
  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" }
  5. 依次选择 Save (保存)Create (创建)

步骤 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 上的入站网络流量。