はじめに
Terraformを触り始めたばかりの頃は、terraform apply を実行して結果を見るだけで精一杯になりがちです。この記事では、難しい関数や複雑な機能ではなく、最初の数週間で知っておくと素直に「知ってよかった」と思えるTipsを10個集めました。
Tips1 .gitignore に .terraform/ と *.tfstate* を入れる
terraform init を実行すると .terraform/ フォルダ(プロバイダの実行ファイルなど)が、terraform apply を実行すると terraform.tfstate(現在の管理状態)が生成されます。Google Cloudの場合、terraform.tfstate にはCloud SQLの初期パスワードやサービスアカウントキーの値がそのまま残ることがあるため、どちらも最初にGitへコミットしないよう設定しておきます。
# .gitignore
.terraform/
*.tfstate
*.tfstate.backup
後から気づいてGit履歴を消すのは手間がかかるので、リポジトリを作った直後にやっておくのがおすすめです。
Tips2 terraform.tfvars は書くだけで自動的に読み込まれる
変数の値を渡すとき、-var-file オプションを指定しなくても、ファイル名を terraform.tfvars にしておくだけで terraform plan / apply が自動的に読み込んでくれます。
project/
├── main.tf
├── variables.tf
└── terraform.tfvars # 自動で読み込まれる
# terraform.tfvars
project_id = "my-project-id"
region = "asia-northeast1"
毎回長いコマンドを打たなくて済みます。
Tips3 terraform fmt でインデントを自動整形する
スペースの数や揃え方を手で直す必要はありません。terraform fmt を実行すると、公式の標準スタイルに自動で整形してくれます。
$ terraform fmt
サブディレクトリに分けている場合は -recursive を付けると配下すべてがまとめて整形されます。
$ terraform fmt -recursive
Tips4 terraform validate でapply前に構文だけ素早く確認する
terraform plan はGoogle CloudのAPIに問い合わせるため、多少時間がかかります。単純な書き間違い(閉じ括弧の数が合わない、型が違うなど)を確認したいだけなら、terraform validate の方が速く終わります。
$ terraform validate
Success! The configuration is valid.
保存するたびに軽く実行しておくと、細かいミスにその場で気づけます。
Tips5 terraform plan の記号の意味を覚える
terraform plan の出力には、行の先頭に記号が付きます。この意味を知っておくだけで、差分の見方が一気に楽になります。
| 記号 | 意味 |
|---|---|
+ |
新規作成 |
- |
削除 |
~ |
そのままの場所で変更 |
-/+ |
削除してから作り直す(一度リソースが消える) |
特に -/+ は、意図せず一度リソースが消えてしまうことがあるため、apply の前に必ず注目します。Google Cloudでは、たとえば google_compute_instance の zone を書き換えると、この -/+ になります。ゾーンは作成後に変更できない属性のため、Terraformは一度インスタンスを削除してから新しいゾーンで作り直します。
Tips6 required_providers でバージョンを固定する
バージョンを指定しないままにしておくと、数ヶ月後に「昨日まで動いていたのに急に動かなくなった」ということが起こり得ます。使っているproviderのバージョンを最初から固定しておくと安心です。
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 6.0"
}
}
}
~> 6.0 は「6.x系の中で最新」を意味し、メジャーバージョンが変わる大きな変更だけを避けられます。
Tips7 variable に description を書いておく
変数に説明を書かなくてもTerraformは動きますが、description を書いておくと、他の人(あるいは数ヶ月後の自分)がコードを読んだときに、その変数が何のためのものかすぐ分かります。
variable "region" {
type = string
description = "リソースを作成するリージョン(例: asia-northeast1)"
}
terraform plan で変数の入力を求められたときにも、このdescriptionが表示されます。
Tips8 -var でファイルを編集せずに値を一時的に上書きする
いつもと違う値で1回だけ試したいとき、.tf ファイルや .tfvars を書き換える必要はありません。-var オプションでその場限りの値を渡せます。
$ terraform plan -var="region=asia-northeast2"
ファイルの値は変更されないため、試した後に戻し忘れる心配もありません。
Tips9 terraform console で式の結果を試しに確認する
複雑な文字列の組み立てや条件式を書く前に、実際にどんな値になるのか確認したい場合があります。terraform console を使うと、apply せずに対話的に式を試せます。
$ terraform console
> "${var.project_id}-bucket"
"my-project-id-bucket"
> upper("tokyo")
"TOKYO"
> exit
書いてから間違いに気づくより、先に手元で試した方が早いです。
Tips10 terraform show で今の管理状態を読みやすく確認する
terraform.tfstate ファイルを直接開いて読むのは大変です。terraform show を使うと、現在Terraformが管理しているリソースの内容を人間が読める形式で表示してくれます。
$ terraform show
「このリソース、今どんな設定値になっているんだっけ」を確認したいときに、ファイルを直接見るよりずっと読みやすいです。.tf に書いた覚えのない self_link や id のような、Google Cloud側で自動採番された値を確認したいときにも使えます。
まとめ
| Tips | 効果 |
|---|---|
.gitignore に .terraform/ *.tfstate* を追加 |
大きいファイル・機密情報の誤コミットを防ぐ |
terraform.tfvars |
変数ファイルを自動読み込み |
terraform fmt / -recursive
|
コードを自動整形 |
terraform validate |
applyより速く構文だけ確認 |
plan の記号(+ - ~ -/+) |
差分を素早く正しく読む |
required_providers |
バージョン固定で不意の破壊を防ぐ |
variable の description
|
変数の意図を残す |
-var |
ファイルを変えずに一時的に値を上書き |
terraform console |
applyせず式の結果を試す |
terraform show |
現在の状態を読みやすく確認 |
どれも構成を大きく変えずに、明日からそのまま使えるものばかりです。
参考ドキュメント


