簡體   English   中英

將內插值輸入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以模擬您將對planapply等執行的操作:

$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM