Terraformでmodule利用時にデフォルト値と動的な値を設定する

概要

Terraformでmodule利用時にデフォルト値と動的な値を設定する。
例としてECSのタスク定義の環境変数を用いる。

バージョン

terraform -version
Terraform v0.14.3

コード

モジュール側

modules/hoge/variable.tf

variable "environments" {
  type        = list(object({ name = string, value = string }))
  default     = []
}

型変換は下記の通り
https://www.terraform.io/language/expressions/types#type-conversion

modules/hoge/main.tf

...
resource "aws_ecs_task_definition" "service" {
  ...
  container_definitions = jsonencode([
    {
      name      = "app"
      ...
      environments = concat([
       {
         name = "DEFAULT_ENV"
         value = "default_env"
       },
      ], var.environments) 
    },
  ])
  ...
}

リソース側

main.tf

module "fuga" {
  source = "./modules/hoge"
  environments = [
    {
      name = "ADDITIONAL_ENV"
      value = "additional_env"
    }
  ]
}

まとめ

https://www.terraform.io/language/functions/concat
を使うことでmodule利用時に動的に値を渡すことができる。