🐕

Terraformのimport blockでcount相当を実現する

2024/04/11に公開

Terraform のimport blockでcountを利用し、特定条件でのみimport blockを有効にしたい。
初めてimport blockが実装されたTerraform 1.5ではterraform blockではidは固定の文字列である必要があった。
Terraform 1.6からはidに変数が利用できるようになり、Terraform 1.7からはfor_eachが利用できるようになった。

https://zenn.dev/kou_pg_0131/articles/tf-import-block

https://www.hashicorp.com/blog/terraform-1-6-adds-a-test-framework-for-enhanced-code-validation

https://zenn.dev/kou_pg_0131/articles/tf-import-block-for-each

しかしimport blockにおけるcount文はサポートされず、for_eachで十分と判断された。
以下のようなimport blockを使いたかったが対応されていない。

import {
  count = var.environment == "prod" ? 1 : 0
  to    = aws_cloudwatch_metric_alarm.alarm[0]
  id    = "xxx"
}

https://github.com/hashicorp/terraform/issues/34227

count文が使えないのはちょっと面倒だがfor_eachでも十分代替できる。
具体的には次のように記述できる。

import {
  for_each = var.environment == "prod" ? ["this"] : []
  to       = aws_cloudwatch_metric_alarm.alarm[0]
  id       = "xxx"
}

Discussion