【发布时间】:2018-05-23 19:33:49
【问题描述】:
我正在尝试设置 Terraform 以部署到各个 AWS 区域,我在命令行上发送区域,因为它是脚本中为数不多的更改值之一。我正在使用 -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 在哪里支持这一点。其他人以某种方式成功地尝试过,或者知道使用命令行变量从地图中提取值的更好方法?
编辑: 部分问题被隐藏了,因为我使用 Bash 脚本运行 Terraform 模块。这是运行破坏力,然后应用。因为我正在考虑将命令行变量作为构建的一部分,所以我没有将它们添加到 destroy 命令中,这是请求它们并提示我输入它们的地方。一旦我将 -var 命令添加到destroy 命令并应用这一切就可以了。
【问题讨论】:
-
在使用插值时,您只需要一组
${}- 其中的任何内容都会被渲染。我不相信您可以在变量中进行插值。${lookup(var.amis, 'us-east-1')}会返回你想要的吗? -
是的,它返回我想要的,但我需要以某种方式使用插值,以便我可以重用脚本以在不同区域部署。
标签: amazon-web-services terraform