尝试使用terraform将EBS卷连接/装载到ECS实例
terraform中的aws_volume_附件资源需要实例id。。。我的问题是,我想将卷装载到的实例是ECS群集的一部分,我似乎找不到任何聪明的例子将ECS群集中某个实例的实例ID传递给aws_volume_附件,以便装载现有EBS卷 使用ARN不起作用尝试使用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}"
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]。请确保在专用子网中创建它
- 修改您的启动配置
[2]脚本以安装UserData
[3]。如果您使用的是ecs优化的amazon linux映像,只需在脚本中添加以下内容:amazon efs utils
- 添加一个步骤,以在
bash脚本中创建装载点并装载先前创建的EFS卷:UserData
[3] 我也遇到了这个问题,我要接受的结论是,没有一种简单的方法可以做到这一点。这一结论得到了和的支持。我见过第三方解决方案,但我不喜欢在我的基础设施中使用第三方应用程序 相比之下,有一些公司声称已经实现了为节点提供EFS的方法。我知道它不是EBS,但它可以提供一种在容器和主EC2实例之间共享数据的方法,而不管容器运行在哪个特定实例中 也许您可以找到一种将现有EC2实例附加到集群的方法,以便在配置它们时拥有更多的控制权。这是我可能要尝试的,但我意识到它违背了使用ecs的一半目的,即抽象您启动容器的方式,而不考虑底层主机基础设施
编辑: 我设法创建了一个ECS集群,其中所有实例都安装了EFS分区
- 在创建群集的同一可用性区域中创建EFS卷[1]。请确保在专用子网中创建它
- 修改您的启动配置
[2]脚本以安装UserData
[3]。如果您使用的是ecs优化的amazon linux映像,只需在脚本中添加以下内容:amazon efs utils
- 添加一个步骤,以在
bash脚本中创建装载点并装载先前创建的EFS卷:UserData
[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