Terraform配置文件:在变量中使用变量



我正在字符串中创建一个terraform配置文件来创建一个ec2实例。我正在使用variables.tf文件来放置我的所有变量。它适用于大多数情况,但有两种情况我无法实现。我们非常感谢任何指点。

1.使用变量作为aws实例名称。使用var.service_name"${service_name}"不起作用。

resource "aws_instance" var.service_name {
ami           = "ami-010fae13a16763bb4"
instance_type = "t2.micro"
.....
}

这篇文章解释了资源名称不能是变量。但这是相当古老的。不确定情况是否仍然如此。

2.在另一个变量中使用变量。例如,我有这样定义的连接参数

connection {
host = "${aws_instance.terraformtest.public_ip}"
type     = "ssh"
user     = "ec2-user"
private_key = "${file("C:/Users/phani/Downloads/microservices.pem")}"
}

这是有效的。我使用的是从aws实例资源生成的ip。但是如果我这样用的话。不起作用

host = "${aws_instance.${service_name}.public_ip}" 

我是遗漏了什么,还是有变通办法

Terraform中的资源名称必须是常量。在实践中,这通常不是问题,因为资源名称只需要在给定的模块中是唯一的,因此调用方不需要自定义子模块中资源的名称。在特定资源是模块声明的主要对象的情况下,常见的习惯用法是将资源命名为"main",如resource "aws_instance" "main"

在需要声明定义共享公共配置的多个实例的情况下,可以使用for_eachcount从同一资源块生成多个实例。在这种情况下,资源地址包括一个额外的"索引"组件,如aws_instance.example["foo"]aws_instance.example[0],其中索引可以是一个变量,用于动态选择单个资源块生成的实例之一。

最新更新