使用控制台为 Amazon ECS 配置 Amazon EFS 文件系统
了解如何将 Amazon Elastic File System(Amazon EFS)文件系统与 Amazon ECS 结合使用。
步骤 1:创建 Amazon ECS 集群
请按照以下步骤创建 Amazon ECS 集群。
要创建新集群(Amazon ECS 控制台)
在开始之前,分配相应的 IAM 权限。有关更多信息,请参阅 Amazon ECS 集群示例。
在 https://console.aws.amazon.com/ecs/v2
打开控制台。 -
从导航栏中,选择要使用的区域。
-
在导航窗格中,选择集群。
-
在 Clusters(集群)页面上,选择 Create cluster(创建集群)。
-
在集群配置下方的集群名称中,输入
EFS-tutorial
作为集群名称。 -
(可选)要更改任务和服务启动所在的 VPC 和子网,在 Networking(联网)下,执行以下任一操作:
-
要删除子网,请在 Subnets(子网)下,为您要删除的每个子网选择 X。
-
要更改为默认 VPC 以外的 VPC,在 VPC 下,选择现有的 VPC,然后在 Subnets(子网)中,选择每个子网。
-
-
要向集群添加 Amazon EC2 实例,请展开基础设施,然后选择 Amazon EC2 实例。接下来,配置充当容量提供程序的 自动扩缩组:
-
要创建 自动扩缩组,请从 自动扩缩组(ASG)(自动扩缩组(ASG))中,选择 Create new group(创建新组),然后提供有关组的以下详细信息:
-
对于操作系统/架构,选择 Amazon Linux 2。
-
对于 EC2 instance type (EC2 实例类型),选择
t2.micro
。对于 SSH key pair(SSH 密钥对),连接到实例时,选择可证明您身份的密钥对。
-
对于容量,输入
1
。
-
-
-
选择创建。
步骤 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 用户指南》中的为 Amazon EC2 实例创建安全组。
步骤 3:创建 Amazon EFS 文件系统
在该步骤中,您将创建一个 Amazon EFS 文件系统。
为 Amazon ECS 任务创建 Amazon EFS 文件系统。
-
访问 https://console.aws.amazon.com/efs/
,打开 Amazon Elastic File System 控制台。 -
选择 Create file system。
-
输入文件系统的名称,然后选择托管容器实例的 VPC。默认情况下,指定 VPC 中的每个子网都会收到使用该 VPC 默认安全组的挂载目标。然后,选择自定义。
注意
此教程假设您的 Amazon EFS 文件系统、Amazon ECS 集群、容器实例和任务位于同一 VPC 中。有关从其他 VPC 挂载文件系统的更多信息,请参阅《Amazon EFS 用户指南》中的演练:从其他 VPC 挂载文件系统。
-
在文件系统设置页面上,配置可选设置,然后在性能设置下,为您的文件系统选择突增吞吐量模式。配置完设置后,选择下一步。
-
(可选) 为文件系统添加标签。例如,通过在 Name 键旁边的 Value 列中输入名称可以为文件系统指定唯一的名称。
-
(可选)启用生命周期管理可节省不经常访问的存储的成本。有关更多信息,请参阅 Amazon Elastic File System 用户指南中的 EFS 生命周期管理。
-
(可选)启用加密。选中该复选框可对 Amazon EFS 文件系统启用静态加密。
-
-
在网络访问页面的挂载目标下,将每个可用区的现有安全组配置替换为您在 步骤 2:为 Amazon EC2 实例和 Amazon EFS 文件系统创建安全组 中为文件系统创建的安全组,然后选择下一步。
-
您无需为本教程配置文件系统策略,因此您可以通过选择下一步来跳过本部分。
-
查看文件系统选项,然后选择创建以完成此过程。
-
从文件系统屏幕中,记录文件系统 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(启动实例)。
-
在应用程序和操作系统映像(Amazon 系统映像)下,选择 Amazon Linux 2 AMI(HVM)。
-
在实例类型下,保留默认实例类型
t2.micro
。 -
在密钥对(登录)下,选择用于 SSH 访问实例的密钥对。
-
在网络设置下,选择您为 Amazon EFS 文件系统和 Amazon ECS 集群指定的 VPC。选择子网和在 步骤 2:为 Amazon EC2 实例和 Amazon EFS 文件系统创建安全组 中创建的实例安全组。配置实例的安全组。确保已启用自动分配公有 IP。
-
在配置存储下,选择文件系统的编辑按钮,然后选择 EFS。选择您在 步骤 3:创建 Amazon EFS 文件系统 中创建的文件系统。您可以选择更改挂载点或保留默认值。
重要
您必须先选择子网,然后才能将文件系统添加到实例中。
-
清除自动创建和附加安全组。将另一个复选框保持选中状态。请选择 Add shared file system(添加共享文件系统)。
-
在 Advanced Details (高级详细信息) 下,确保通过 Amazon EFS 文件系统挂载步骤自动填充用户数据脚本。
-
在摘要下,确保实例数为 1。选择启动实例。
-
在启动状态页面上,选择查看所有实例以查看实例的状态。最初,实例状态为
PENDING
。在状态变为RUNNING
且实例通过所有状态检查后,实例就可以使用了。
现在,您可以连接到 Amazon EC2 实例并向 Amazon EFS 文件系统添加内容。
连接到 Amazon EC2 实例并向 Amazon EFS 文件系统添加内容
-
SSH 到您创建的 Amazon EC2 实例。有关更多信息,请参阅《Amazon EC2 用户指南》中的使用 SSH 连接到 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
) 下。
要使用 Amazon ECS 控制台创建新的任务定义
在 https://console.aws.amazon.com/ecs/v2
打开控制台。 -
在导航窗格中,选择 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", "executionRoleArn":"arn:aws:iam::111122223333:role/ecsTaskExecutionRole
" }注意
您可以将以下权限添加到您的 Amazon ECS 任务执行 IAM 角色中,以允许 Amazon ECS 代理在启动时找到,并将 Amazon EFS 文件系统挂载到任务中。
-
elasticfilesystem:ClientMount
-
elasticfilesystem:ClientWrite
-
elasticfilesystem:DescribeMountTargets
-
elasticfilesystem:DescribeFileSystems
-
-
选择创建。
步骤 6:运行任务并查看结果
现在,您的 Amazon EFS 文件系统已经创建,并且已经有 NGINX 容器要提供的 Web 内容,您可以使用您创建的任务定义运行任务了。NGINX Web 服务器提供简单的 HTML 页面。如果更新 Amazon EFS 文件系统中的内容,更改会传播到挂载了该文件系统的所有容器。
该任务在您为集群定义的子网中运行。
使用控制台运行任务并查看结果
在 https://console.aws.amazon.com/ecs/v2
打开控制台。 -
在 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 上的入站网络流量,且文件系统的安全组允许从容器实例进行入站访问。