在Terraform模板中使用资源属性作为变量



我试图将EC2实例的属性用作变量,但它一直失败或无法工作。正如你在下面看到的,我想将实例的私有IP插入到一个配置文件中,该文件将被复制到实例中。然后,远程exec脚本将文件移动到适当的位置(/etc/vault.d/server config.json)

实例。tf

resource "template_file" "tpl-vault-server-config" {
    template = "${file("${path.module}/templates/files/vault-server-config.json.tpl")}"      
    vars {
        aws_private_ip = "${aws_instance.ec2-consul-server.private_ip}"
    }  
}
provisioner "file" {
    source = "${template_file.tpl-vault-server-config.rendered}"
    destination = "/tmp/vault-server-config.json"
}

vault服务器配置.json.tpl

backend "consul" {
    address = "127.0.0.1:8500"
    path = "vault"
    tls_enable = 1
    tls_ca_file = "/etc/consul.d/ssl/ca.cert"
    tls_cert_file = "/etc/consul.d/ssl/consul.cert"
    tls_key_file = "/etc/consul.d/ssl/consul.key"
}
listener "tcp" {
    address = "${aws_private_ip}:8200"
    tls_cert_file = "/etc/consul.d/ssl/consul.cert"
    tls_key_file = "/etc/consul.d/ssl/consul.key"   
}

terraform plan上的错误为:

* aws_instance.ec2-consul-server: missing dependency: template_file.tpl-vault-server-config

问题:

  • 我是不是走错了路
  • 我是不是错过了一些基本的东西
  • 如何将实例的属性获取到文件中

提前谢谢。

我意识到我正在当前资源中定义template_file资源,这是问题的一部分。当我解决了这个问题,事情就容易多了。

最新更新