我想在 Amazon Elastic Container Service (Amazon ECS) 容器或任务上挂载 Amazon Elastic File System (Amazon EFS)。容器或任务使用 Amazon Elastic Compute Cloud (Amazon EC2) 启动类型。
解决方法
创建任务定义,在卷任务定义参数中提供文件系统 ID。这样,EFS 文件系统就能自动挂载到您在任务定义中指定的任务。
网络要求
确认您已完成如下配置:
- EFS 文件系统和使用 Amazon EC2 启动类型的 ECS 集群必须位于同一个虚拟私有云 (VPC) 中。
- EFS 文件系统的安全组必须允许 ECS 容器实例和 ECS 任务通过 2049 端口的入站连接。
- ECS 实例或任务的安全组必须允许通过 2049 端口向 EFS 文件系统的安全组发送出站连接。
创建任务定义
完成以下步骤:
- 打开 Amazon ECS 控制台,然后选择任务定义 (Task Definitions),新建任务定义 (Create new Task Definition)。
- 对于启动类型 (Launch type),选择 EC2,然后选择下一步 (Next step)。
- 在配置任务和容器定义 (Configure task and container definitions) 中,输入任务定义的名称。
- 在卷 (Volume) 部分中,选择添加卷 (Add volume)。
- 输入卷的名称,然后从卷类型 (Volume types) 下拉列表中选择 EFS。
- 对于文件系统 ID (File system ID),选择要用于 ECS 任务的文件系统的 ID。
- (可选)指定根目录 (Root directory)、传输中加密 (Encryption in transit) 和 EFS IAM 授权 (EFS IAM authorization)。如果您未指定任何内容,则会使用默认根目录“/”。
- 选择添加 (Add)。
- 创建容器时,在容器定义 (Container definitions) 下,选择添加容器 (Add container) 以使用新添加的卷。然后,在挂载点 (Mount points) 子部分的存储和日志 (Storage and Logging) 下,选择新添加的卷。
- 对于容器路径 (Container path),选择应用程序容器中的目录路径,然后选择添加 (Add)。
- 在任务定义向导中填写必填字段,然后选择创建 (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"
}
**注意:**将 fileSystemid、containerPath 和其他任务定义参数替换为您自己的值。
在前面的示例中,您可以在文件系统的根目录中创建 index.html 示例文件,内容类似于如下所示:
<html> <body>
<h1>You are using an Amazon EFS file system for persistent container storage.</h1>
</body>
</html>
运行 Amazon ECS 任务
完成以下步骤:
- 要运行 ECS 任务,请使用任务定义。
- 要验证 EFS 文件系统是否已挂载到 ECS 容器上,请使用实例的 IP 地址来访问网站。