我想方便地尝试使用Terraform的for_each功能

首先

使用 Terraform 的 for_each 功能真是方便呢。

如果需要创建多个不同的资源,这是必不可少的。对我来说,这非常体现了基础设施即代码的观念。

有时候,尽管与直觉相悖,我们还是需要采取一些不寻常的用法。
比如,在需要对map的列表进行for_each操作时。

在这种时候,我常常会想到这样的事情。

我想要在尝试各种方式时确认一下for_each的功能!

那么。 (Nà me.)

但是,由于for_each只能在资源内部使用,所以首先需要准备好资源才能进行尝试。

虽然这样说,但是特意使用AWS等资源有点麻烦。

因此,這次我們…

    for_eachの動きをちゃんとしたresourceを用意せずに確認する。

我在那个时候进行了一番调查,找出了应对方法,现在与你分享。

结论:让我们使用 Null Provider!

只有这个。

文件在这里:
https://registry.terraform.io/providers/hashicorp/null/latest/docs

如果对此了解的人们或许只需要这些就够了,
不过既然已经麻烦了,也可以使用null,通过实际测试来确认for_each的运行情况。

使用方法 (shǐ fǎ)

阅读上述文档时,… (When reading the aforementioned document…)

resource "null_resource" "cluster" {
  # Changes to any instance of the cluster requires re-provisioning
  triggers = {
    cluster_instance_ids = join(",", aws_instance.cluster.*.id)
  }

用null_resource资源,并将map放入触发器中,就可以实现类似这样的效果。

让我们立刻试一试。

轻轻地尝试一下

进行null安装和terraform init操作

terraform {
  required_version = ">= 0.12"
  required_providers {
    null = {
      source = "hashicorp/null"
      version = "3.1.0"
    }
  }
}
provider "null" {}

执行terraform init。

尝试对 map 列表进行 for_each。

locals {
  members   = [
      {"id" = 1, "name" = "Takashi"},
      {"id" = 2, "name" = "Satoshi"},
    ]
}

resource null_resource for_each {
    for_each = {for k in local.members : k.id => k}
    triggers = {
        "${each.value.id}" = each.value.name
    }
}

然后尝试进行terraform plan,

Terraform will perform the following actions:

  # null_resource.for_each["1"] will be created
  + resource "null_resource" "for_each" {
      + id       = (known after apply)
      + triggers = {
          + "1" = "Takashi"
        }
    }

  # null_resource.for_each["2"] will be created
  + resource "null_resource" "for_each" {
      + id       = (known after apply)
      + triggers = {
          + "2" = "Satoshi"
        }
    }

Plan: 2 to add, 0 to change, 0 to destroy.

好的!在triggers里面,map以很好的方式被输出出来了,感觉就是这样。

通过这样,我们能够方便地确认for_each的运作方式。非常感谢!

最后的话

我只使用AWS作为主要的供应商,但是一旦我知道还有其他提供者,我就立刻想要调查一下了。

如果有什么新的方便事物,我想试一试然后写成文章。

请提供相关信息。

hashicorp/null | Terraform注册表
类型和值-配置语言| HashiCorp的Terraform
类型约束-配置语言| HashiCorp的Terraform
对于表达式-配置语言| HashiCorp的Terraform
for_each元参数-配置语言| HashiCorp的Terraform

bannerAds