【世界一わかりやすいTerraform入門⑦】依存関係・削除防止・既存リソース参照まで完全理解!
投稿更新日: 2025/8/3

こんにちは!Terraform入門シリーズ、第7回です。 今回はTerraformをより安全かつ柔軟に制御するためのテクニックを紹介します。 「リソースの作成順がうまくいかない」 「大事なS3バケットを消してしまった…」 「すでにあるVPCを使いたい」
そんなときに使えるのがこちらの3機能:
depends_on:リソースの依存関係を明示lifecycle:削除防止や作成順制御の安全装置data リソース:既存のAWSリソースを参照
1. depends_on: 順番通りに作りたい!
Terraformは基本的に依存関係を自動判定しますが、**「明示的に順番を指定したい!」**という場面では depends_on を使いましょう。
✅ 例:S3バケット → バケットポリシー
# hcl resource "aws_s3_bucket" "example" { bucket = "my-depends-on-bucket" } resource "aws_s3_bucket_policy" "example" { bucket = aws_s3_bucket.example.id policy = jsonencode({...}) depends_on = [aws_s3_bucket.example] }
これで、「バケットが先・ポリシーが後」を明確に指示できます!
2. lifecycle: 削除防止&安全な作成順のコントロール
Terraformのlifecycleブロックは、リソースの扱いを細かく制御できる便利機能です。
✅ prevent_destroy:うっかり削除を防ぐ!
# hcl resource "aws_s3_bucket" "important" { bucket = "do-not-delete-this" lifecycle { prevent_destroy = true } }
この設定があると、誤って terraform destroy や apply で削除されそうになってもエラーでブロックされます。
本番環境のS3バケットなどに必須!
✅ create_before_destroy: ゼロダウンタイムの再作成
# hcl resource "aws_iam_role" "example" { name = "switch-role" lifecycle { create_before_destroy = true } }
古いリソースを削除する前に新しいリソースを作るため、ダウンタイムなしの置き換えが可能になります! 本番環境のS3バケットなどに必須!
3. dataリソース: 既存のAWSリソースを参照しよう!
Terraformで「作らないけど使いたい」リソースがあるとき、読み取り専用の data リソースが役立ちます。
✅ 例:既存のVPCを参照
# hcl data "aws_vpc" "default" { default = true }
このように data を使えば、VPCを再作成せずに参照だけできます。
✅ 例:最新のUbuntu AMI IDを取得
# hcl data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"] } owners = ["099720109477"] }
AMI IDの手動更新から解放される便利な例です!
まとめ:Terraformを安心して使う3つの方法
Terraformを実務で安全に使うには、以下の3つがとても大切です:
depends_on:リソースの正しい順番を保証lifecycle:削除ミスや再作成の事故を防止data:既存リソースを安全に再利用
Terraformは強力ですが、ちょっとした設計ミスが大事故につながることも…。 今回紹介したテクニックで、安心・安全なTerraformライフを送りましょう!
この記事をシェアする
合同会社raisexでは一緒に働く仲間を募集中です。
ご興味のある方は以下の採用情報をご確認ください。
