【问题标题】:trying to attach/mount an EBS volume to ECS instance using terraform尝试使用 terraform 将 EBS 卷附加/挂载到 ECS 实例
【发布时间】:2019-10-19 03:18:33
【问题描述】:

terraform 中的 aws_volume_attachment 资源需要 instance_id ...我的问题是我想要将卷挂载到的实例是 ECS 集群的一部分,我似乎找不到任何巧妙的例子来传递实例的实例 ID将 ECS 集群连接到 aws_volume_attachment,以便我可以挂载现有的 EBS 卷。

使用 ARN 不起作用。

resource "aws_volume_attachment" "ebs_att" {
  device_name = "/dev/sdp"
  volume_id   = "${aws_ebs_volume.example.id}"
  instance_id = "${aws_instance.web.id}"
}

编辑 我基本上为实例添加了一个脚本,我的 terraform 看起来像这样:

data "template_file" "fleet-boothook" {
  template = "${file("${path.module}/boothook.tpl")}"

  vars {
    ecs_cluster_name = "${aws_ecs_cluster.this.name}"
    ebs_volume_id    = "${var.singleton_cluster_ebs_volume}"
  }
}

【问题讨论】:

  • ECS集群中的实例是如何创建的?
  • 我编写了一个单独的 ecs-cluster 模块。你是在问我的 aws_launch_configuration 是什么样的吗?

标签: terraform terraform-provider-aws


【解决方案1】:

我也遇到了这个问题,我接受的结论是没有简单的方法可以做到这一点。这个结论得到this issue 和this other one 的支持。我见过第三方解决方案 like this one,但我不习惯在我的基础架构中使用第三方应用程序。

相比之下,this repo 声称已经实现了为节点提供 EFS 的方法。我知道它不是 EBS,但它可以提供一种在容器和主 EC2 实例之间共享数据的方法,无论容器在哪个特定实例中运行。

也许您可以找到一种将现有 EC2 实例附加到您的集群的方法,以便您在配置它们时拥有更多控制权。这可能是我要尝试的方法,但我意识到它违背了使用 ecs 的一半目的,即在不关心底层主机基础设施的情况下抽象您启动容器的方式。


编辑:

我设法创建了一个 ECS 集群,其中所有实例都挂载了 EFS 分区。

  • 在与您创建集群相同的可用性区域中创建 EFS 卷 [1]。请务必在私有子网中创建它。

  • 修改您的启动配置UserData [2] 脚本以安装amazon-efs-utils [3]。如果您使用的是 ecs 优化的 amazon linux 镜像,只需将以下内容添加到您的脚本中:

  sudo yum install -y amazon-efs-utils
  • 在UserDatabash 脚本中添加创建挂载点和挂载之前创建的EFS 卷的步骤:
  mkdir -p /mnt/efs
  mount -t efs fs-12345678:/ /mnt/efs

将 fs-12345678 更改为您的 EFS 卷的 ID。

我猜您可以使用类似 samba 的方式公开 EBS 卷,但 EFS 不需要提供专用的 EC2 实例,它接收 dns 并且可以直接挂载。

[1]https://docs.aws.amazon.com/efs/latest/ug/troubleshooting-efs-mounting.html#mount-fails-dns-name

[2]https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts

[3]https://docs.aws.amazon.com/efs/latest/ug/using-amazon-efs-utils.html

【讨论】:

  • 有趣!我现在被埋葬了,但会回来消化这个。我会说我同意你的第一段。
  • EBS 难以使用的原因是它代表 EC2 实例中的物理设备,而 EFS 代表可挂载的网络实体。我相信使用 EBS,您只能从启动配置中的快照创建设备,而不是跨多个实例的共享设备
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2012-03-10
  • 2018-12-29
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多