我创建了一个EBS卷,我可以使用 Terraform 将其附加到EC2实例,但我无法弄清楚如何让 EBS 连接到由自动缩放组创建的 EC2。
有效的代码:
resource "aws_volume_attachment" "ebs_name" {
device_name = "/dev/sdh"
volume_id = aws_ebs_volume.name.id
instance_id = aws_instance.server.id
}
不起作用的代码:
resource "aws_volume_attachment" "ebs_name" {
device_name = "/dev/sdh"
volume_id = aws_ebs_volume.name.id
instance_id = aws_launch_template.asg-nginx.id
}
我希望的是一个自动扩展的启动模板,它添加了一个已经存在的 EBS,允许高性能的 EBS 共享,而不是“我们告诉你不要把代码放在那里” EFS 共享。
编辑:我正在使用多附件EBS。我可以手动将它附加到多个ASG创建的EC2实例,它可以工作。我只是不能使用 Terraform 来做到这一点。
编辑 2:我最终确定了Terraformuser_data
中的一个条目,该条目运行AWS命令行 bash 脚本来附加多附加 EBS。
脚本:
#!/bin/bash
[…aws keys here…]
aws ec2 attach-volume --device /dev/sdxx --instance-id `cat /var/lib/cloud/data/instance-id` --volume-id vol-01234567890abc
reboot
地形:
data "template_file" "shell-script" {
template = file("path/to/script.sh")
}
data "template_cloudinit_config" "script_sh" {
gzip = false
base64_encode = true
part {
content_type = "text/x-shellscript"
content = data.template_file.shell-script.rendered
}
}
resource "aws_launch_template" "template_name" {
[…]
user_data = data.template_cloudinit_config.mount_sh.rendered
[…]
}
这里的风险是将用户的 AWS 密钥存储在脚本中,但由于脚本从不存储在服务器上,所以没什么大不了的。任何user_data
有权访问的人都可以访问比您在此处使用的密钥更好的密钥。