微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有自动缩放组和使用 Terraform 启动配置的多个模板文件

如何解决具有自动缩放组和使用 Terraform 启动配置的多个模板文件

我有 3 个自动缩放组,它们都使用略有不同的模板文件。我拥有的 3 个模板文件的不同之处在于,每个模板文件自动缩放组中的实例启动时附加不同的 EBS 卷。我想弄清楚如何使用计数将这些不同的模板文件传递给每个自动缩放组。目前 terraform 代码设置为一个模板文件资源使用 1 个文件的位置,但我需要它来确定如何选择第二个和第三个模板文件。我已经对与 terraform 集成的这个 Cloudinit Config 资源进行了一些研究,但不确定这样的事情是否对我有帮助。任何意见,将不胜感激。以下是我当前的 terraform 代码的设置方式。

模板文件

data "template_file" "user_data" {
  count    = "${(var.enable ? 1 : 0) * var.number_of_zones}"
  template = "${file("userdata.sh")}"

  vars {
    node                   = "Node${count.index + 1}"
  }
}

启动配置

resource "aws_launch_configuration" "launch_configuration" {
count = "${(var.enable ? 1 : 0) * var.number_of_zones}"

  name      = "${var.cluster_name}-launch_node_${count.index}"
  key_name  = "${var.key_name2}"
  image_id  = "${lookup(var.amis,"${var.aws_region}.${var.licensee_key == "" && var.licensee == "" ? "enterprise" : "byol"}")}"
  user_data = "${element(data.template_file.user_data.*.rendered,count.index)}"

  security_groups = [
    "${aws_security_group.instance_security_group.id}",]

  instance_type        = "${var.instance_type}"
  iam_instance_profile = "${aws_iam_instance_profile.instance_host_profile.name}"

  ebs_block_device {
    device_name = "/dev/sdf"
    no_device   = true
  }

    lifecycle {
    create_before_destroy = true
  }
}

用户数据脚本

#!/bin/bash

# Attach the right EBS volume
aws ec2 attach-volume --volume-id vol-xxxxxxxxxxxxxxxxx --instance_id `curl http://169.254.169.254/latest/Meta-data/instance-id` --device /dev/sdf

我拥有的每个用户数据脚本在实例启动时安装了不同的卷。关于如何在不创建多个 template_file 资源块的情况下传递不同值的任何建议都会有所帮助。使用的 terraform 版本为 0.11.10。

解决方法

您正在将 node 变量传递给您的 user_data 模板。您可以使用 interpolation:

在模板中引用它
#!/bin/bash

# Attach the right EBS volume
aws ec2 attach-volume --volume-id ${node} --instance_id `curl http://169.254.169.254/latest/meta-data/instance-id` --device /dev/sdf

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?