尝试使用terraform将EBS卷连接/装载到ECS实例

尝试使用terraform将EBS卷连接/装载到ECS实例,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,terraform中的aws_volume_附件资源需要实例id。。。我的问题是,我想将卷装载到的实例是ECS群集的一部分,我似乎找不到任何聪明的例子将ECS群集中某个实例的实例ID传递给aws_volume_附件,以便装载现有EBS卷 使用ARN不起作用 resource "aws_volume_attachment" "ebs_att" { device_name = "/dev/sdp" volume_id = "${aws_ebs_volume.example.id}"

terraform中的aws_volume_附件资源需要实例id。。。我的问题是,我想将卷装载到的实例是ECS群集的一部分,我似乎找不到任何聪明的例子将ECS群集中某个实例的实例ID传递给aws_volume_附件,以便装载现有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}"
  }
}

我也经历了这个问题,我要接受的结论是,没有一个简单的方法可以做到这一点。这一结论得到了和的支持。我见过第三方解决方案,但我不喜欢在我的基础设施中使用第三方应用程序

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

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


编辑

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

  • 在创建群集的同一可用性区域中创建EFS卷[1]。请确保在专用子网中创建它

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

  • 添加一个步骤,以在
    UserData
    bash脚本中创建装载点并装载先前创建的EFS卷:
将fs-12345678更改为EFS卷的id

我想您可以使用samba之类的东西公开EBS卷,但EFS不需要提供专用的EC2实例,它接收dns并可以直接挂载

[1]

[2]


[3] 我也遇到了这个问题,我要接受的结论是,没有一种简单的方法可以做到这一点。这一结论得到了和的支持。我见过第三方解决方案,但我不喜欢在我的基础设施中使用第三方应用程序

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

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


编辑

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

  • 在创建群集的同一可用性区域中创建EFS卷[1]。请确保在专用子网中创建它

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

  • 添加一个步骤,以在
    UserData
    bash脚本中创建装载点并装载先前创建的EFS卷:
将fs-12345678更改为EFS卷的id

我想您可以使用samba之类的东西公开EBS卷,但EFS不需要提供专用的EC2实例,它接收dns并可以直接挂载

[1]

[2]


[3]

您是如何在ECS集群中创建实例的?我编写了一个单独的ECS集群模块。您是在问我的aws_launch_配置是什么样子的吗?您是如何在ECS集群中创建实例的?我已经编写了一个单独的ECS集群模块。你是在问我的aws\u启动\u配置是什么样子的吗?很有趣!我现在被埋了,但我会回来消化的。我同意你的第一段。EBS更难使用的原因是它代表EC2实例中的一个物理设备,而EFS代表一个可装载的网络实体。我相信使用EBS,您只能从启动配置中的快照创建设备,而不能跨多个实例创建共享设备有趣!我现在被埋了,但我会回来消化的。我同意你的第一段。EBS更难使用的原因是它代表EC2实例中的一个物理设备,而EFS代表一个可装载的网络实体。我相信使用EBS,您只能从启动配置中的快照创建设备,而不能跨多个实例创建共享设备
  sudo yum install -y amazon-efs-utils
  mkdir -p /mnt/efs
  mount -t efs fs-12345678:/ /mnt/efs