AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Terraform を書く時に気をつけること

忘れがちなので、気付いたタイミングで書いておく。

backend に変数 (Variables) は利用できない

こんな感じで怒られる。 起動時に引数に渡すか、backend 用に別ファイルを作れとのこと。

│ Error: Variables not allowed
│
│   on main.tf line 11, in terraform:
│   11:     profile = var.profile
│
│ Variables may not be used here.

qiita.com

github.com

上記記事でも言及されているけど、(インフラ構成するコードベースに対して) ハードコーディング強制するのはおまえ、という感じある。

変数を展開する際の ${} 有無について

ja.stackoverflow.com

上記記事で言及されているのがすべてなんだけど、 Terraform v0.11 までは律儀に書かないとダメだったけど、それ以降は書かなくても大丈夫になったらしい。

とはいえ、文字列内に含めたい場合は必要なはずなので、以下の理解でやっている。

variable "vpc_cidr" {}
variable "prefix" {}

vpc_cidr = "10.0.0.0/16"
prefix = "prod-example"

resource "aws_vpc" "vpc" {
  cidr_block = var.vpc_cidr
  instance_tenancy = "default"

  tags = {
    Name = "${var.prefix}-vpc"
  }
}
文字列に含めないで (単独で) 使う 文字列に含めて使う
var.vpc_cidr "${var.prefix}-vpc"

(LL 含む) 言語記述時はなるべく省略すべき、となるんだろうけど、 Terraform くらいなら全部 ${} で統一してしまっていいかもしれない。