![](/img/trans.png)
[英]Best way to convert cloudformation serverless template into Terraform
[英]Best way to get an interpolated value into a Terraform lookup
我正在嘗試將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支持此功能。 其他人以某種方式成功嘗試了此操作,還是知道使用命令行變量從映射中提取值的更好方法?
編輯:部分問題被隱藏了,因為我正在使用Bash腳本來運行Terraform模塊。 這是在運行破壞力,然后應用。 因為我正在考慮將命令行變量作為構建的一部分,所以沒有將其添加到destroy命令中,而在destroy命令中要求它們,並提示我輸入它們。 一旦我將-var命令添加到destroy命令中,並應用了所有這些方法。
ami = "${lookup(var.amis, $${var.region})}"
這是錯誤的,因為$$
只對內聯模板中的插值變量有效。
variables "map_region" {
default = "${var.region}"
}
ami = "${lookup(var.amis, var.map_region)}"
無法使用,因為您將地圖作為lookup
的關鍵。
Terraform 控制台是試用插值表達式的有用工具。 假設變量定義如下:
$ cat vars.tf
variable "amis" {
type = "map"
default {
"us-east-2" = "ami-58f5db3d"
"us-east-1" = "ami-fad25980"
}
}
variable "region" {}
啟動控制台,將值傳遞給region
以模擬您將對plan
, apply
等執行的操作:
$ terraform console -var "region=us-east-1"
> var.region
us-east-1
> lookup(var.amis, var.region)
ami-fad25980
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.