【世界一わかりやすい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 destroyapply で削除されそうになってもエラーでブロックされます。 本番環境の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では一緒に働く仲間を募集中です。

ご興味のある方は以下の採用情報をご確認ください。