如何在 terraform 中将主机目录绑定到 ECS
How to bind host directory to ECS in terraform
我一直在尝试将应用程序容器化到 ECS 上。我正在使用 terraform 为其构建基础设施。
现在,我想将主机目录挂载到容器中。在普通 docker 上,我会通过使用 docker 运行 -v <host_path>:<path_inside_container>
来做到这一点。但是我无法在 terraform 中找到相同的等价物。
我已经在 aws_ecs_task_definition
中尝试了 volume
指令,但我无法 read/write from/to 主机目录。
resource "aws_ecs_task_definition" "my-application"{
family = <application_family_name>
task_role_arn = "${aws_iam_role.ecsTaskRole.arn}"
network_mode = "host"
volume {
name = <application_files>
host_path = "/home/my_app_dir/"
}
container_definitions = <container_definitions>
}
提前致谢。
AWS ECS 允许您在任务定义中使用名称和源路径创建数据卷
"volumes": [
{
"name": "applicationData",
"host": {
"sourcePath": "/ecs/applicationData"
}
}
]
和容器定义中的挂载点。
"mountPoints": [
{
"sourceVolume": "applicationData",
"containerPath": "/usr/share/nginx/html"
}
]
上面显示的是 cloudformation 片段,您可以尝试使用这些 Terraform 创建相同的片段 Apis。
您需要做的是,在资源aws_ecs_task_definition
中定义卷后,在任务定义中添加映射。
@Amal 通过在任务定义中添加 mountPoints
来回答问题。 任务定义中的 sourceVolume
必须与资源 volume
中的名称相同。
这里要说的是,
@amal 的卷代码部分是从 Cloudformation 模板复制的,但不能在 terraform 中使用。目前没有资源 aws_ecs_task_definition
支持的地图列表。你现有的卷码就可以了
如果您需要添加更多卷,请使用这种方式
resource "aws_ecs_task_definition" "my-application"{
family = <application_family_name>
task_role_arn = "${aws_iam_role.ecsTaskRole.arn}"
network_mode = "host"
volume {
name = <application_files>
host_path = "/home/my_app_dir/"
}
volume {
name = <application_files_2>
host_path = "/home/my_app_dir-2/"
}
container_definitions = <container_definitions>
}
我一直在尝试将应用程序容器化到 ECS 上。我正在使用 terraform 为其构建基础设施。
现在,我想将主机目录挂载到容器中。在普通 docker 上,我会通过使用 docker 运行 -v <host_path>:<path_inside_container>
来做到这一点。但是我无法在 terraform 中找到相同的等价物。
我已经在 aws_ecs_task_definition
中尝试了 volume
指令,但我无法 read/write from/to 主机目录。
resource "aws_ecs_task_definition" "my-application"{
family = <application_family_name>
task_role_arn = "${aws_iam_role.ecsTaskRole.arn}"
network_mode = "host"
volume {
name = <application_files>
host_path = "/home/my_app_dir/"
}
container_definitions = <container_definitions>
}
提前致谢。
AWS ECS 允许您在任务定义中使用名称和源路径创建数据卷
"volumes": [
{
"name": "applicationData",
"host": {
"sourcePath": "/ecs/applicationData"
}
}
]
和容器定义中的挂载点。
"mountPoints": [
{
"sourceVolume": "applicationData",
"containerPath": "/usr/share/nginx/html"
}
]
上面显示的是 cloudformation 片段,您可以尝试使用这些 Terraform 创建相同的片段 Apis。
您需要做的是,在资源aws_ecs_task_definition
中定义卷后,在任务定义中添加映射。
@Amal 通过在任务定义中添加 mountPoints
来回答问题。 任务定义中的 sourceVolume
必须与资源 volume
中的名称相同。
这里要说的是,
@amal 的卷代码部分是从 Cloudformation 模板复制的,但不能在 terraform 中使用。目前没有资源 aws_ecs_task_definition
支持的地图列表。你现有的卷码就可以了
如果您需要添加更多卷,请使用这种方式
resource "aws_ecs_task_definition" "my-application"{
family = <application_family_name>
task_role_arn = "${aws_iam_role.ecsTaskRole.arn}"
network_mode = "host"
volume {
name = <application_files>
host_path = "/home/my_app_dir/"
}
volume {
name = <application_files_2>
host_path = "/home/my_app_dir-2/"
}
container_definitions = <container_definitions>
}