本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用控制台在 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 权限。有关更多信息,请参阅集群示例:
-
从导航栏中,选择要使用的区域。
-
在导航窗格中,选择 Clusters。
-
在 Clusters(集群)页面上,选择 Create cluster(创建集群)。
-
在集群配置下方的集群名称中,输入
EFS-tutorial
作为集群名称。 -
(可选)要更改任务和服务启动所在的 VPC 和子网,在 Networking(联网)下,执行以下任一操作:
-
要删除子网,请在 Subnets(子网)下,为您要删除的每个子网选择 X。
-
要更改为默认 VPC 以外的 VPC,在 VPC 下,选择现有的 VPC,然后在 Subnets(子网)中,选择每个子网。
-
-
(可选)要向集群添加 Amazon EC2 实例,请展开 Infrastructure(基础设施),然后选择 Amazon EC2 instances(Amazon EC2 实例)。接下来,配置充当容量提供程序的 自动扩缩组:
-
要创建 自动扩缩组,请从 自动扩缩组(ASG)(自动扩缩组(ASG))中,选择 Create new group(创建新组),然后提供有关组的以下详细信息:
-
对于操作系统/架构,选择 Amazon Linux 2。
-
对于 EC2 instance type (EC2 实例类型),选择
t2.micro
。对于 SSH key pair(SSH 密钥对),连接到实例时,选择可证明您身份的密钥对。
-
对于容量,输入
1
。
-
-
-
选择创建。
步骤 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 文件系统。
-
访问 https://console.aws.amazon.com/efs/
,打开 Amazon Elastic File System 控制台。 -
选择 Create file system。
-
在 Configure network access (配置网络访问) 页面上,选择托管容器实例的 VPC。默认情况下,指定 VPC 中的每个子网都会收到使用该 VPC 默认安全组的挂载目标。
重要
您的 Amazon EFS 文件系统、Amazon ECS 集群、容器实例和任务必须位于同一 VPC 中。
-
在 Create mount targets (创建挂载目标) 下,对于 Security groups (安全组),添加您在步骤 2 中创建的安全组。选择 Next Step。
-
在 Configure file system settings (配置文件系统设置) 页面上,配置可选设置,然后选择 Next Step (下一步) 继续。
-
(可选) 为文件系统添加标签。例如,通过在 Name 键旁边的 Value 列中输入名称可以为文件系统指定唯一的名称。
-
(可选)启用生命周期管理可节省不经常访问的存储的成本。有关更多信息,请参阅 Amazon Elastic File System 用户指南中的 EFS 生命周期管理。
-
为文件系统选择吞吐量模式。Bursting (突增) 模式是默认值,建议大多数文件系统使用它。
-
为文件系统选择性能模式。General Purpose (通用) 模式是默认值,建议大多数文件系统使用它。
-
(可选)启用加密。选中该复选框可对 Amazon EFS 文件系统启用静态加密。
-
-
在 Configure client access (配置客户端访问) 页面上,选择下一步。
-
查看文件系统选项,然后选择 Create File System (创建文件系统) 完成此过程。
-
在文件系统详细信息屏幕中,记录 File system ID (文件系统 ID)。在下一步中,您将在 Amazon ECS 任务定义中引用此值。
步骤 4:向 Amazon EFS 文件系统添加内容
在此步骤中,您将 Amazon EFS 文件系统挂载到 Amazon EC2 实例并向其添加内容。这在本教程中用于测试,目的是说明数据的持久性质。使用此功能时,您通常会使用您的应用程序或其他方法将数据写入 Amazon EFS 文件系统。
创建 Amazon EC2 实例并挂载 Amazon EFS 文件系统
-
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
选择 Launch Instance(启动实例)。
-
在 Choose an Amazon Machine Image (选择 Amazon 系统映像) 页面上,选择最新的 Amazon Linux 2 AMI (HVM) AMI。
-
在 Choose an Instance Type 页面上,保留默认的实例类型
t2.micro
,然后选择 Next: Configure Instance Details。 -
在 Configure Instance Details (配置实例详细信息) 页面中,执行以下操作:
-
对于网络,选择您为 Amazon EFS 文件系统和 Amazon ECS 集群指定的 VPC。
-
对于 Auto-assign Public IP (自动分配公有 IP),选择 Enable (启用)。否则,您的实例将不会得到公有 IP 地址或公有 DNS 名称。
-
对于文件系统,选择 Amazon EFS 文件系统。您可以选择更改挂载位置或保留默认值。
-
在 Advanced Details (高级详细信息) 下,确保通过 Amazon EFS 文件系统挂载步骤自动填充用户数据脚本。
-
-
选择 Next: Add Storage (下一步: 添加存储)、Next: Add Tags (下一步: 添加标签) 和 Next: Configure Security Group (下一步: 配置安全组),进入实例向导的步骤 5。
-
在 Configure Security Group (配置安全组) 页面上,选择 Select an existing security group (选择现有安全组),选择您在步骤 1 中创建的安全组,然后选择 Review and Launch (查看并启动)。
-
在 Review Instance Launch 页面上,选择 Launch。
-
在 Select an existing key pair or create a new key pair (选择现有密钥对或创建新密钥对) 对话框中,选择 Choose an existing key pair (选择现有密钥对),然后选择您的密钥对。选择确认复选框,然后选择 Launch Instances。
-
在 Launch Status (启动状态) 页面上,选择 View Instances (查看实例) 以查看实例的状态。最初,其状态是
pending
。在状态变为running
后,您的实例即准备就绪,可以使用。
现在,您可以连接到 Amazon EC2 实例并向 Amazon EFS 文件系统添加内容。
连接到 Amazon EC2 实例并向 Amazon EFS 文件系统添加内容
-
SSH 到您创建的 Amazon EC2 实例。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的连接到您的 Linux 实例。
-
从每个实例的终端窗口,运行 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 -
导航到挂载 Amazon EFS 文件系统的目录。在上述示例中,即为
/mnt/efs/fs1
。 -
使用以下内容创建名为
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
) 下。
使用经典控制台创建新的任务定义
-
在导航窗格中,选择 Task definitions(任务定义)。
-
选择 Create new task definition(创建新的任务定义)、Create new task definition with JSON(使用 JSON 创建新的任务定义)。
-
在 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" } -
依次选择 Save (保存)、Create (创建)。
步骤 6:运行任务并查看结果
现在,您的 Amazon EFS 文件系统已经创建,并且已经有 NGINX 容器要提供的 Web 内容,您可以使用您创建的任务定义运行任务了。NGINX Web 服务器提供简单的 HTML 页面。如果更新 Amazon EFS 文件系统中的内容,更改会传播到挂载了该文件系统的所有容器。
该任务在您为集群定义的子网中运行。
使用控制台运行任务并查看结果
-
在 Clusters(集群)页面上,选择包含要运行独立任务的集群。
确定要从其中启动服务的资源。
从中启动服务 步骤 集群
-
在集群页面上,选择要在其中创建服务的集群。
-
从任务选项卡上,选择运行新任务。
启动类型 -
在 Task(任务)页面上,选择任务定义。
-
如果有多个修订版,请选择相应的修订版。
-
选择 Create(创建)、Run task(运行任务)。
-
-
(可选)选择计划任务在集群基础设施中的分发方式。展开 Compute configuration(计算配置),然后执行以下操作:
分配方式 步骤 启动类型 -
在 Compute options(计算选项)部分中,选择 Launch type(启动类型)。
-
对于启动类型,选择 EC2。
-
-
对于应用程序类型,选择任务。
-
对于任务定义,选择您之前创建的
efs-tutorial
任务定义。重要
控制台验证选择内容,确保所选任务定义系列和修订版与定义的计算配置兼容。
-
对于所需任务,输入
1
。 -
选择创建。
-
在集群页面上,选择基础设施。
-
在容器实例下,选择要连接的容器实例。
-
在容器实例页面的联网下,记录您的实例的公有 IP。
-
打开浏览器并在浏览器中输入公有 IP 地址,您应该看到以下消息:
It works! You are using an Amazon EFS file system for persistent container storage.
注意
如果没有看到该消息,请确保容器实例的安全组允许端口 80 上的入站网络流量。