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

Terraform 地形配置文件:在变量中使用变量,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我试图创建一个terraform配置文件来创建一个ec2实例。我正在使用variables.tf文件来放置所有变量。它适用于大多数情况,但有两种情况我无法实现。非常感谢任何指点 1.使用变量作为aws实例名称。使用var.service\u name或“${service\u name}”不起作用 resource "aws_instance" var.service_name { ami = "ami-010fae13a16763bb4"

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

1.使用变量作为aws实例名称。使用
var.service\u name
“${service\u 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\u instance”“main”


在需要声明其定义共享公共配置的多个实例的情况下,可以使用或从同一资源块生成多个实例。在这种情况下,资源地址包括一个附加的“索引”组件,如
aws\U实例。示例[“foo”]
aws\U实例。示例[0]
,其中索引可以是一个变量,用于动态选择单个资源块生成的一个实例。

这是否回答了您的问题?为了方便阅读,terraform资源不支持资源名称中的变量替换。变量中的变量如何?