エンジニアの皆さん、こんにちは。
Terraformを触り始めたばかりの頃、`terraform plan -var-file=…` と打つたびに「これ、毎回間違えそうだな…」と不安になったことはありませんか? 実際、本番環境でタイポ一つでインフラが吹き飛ぶ……そんな悪夢のような事故の多くは、この「コマンド入力の属人化」から生まれます。
今日は、Terraformの実行フローを「Makefile」で完全にコード化し、誰が叩いても同じ結果が得られる、堅牢な開発体験(DX)を構築する方法を伝授します。これを導入すれば、作業効率が上がるだけでなく、チーム全体の「インフラ操作の作法」が統一されます。
—
1. なぜTerraformをMakefileでラップするのか?
結論から言えば、「人間はミスをする生き物だから」です。
- 冪等性の担保: 実行オプション(workspaceや変数ファイル)を強制的に固定することで、環境ごとの設定ミスを物理的に排除します。
- 認知負荷の低減: 長いコマンドを覚える必要はありません。`make plan-prod` と打つだけでいいのです。
- CI/CDとのブリッジ: ローカルで実行するコマンドと、GitHub Actions等のCI/CDで叩くコマンドを同一にすることで、「ローカルでは動くのにCIでは落ちる」という悲劇を撲滅できます。
—
2. 基礎セットアップ:最強の `Makefile` テンプレート
まずは、プロジェクトのルートディレクトリに `Makefile` を作成しましょう。これがあなたのインフラ操作の司令塔になります。
変数定義:プロジェクト固有の設定をここに集約
ENV ?= dev
TF_VAR_FILE := envs/$(ENV).tfvars
WORKSPACE := $(ENV)
.PHONY: init plan apply destroy
1. 初期化:設定を分離してクリーンに
init:
@terraform init -upgrade
2. ワークスペースの自動切り替え
select-workspace:
@terraform workspace select $(WORKSPACE) || terraform workspace new $(WORKSPACE)
3. プラン:エラーを防ぐために変数ファイルを強制
plan: init select-workspace
@terraform plan -var-file=$(TF_VAR_FILE)
4. 適用:プラン結果をしっかり確認させる運用を強制
apply: init select-workspace
@terraform apply -var-file=$(TF_VAR_FILE)
5. 削除:重要コマンドはあえて入力を求めさせる
destroy:
@echo “警告: $(ENV) 環境の破壊を実行します。”
@terraform destroy -var-file=$(TF_VAR_FILE)
この設計のポイント
- `@` 記号: コマンドの出力に不要なエコーを出しません。ログが非常に見やすくなります。
- 依存関係の明示: `plan` や `apply` の前に必ず `init` と `select-workspace` を実行するようにしています。これにより、「環境を切り替え忘れて開発環境を破壊した」という事故を未然に防ぎます。
—
3. HelloWorld:動作確認の儀式
さて、実際に動かしてみましょう。初めて使う際は、以下のステップを踏むのが最も確実です。
ステップ1:環境ファイルを用意
`envs/dev.tfvars` というファイルを作成し、テスト用の値を一つ入れてください。
ステップ2:プラン実行
ターミナルで以下を叩きます。
make plan ENV=dev
これだけで、Terraformは `dev` 環境用の設定を読み込み、安全に計画を生成してくれます。もしこれが成功したら、あなたのインフラ管理環境は「プロフェッショナルな基盤」の入り口に立っています。
—
4. 現場で震えるほど役立つ「極限の知見」
最後に、一つだけレベルの高い話をさせてください。
チーム開発において最も重要なのは、「Makefileをドキュメントとして扱うこと」です。チームメンバーが新しいインフラ担当者になった時、Terraformのコマンドをググらせる必要はありません。`make help` を叩けば、すべての作法が一覧できるようにすべきです。
Makefileの先頭に以下を追加してみてください。
help:
各コマンドの説明を表示
@grep -E ‘^[a-zA-Z_-]+:.?
.$$’ $(MAKEFILE_LIST) | awk ‘BEGIN {FS = “:.?## “}; {printf “3[36m%-20s3[0m %s\n”, $, $}’
各コマンドの行末に `
説明文` を添えるだけで、自動的にヘルプドキュメントが生成されます。
まとめ
- コマンドは隠蔽せよ: 直接 `terraform` コマンドを叩くのは今日で卒業です。
- 環境変数を強制せよ: `Makefile` に引数を持たせることで、ミスをシステム的に拒絶します。
- 標準化こそが自動化の第一歩: チーム全員が同じコマンドで操作することで、インフラ運用は「熟練の技」から「誰でも叩けるボタン」に進化します。
インフラエンジニアの仕事は、複雑なものをどれだけ「シンプルに、安全に」提供できるかです。この `Makefile` はその第一歩です。ぜひ、明日の現場から取り入れてみてください。世界が変わるはずですよ。
それでは、良いIaCライフを!