20

我正在aws_launch_configuration使用 terraform 启动一个实例。

我正在为user_data变量使用 shell 脚本,如下所示:

resource "aws_launch_configuration" "launch_config" {
    ...
     user_data                     = "${file("router-init.sh")}"
    ....  
}

在这个 router-init.sh 中,我想做的一件事是访问我通过 terraform 启动的其他实例的 IP 地址。

我知道我可以使用 splat 访问该实例的所有 IP 地址,例如:

output ip_address {
    value = ${aws_instance.myAWSInstance.*.private_ip}"
}

有没有办法在 router-init.sh 脚本中传递/访问这些 IP 地址?

4

2 回答 2

36

您可以使用template_file数据源执行此操作:

data "template_file" "init" {
  template = "${file("router-init.sh.tpl")}"

  vars = {
    some_address = "${aws_instance.some.private_ip}"
  }
}

然后在模板中引用它,如:

#!/bin/bash

echo "SOME_ADDRESS = ${some_address}" > /tmp/

然后将其用于user_data

 user_data = ${data.template_file.init.rendered}
于 2018-06-13T11:18:49.300 回答
5

对于自 Terraform 0.12 及更高版本以来来到这里的人,应该使用templatefile 函数而不是使用 template_file 资源,因此对于问题中的示例,它将类似于

locals {
  vars = {
    some_address = aws_instance.some.private_ip
  }
}

user_data = base64encode(templatefile("${path.module}/router-init.sh", local.vars))
于 2020-09-20T15:41:01.173 回答