🪐

TerraformCloudの変数でHCLを利用する

2023/12/29に公開

はじめに

TerraformCloudではterraform variablesを定義することで
terraformが使用する変数を設定することが可能です。
またその設定にはHCLを利用することが可能です。
今回はHCLを利用してterraform variablesの設定を試してみました。

https://developer.hashicorp.com/terraform/cloud-docs/workspaces/variables/managing-variables

前提

  • terraform login済みであること

流れ

①コードを用意する

手持ちがない場合はtfファイルを用意します。

②terraform cloud上で変数の設定をする

こんな感じです

  • HCLにチェックを入れる
  • keyに変数名を入れる
  • valueをHCL形式で入力する

ということに気をつければOKです。
1行にHCLを修正する必要もないので、tfvarsで管理している場合はvalueへコピペで大丈夫だと思います。

以降はいくつかのパターンのコードを書いていきます。

Listを試す

sqs.tf
resource "aws_sqs_queue" "main" {
  for_each      = toset(var.sqs_settings)
  name          = each.value
}
variables.tf
variable "sqs_settings" {
  type = list(string)
}
TerraformVariables
["queue1", "queue2", "queue3"]

Mapを試す

sqs.tf
resource "aws_sqs_queue" "main" {
  for_each      = var.sqs_settings
  name          = each.key
  delay_seconds = each.value
}
variables.tf
variable "sqs_settings" {
  type = map(any)
}
TerraformVariables
{
    "queue1" = 10
    "queue2" = 20
    "queue3" = 30
}

Objectを試す

sqs.tf
resource "aws_sqs_queue" "main" {
  name          = var.sqs_settings.name
  delay_seconds = var.sqs_settings.delay_seconds
  tags          = var.sqs_settings.tags
}
variables.tf
variable "sqs_settings" {
  type = object({
    name           = string
    tags           = map(string)
    delay_seconds  = number
  })
}
TerraformVariables
{
  name = "test-sqs-queue"
  tags = {
    Environment = "Test"
    Project = "Terraform Practice"
  }
  delay_seconds = 10
}

おわりに

HCLが使えるのはだいぶ助かりますね、設定も簡単。
こいつらもterraformで管理できる?っぽいので試してみたいです。
https://registry.terraform.io/providers/hashicorp/tfe/latest/docs/resources/variable

参考

https://developer.hashicorp.com/terraform/cloud-docs/workspaces/variables#terraform-variables
https://developer.hashicorp.com/terraform/cloud-docs/workspaces/variables/managing-variables
https://dev.classmethod.jp/articles/terraform-cloud-workspace-variable/

Discussion