如何在 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>
}

提前致谢。

A​​WS 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>
}