0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:Terraform / CloudFormation の depends_on の使い方と注意点を整理してみた

Last updated at Posted at 2025-04-17

はじめに

インフラストラクチャーをコードで定義する際(IaC)、複数のリソース間に明確な依存関係がある場合があります。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

depends_on は、TerraformやCloudFormationといったIaCツールで、リソース間の作成順序を明示的に指定するために使用されます。


Terraformにおける depends_on

resource "aws_instance" "app" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  depends_on = [aws_security_group.app_sg]
}

解説:

Terraformは基本的にリソースの参照から依存関係を自動的に判断しますが、自動では検知されない関係を明示的に定義したいときに depends_on を使用します。この例では、EC2インスタンスはセキュリティグループが作成された後に作成されます。

参考文献


CloudFormationにおける DependsOn

Resources:
  MyBucket:
    Type: AWS::S3::Bucket

  MyBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref MyBucket
      PolicyDocument: ...
    DependsOn: MyBucket

解説:

CloudFormationも通常は !Ref!GetAtt で依存関係を推測できますが、こちらも手動で順番を指定したい場合に DependsOn を利用します。たとえば、ポリシーは対象のバケットが先に存在していなければなりません。

参考文献


よくある使いどころ

シチュエーション なぜ depends_on が必要か
IAM Role が必要な Lambda 関数 Roleが存在しないとLambda作成に失敗する
S3 バケットのあとに BucketPolicy を設定 バケットが存在していないとポリシーの適用に失敗する
VPC → Subnet → EC2 インスタンス サブネットやSGよりも先にインスタンスを作るとエラーになる可能性
Terraform の null_resource などで順序制御 明示的な順序が必要な場合に使用される

まとめ

ここまで読んでいただきありがとうございました。以下に簡単にまとめてみましたので、参考にしてみてください...!

  • depends_on の使用は最小限にとどめることが推奨されます。
  • 自動で推測される依存関係に任せ、どうしても必要な場合のみ明示する方が保守性の高いテンプレートになります。
ツール ディレクティブ名 用途
Terraform depends_on 作成順序の明示的な制御
CloudFormation DependsOn リソース間の明示的な依存関係
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?