我正在尝试将Terraform设置为部署到各个AWS区域,我在命令行上发送Region,因为它是脚本中为数不多的更改值之一 . 我正在使用-var“region = east” - 例如,它通过正确分配区域在其他模块中工作,我正在使用此值的main.tf设置正确 .
在创建资源时,有一个查找使用区域作为映射值,amis是区域的映射和不同的ami值我只想要匹配此资源的ami . 我尝试了两种方法,使用命令行插值:
ami = "${lookup(var.amis, $${var.region})}"
或作为中间值
variables "map_region" {
default = "${var.region}"
}
ami = "${lookup(var.amis, var.map_region)}"
两者都给我语法错误,虽然通过查找查看一些文档,我没有看到terraform支持这个 . 其他人以某种方式成功地尝试了这个,或者知道使用命令行变量从 Map 中提取值的更好方法吗?
编辑:部分问题是隐藏的,因为我使用Bash脚本来运行Terraform模块 . 这是运行destroy -force,然后申请 . 因为我正在考虑将命令行变量作为构建的一部分,所以我没有将它们添加到destroy命令中,这是他们被请求的地方,并提示我输入它们 . 一旦我在-var命令中添加了destroy命令并将其应用于所有工作 .
1 回答
是错误的,因为
$$
仅对inline templates内的插值变量有效 .因为您将 Map 作为关键字传递给
lookup
,所以不起作用 .Terraform console是一个用于尝试插值表达式的有用工具 . 假设变量定义如下:
启动控制台,将值传递给
region
以模拟您将使用plan
,apply
等进行的操作:希望这可以帮助 .