やあ。インフラの深淵を覗く同志諸君。
Terraformのコードを書いていて、こんな経験はないだろうか?
「よし、複雑な`for`式と`lookup`関数を組み合わせてリソース名を作ったぞ!」
→ `terraform plan`を実行。
→ 「あれ、思った通りの値にならない……修正して再度`plan`……」
→ これを5回繰り返し、コーヒーを飲み干して溜息をつく。
もし君がまだ「トライ&エラーのために`plan`を連打している」のなら、今日でその非効率な習慣とは決別しよう。今日は、Terraformに標準搭載されているにもかかわらず、多くのエンジニアが見過ごしている「隠れた神機能」、`terraform console`について語る。
これを使いこなせれば、デバッグ効率は劇的に跳ね上がる。まるでインフラの心臓部を直接覗き込むような、至高の体験を約束しよう。
—
1. `terraform console` とは何か?:インフラの「即興実験室」
`terraform console`は、Terraformのインタラクティブな評価用シェルだ。
簡単に言えば、「今あるTerraformの知識(変数、関数、リソースの状態)を、その場で対話的に実行・確認できる検証環境」である。
基本の起動方法
まずはターミナルを開き、Terraformのコードが存在するディレクトリでこう打ってみてほしい。
terraform console
起動すると `> ` というプロンプトが現れる。ここであなたはTerraformの式を書くことができる。例えば:
> 1 + 1
2
> upper(“hello terraform”)
“HELLO TERRAFORM”
これだけじゃない。現在のプロジェクトで定義されている変数や、すでに作成済みのリソースの属性値を、本物のステートデータをもとにクエリできるのだ。
—
2. 複雑なロジックを「その場で」撃ち落とす
TerraformのHCL(HashiCorp Configuration Language)は強力だが、複雑な `for` 式やネストした `lookup` は、いきなりコードに書くとバグの温床になる。
例えば、複雑なマップ変数から特定の条件で値を抽出する処理を試してみよう。
コンソール上で試す:条件付き抽出
> [for key, val in var.my_map : upper(key) if val.enabled]
[“WEB-SERVER”, “DB-SERVER”]
`plan`を走らせて「値が空になった…なぜだ?」と悩む時間はもう終わりだ。コンソール上で、動的に評価結果を確認しながらコードを組み立てれば、ミスはゼロに収束する。
—
3. リモートステートを「安全に」覗き見る
実務で最も強力なのは、「現在のインフラがどうなっているか」を確認するクエリだ。
例えば、すでに構築済みのVPC IDやサブネットのリストを、動的に参照したいときがあるよね。そんなときはこうする。
現在のステートにあるリソースの属性を直接参照
> aws_vpc.main.id
“vpc-0a1b2c3d4e5f6g7h8”
リスト形式のリソースから特定の属性を抽出
> [for subnet in aws_subnet.public : subnet.arn]
[
“arn:aws:ec2:ap-northeast-1:123456789012:subnet/subnet-1”,
“arn:aws:ec2:ap-northeast-1:123456789012:subnet/subnet-2”,
]
ここが最大のポイントだ: `terraform console` は、現在の `terraform.tfstate` (あるいはリモートステート)を読み込んで立ち上がる。つまり、「今動いている本番環境の構成情報を、安全な読み取り専用環境としてテストできる」ということだ。
—
4. デバッグ時間を10倍短縮する:現場の鉄則
このツールを使いこなすための、僕なりの「開発フロー」を伝授しよう。
1. 「書く前」にコンソールで試す: 複雑なロジックはまずコンソールで書き、意図した結果が出ることを確認する。
2. 型を確認する: `type()` 関数などは存在しないが、`jsonencode()` を使って構造を確認するテクニックがある。
> jsonencode(local.my_complex_object)
これで見えにくかったマップやリストの構造が可視化される。
3. モジュール開発の相棒にする: モジュールの入力を調整する際、`plan`を繰り返すと時間がかかる。コンソールで入力値の評価を行い、正解を確認してからコードに落とし込む。
—
最後に:エンジニアとしての「直感」を信じろ
多くの初心者は、Terraformを「設定ファイルを書くツール」としか見ていない。だが、真のSREはTerraformを「クラウドの状態を操作するプログラム」として扱っている。
`terraform console` は、そのプログラムのデバッガだ。
今日から、`terraform plan` を押す前に、一度コンソールを開く癖をつけてみてほしい。あなたのインフラ構築作業は、手探りの迷路から、論理的なパズルの組み立てへと変わるはずだ。
困ったときは、いつでもコンソールに問いかければいい。ツールはいつだって、僕たちに語りかけてくれる準備ができているのだから。
健闘を祈る。また次の現場で会おう。