Terraformの「Plan」は神の眼ではない:破壊を未然に防ぐ、プロの読み解き術
こんにちは。インフラの世界へようこそ。
Terraformは、コードでインフラを定義する(IaC)ための魔法の杖ですが、初心者が最初に直面する最大の恐怖が「意図せぬリソースの破棄(Destroy)」です。
「`terraform plan` を打ったら、何百ものリソースが消されそうになった……」
そんな冷や汗ものの体験を回避し、安全にインフラを運用するための「心構え」と「技術」を伝授します。
—
1. なぜ「Plan」で見えていない破壊が起きるのか?
Terraformは、コードと実際のクラウドの状態を照らし合わせる「差分検知の天才」です。しかし、以下のケースではPlanの結果を読み解くのに高度な洞察力が必要です。
- 依存関係の連鎖: Aというリソースを変更するために、Bというリソースを一度Destroyして再作成しなければならない場合。
- APIの仕様変更: クラウドプロバイダー(AWS/GCP/Azure)側のAPI仕様が変わり、特定のプロパティ変更が「更新(Update)」ではなく「入れ替え(Replace)」として扱われる場合。
これらを見逃すと、本番環境で「うっかり全削除」という悲劇が待っています。
—
2. Terraformの「Hello World」:正しいセットアップと確認
まずは、Terraformが正しく動き、差分を認識できているか確認しましょう。
インストール(macOS例)
ツール管理ツール「tfenv」を使うのがプロの常識です
brew install tfenv
tfenv install latest
tfenv use latest
動作確認(main.tf)
最小構成で「リソースが正しく認識されるか」を試します。
AWSを例にします。Providerは必ずバージョン固定しましょう
terraform {
required_providers {
aws = {
source = “hashicorp/aws”
version = “~> 5.0”
}
}
}
provider “aws” {
region = “ap-northeast-1”
}
シンプルなS3バケットを作成
resource “aws_s3_bucket” “example” {
bucket = “my-unique-bucket-name-20231027”
}
儀式:`init` と `plan`
1. `terraform init`: プラグインをダウンロードします。
2. `terraform plan`: 「何が作られるか」を確認する、最も重要なコマンドです。
—
3. 「破壊」の予兆を察知するプロのテクニック
① `-refresh-only` で真実を知る
Planの結果が怪しい、あるいは手動でポチポチと設定を変えてしまったかも?という不安があるときは、これを使ってください。
terraform plan -refresh-only
これは「リソースを操作せず、Terraformの内部状態(State)だけを最新のクラウド環境と同期する」コマンドです。これでStateを最新に保つことで、誤ったPlanを防げます。
② 差分を読み解くポイント:「-/+」に注目する
`plan` の出力で最も恐ろしいのは `-/+` です。
- `+` : 新規作成
- `-` : 削除
- `-/+` : 「一度削除して、新しく作り直す(再作成)」
これが表示されたら、即座に停止してください。特にデータベースやロードバランサーでこれが出たら、データ消失のサインです。
—
4. 「破壊」を防御する最終防衛ライン:`lifecycle` ブロック
「間違えてもいい」という慢心は捨てましょう。コード側でガードレールを敷くのがプロの仕事です。
resource “aws_db_instance” “production_db” {
# …設定いろいろ…
# 究極の防御:このリソースをTerraformで削除しようとするとエラーを吐いて停止する
lifecycle {
prevent_destroy = true
}
}
さらに、設定変更による再作成を防ぎたい場合は、以下の記述を添えます。
lifecycle {
# 特定の引数が変わった時に無視する設定
ignore_changes = [
tags, # タグの変更で毎回再作成されるのを防ぐ
]
}
—
先輩からのアドバイス:怖がる必要はありません
Terraformにおける最も強力な武器は、「Planを信じきらないこと」です。
1. `plan` の出力を必ず全文読むこと。
2. `-/+` の記号を見逃さないこと。
3. 本番環境を触る前には、必ず `lifecycle` で守りを固めること。
この3つを守るだけで、あなたのインフラ運用は劇的に安定します。ツールを正しく恐れ、そして使いこなす。その先には、自動化された素晴らしい世界が待っていますよ。
さあ、恐れずに次の `plan` を実行してみましょう!何か詰まったら、いつでも聞いてくださいね。