AWSのマネジメントコンソールでEC2を作って、セキュリティグループを設定して、ELBに紐付けて…。手動でやると15分。でも環境が3つ(dev/stg/prod)になったら45分。さらに東京とバージニアでやったら倍。もうやってられない。
Terraform(HashiCorp)は、HCLという宣言的言語でインフラを定義するツール。「このVPCがあって、このサブネットがあって、このEC2があって…」とコードに書く。`terraform apply`一発で全リソースが構築される。
Terraformの基本概念:
- Provider — AWS、GCP、Azure、Cloudflare…何でも対応。各クラウドのAPIを抽象化してくれる。
- Resource — 作るもの。`aws_instance`とか`aws_s3_bucket`とか。
- State(tfstate) — 今のインフラ状態を記録するファイル。これを元に差分(変更点)だけ適用する。S3で共有管理が鉄則。
- Plan — `terraform plan`で「これからこんな変更が入ります」を事前確認。意図しない削除がないかチェックできる。
僕のTerraform構成のベストプラクティス:
terraform/
environments/
dev/
main.tf # 環境ごとの設定
terraform.tfvars # 変数値(インスタンスサイズ等)
stg/
prod/
modules/
vpc/ # 再利用可能なモジュール
ecs/
rds/
注意点。tfstateは絶対にGitにコミットするな。機密情報が含まれるし、複数人で同時に編集するとコンフリクトする。S3バックエンド + DynamoDBで状態ロックがベスト。
Terraformを覚えると、インフラ構築が「コードレビューできるもの」に変わる。もう誰も手動でコンソールをポチポチしなくなる。これがInfrastructure as Codeの真価だ。