如何将EBS卷添加到Terraform中的ECS实例

时间:2017-01-14 08:18:21

标签: amazon-web-services amazon-ec2 amazon-ecs terraform

我正在尝试使用Terraform设置ECS群集,我无法弄清楚如何在承载需要该卷的服务的ECS实例上使Terraform autoprovision成为EBS卷。

在我的配置中,我有:

resource "aws_ecs_task_definition" "name" {
  family = "name"
  container_definitions = "${file("task-definitions/name.json")}"

  volume {
    name = "name-storage"
    host_path = "/ecs/name-storage"
  }
}

resource "aws_ecs_service" "name" {
  name = "name"
  cluster = "${aws_ecs_cluster.main.id}"
  task_definition = "${aws_ecs_task_definition.name.arn}"
  desired_count = 1
  iam_role = "${aws_iam_role.ecs_service_role.arn}"
  depends_on = ["aws_iam_role_policy.ecs_service_role_policy"]

  load_balancer {
    elb_name = "${aws_elb.name.id}"
    container_name = "name"
    container_port = 8000
  }
}

并在task-definitions/name.json我有:

"mountPoints": [
  {
    "sourceVolume": "name-storage",
    "containerPath": "/var/lib/cassandra"
  }
]

如何在托管此服务的实例上实际获取卷?

1 个答案:

答案 0 :(得分:1)

在Docker容器中安装卷是其他配置,然后配置EBS存储。您复制了ECS服务/任务设置的配置,但没有复制ECS实例的设置(应该是普通的EC2实例)。如果您使用标准ECS优化的亚马逊机器映像,则会自动在安装时创建一些标准EBS卷。

在使用ECS时,您想要在Docker容器中安装卷的问题仍然存在。在许多情况下,这不是必需的和/或存在其他优选的解决方案。构建ECS的前提是任何容器都可以在群集中的任何实例上运行,如果您需要来自容器外部的特定数据,则此前提可能不会成立。