首页 文章

将插值赋入Terraform查找的最佳方法

提问于
浏览
0

我正在尝试将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 回答

  • 1
    ami = "${lookup(var.amis, $${var.region})}"
    

    是错误的,因为 $$ 仅对inline templates内的插值变量有效 .

    variables "map_region" {
      default = "${var.region}"
    }
    ami = "${lookup(var.amis, var.map_region)}"
    

    因为您将 Map 作为关键字传递给 lookup ,所以不起作用 .

    Terraform console是一个用于尝试插值表达式的有用工具 . 假设变量定义如下:

    $ 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
    

    希望这可以帮助 .

相关问题