【问题标题】:Can you mount an AWS Multi-Attach EBS volume to an auto-scaling group in Terraform?您可以将 AWS Multi-Attach EBS 卷挂载到 Terraform 中的自动扩展组吗?
【发布时间】:2020-11-06 11:43:13
【问题描述】:

我创建了一个 EBS 卷,我可以使用 Terraform 将它附加到 EC2 实例,但我无法弄清楚如何让 EBS 连接到由一个自动缩放组。

有效的代码:

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 共享而不是 “我们告诉你不要把代码放在那里” em> EFS 共享。

编辑:我正在使用多附件 EBS。我可以手动将它附加到多个 ASG-created EC2 实例,它可以工作。我只是无法使用 Terraform 来做到这一点。

编辑 2: 我最终确定了 Terraform 中的 user_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 的人都可以使用比您在此处使用的密钥更好的密钥。

【问题讨论】:

  • 这不起作用。如果它确实有效,那么如果 ASG 循环退出实例,您期望会发生什么?您可以在 ASG 中运行有状态应用程序,但我不会尝试重用 EBS 卷
  • 我正在使用设计为附加到多个 EC2 实例的 Multi-Attach EBS。

标签: amazon-web-services terraform amazon-ebs aws-auto-scaling


【解决方案1】:

这需要在每次创建新实例作为扩展事件的一部分时执行 Terraform,这需要自动调用。

相反,您应该考虑为您的自动缩放组添加 lifecycle hook

您可以将主题配置为trigger an SNS notification,它会调用Lambda 函数来附加到您的新实例。

【讨论】:

  • 这似乎是唯一可行的方法。遗憾的是,Terraform 的几页和大约十几个资源需要,而不是 ASG 资源中的一行,但这就是生活。我怀疑这是因为附加 EBS 卷是从 EBS 完成的,而不是 EC2。
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2020-10-27
  • 2021-01-27
  • 2014-09-27
  • 2019-10-19
  • 2021-11-06
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多