我正试图创建一个Terraform配置文件来创建一个ec2实例。我正在使用-J destination
文件放置所有变量。它适用于大多数情况,但有两种情况我无法实现。非常感谢任何指针。
1.using变量用于aws实例名称。使用ssh -T user@server.example.com <<< "exit 42"
echo $? # output: 42
或ssh -T -J user@proxy.example.com user@server.example.com <<< "exit 42"
echo $? # output: 0
不起作用。
variables.tf
此post说明资源名称不能为变量。但是,这已经很老了。不知道是否仍然如此。
2。在另一个变量中使用变量。例如,我有这样定义的连接参数
var.service_name
这有效。我正在使用从AWS实例资源生成的IP。但是,如果我这样使用它。
"${service_name}"
我丢失了什么东西吗?
答案 0 :(得分:0)
Terraform中的资源名称必须为常量。实际上,这通常不是问题,因为资源名称仅在给定模块内唯一,因此调用者不必自定义子模块中资源的名称。在特定资源是模块声明的主要对象的情况下,常见的习惯用法是将资源命名为“ main”,例如resource "aws_instance" "main"
。
在需要声明多个定义共享同一配置的实例的情况下,可以使用for_each
或count
从同一资源块中产生多个实例。在这种情况下,资源地址包括一个附加的“索引”组件,例如aws_instance.example["foo"]
或aws_instance.example[0]
,其中 index 可以是变量,以动态选择生成的实例之一单个资源块。