メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

DependsOn 属性

DependsOn 属性を使用すると、特定のリソースが他のリソースに続けて作成されるように指定できます。DependsOn 属性をリソースに追加した場合、そのリソースの作成は必ず、DependsOn 属性で指定したリソースの作成後に行われます。

重要

依存スタックには暗黙的な依存関係もあります。たとえば、リソース A のプロパティでリソース B への !Ref を使用する場合、次のルールが適用されます。

  • リソース A はリソース B の前に作成されます。

  • リソース B はリソース A の前に削除されます。

DependsOn 属性は任意のリソースで使用できます。以下に、代表的な用途をいくつか示します。

  • 待機条件が有効になるタイミングを指定する。詳細については、「テンプレートでの待機条件の作成」を参照してください。

  • 特定の順序で作成または削除する必要のあるリソースの依存関係を宣言する。たとえば、VPC のあるリソースに対するゲートウェイアタッチメントの依存関係を明示的に宣言する必要があります。詳細については、「DependsOn 属性が必要なとき」を参照してください。

  • リソースを作成、更新、削除する際のデフォルトの並列処理をオーバーライドする。AWS CloudFormation は、可能な限り並行してリソースを作成、更新、削除します。その際、並行して処理できるテンプレート内のリソースとオペレーションの実行順序を左右する依存関係とが自動的に判断されます。DependsOn を使用して依存関係を明示的に指定することで、デフォルトの並列処理をオーバーライドし、それらのリソースを決まった順序で処理するように CloudFormation に命令することができます。

注記

スタックの更新時に、更新されたリソースに依存するリソースは自動的に更新されます。AWS CloudFormation では、自動的に更新されるリソースは変更されませんが、スタックポリシーがこれらのリソースに関連付けられている場合、アカウントにはそのポリシーを更新する権限が必要です。

構文

DependsOn 属性には、単一の文字列または一連の文字列を指定できます。

Copy
"DependsOn" : [ String, ... ]

以下のテンプレートに記述されている AWS::EC2::Instance リソースの DependsOn 属性には、myDB (AWS::RDS::DBInstance) が指定されています。AWS CloudFormation は、このスタックを作成する際にまず myDB を作成し、その後、Ec2Instance を作成します。

JSON

Copy
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-76f0061f" }, "us-west-1" : { "AMI" : "ami-655a0a20" }, "eu-west-1" : { "AMI" : "ami-7fd4e10b" }, "ap-northeast-1" : { "AMI" : "ami-8e08a38f" }, "ap-southeast-1" : { "AMI" : "ami-72621c20" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ] } }, "DependsOn" : "myDB" }, "myDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.m1.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : "MyName", "MasterUserPassword" : "MyPassword" } } } }

YAML

Copy
AWSTemplateFormatVersion: '2010-09-09' Mappings: RegionMap: us-east-1: AMI: ami-76f0061f us-west-1: AMI: ami-655a0a20 eu-west-1: AMI: ami-7fd4e10b ap-northeast-1: AMI: ami-8e08a38f ap-southeast-1: AMI: ami-72621c20 Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: Fn::FindInMap: - RegionMap - Ref: AWS::Region - AMI DependsOn: myDB myDB: Type: AWS::RDS::DBInstance Properties: AllocatedStorage: '5' DBInstanceClass: db.m1.small Engine: MySQL EngineVersion: '5.5' MasterUsername: MyName MasterUserPassword: MyPassword

DependsOn 属性が必要なとき

VPC ゲートウェイのアタッチメント

VPC 内の一部のリソースはゲートウェイ (インターネットゲートウェイまたは VPN ゲートウェイのいずれか) を必要とします。VPC、ゲートウェイ、ゲートウェイアタッチメントを AWS CloudFormation テンプレートで定義する場合、ゲートウェイを必要とするリソースはすべて、そのゲートウェイアタッチメントに依存することになります。たとえば、パブリック IP アドレスが割り当てられている Amazon EC2 インスタンスは、同じテンプレートで VPC リソースと InternetGateway リソースも宣言されている場合、VPC ゲートウェイのアタッチメントに依存します。

現在、次のリソースは、関連付けられたパブリック IP アドレスを持ち、VPC 内にある場合、VPC ゲートウェイのアタッチメントに依存します。

  • Auto Scaling グループ

  • Amazon EC2 インスタンス

  • Elastic Load Balancing ロードバランサー

  • Elastic IP アドレス

  • Amazon RDS データベースインスタンス

  • インターネットゲートウェイを含む Amazon VPC のルート

VPN ゲートウェイがある場合、VPN ゲートウェイのルート伝達は、VPC ゲートウェイアタッチメントによって異なります。

以下のスニペットは、ゲートウェイのアタッチメントと、ゲートウェイアタッチメントに依存する Amazon EC2 インスタンスの例です。

JSON

Copy
"GatewayToInternet" : { "Type" : "AWS::EC2::VPCGatewayAttachment", "Properties" : { "VpcId" : { "Ref" : "VPC" }, "InternetGatewayId" : { "Ref" : "InternetGateway" } } }, "EC2Host" : { "Type" : "AWS::EC2::Instance", "DependsOn" : "GatewayToInternet", "Properties" : { "InstanceType" : { "Ref" : "EC2InstanceType" }, "KeyName" : { "Ref" : "KeyName" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "EC2InstanceType" }, "Arch" ] } ] }, "NetworkInterfaces" : [{ "GroupSet" : [{ "Ref" : "EC2SecurityGroup" }], "AssociatePublicIpAddress" : "true", "DeviceIndex" : "0", "DeleteOnTermination" : "true", "SubnetId" : { "Ref" : "PublicSubnet" } }] } }

YAML

Copy
GatewayToInternet: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: Ref: VPC InternetGatewayId: Ref: InternetGateway EC2Host: Type: AWS::EC2::Instance DependsOn: GatewayToInternet Properties: InstanceType: Ref: EC2InstanceType KeyName: Ref: KeyName ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - Fn::FindInMap: - AWSInstanceType2Arch - Ref: EC2InstanceType - Arch NetworkInterfaces: - GroupSet: - Ref: EC2SecurityGroup AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: Ref: PublicSubnet

Amazon ECS サービスと Auto Scaling グループ

Amazon ECS クラスター向けのコンテナインスタンスを作成する際 Auto Scaling あるいは Amazon Elastic Compute Cloud (Amazon EC2) を使用する場合、次のスニペットに示すように、Amazon ECS サービスリソースに Auto Scaling グループまたは Amazon EC2 インスタンスに対する依存性があることが必要です。 これにより、コンテナインスタンスが有効になり、AWS CloudFormation が Amazon ECS サービスを作成する前に、Amazon ECS クラスターに関連付けられます。

JSON

Copy
"service": { "Type": "AWS::ECS::Service", "DependsOn": ["ECSAutoScalingGroup"], "Properties" : { "Cluster": {"Ref": "ECSCluster"}, "DesiredCount": "1", "LoadBalancers": [ { "ContainerName": "simple-app", "ContainerPort": "80", "LoadBalancerName" : { "Ref" : "EcsElasticLoadBalancer" } } ], "Role" : {"Ref":"ECSServiceRole"}, "TaskDefinition" : {"Ref":"taskdefinition"} } }

YAML

Copy
service: Type: AWS::ECS::Service DependsOn: - ECSAutoScalingGroup Properties: Cluster: Ref: ECSCluster DesiredCount: 1 LoadBalancers: - ContainerName: simple-app ContainerPort: 80 LoadBalancerName: Ref: EcsElasticLoadBalancer Role: Ref: ECSServiceRole TaskDefinition: Ref: taskdefinition

IAM ロールポリシー

AWS の追加呼び出しを行うリソースには、ユーザーに代わってサービスに AWS の呼び出しを許可するサービスロールが必要となります。たとえば、AWS::CodeDeploy::DeploymentGroup リソースには、インスタンスにアプリケーションをデプロイする権限を AWS CodeDeploy に持たせるサービスロールが必要です。サービスロール、ロールのポリシー (AWS::IAM::Policy リソースまたは AWS::IAM::ManagedPolicy リソースを使用して)、およびそのロールを使用するリソースを定義する単一のテンプレートがある場合は、リソースがそのロールのポリシーに依存するように、依存性を追加します。この依存性により、ポリシーがリソースのライフサイクルを通じて利用できるようになります。

たとえば、デプロイグループリソース、サービスロール、およびロールのポリシーを持つテンプレートがあるとしましょう。スタックの作成時に、AWS CloudFormation はロールのポリシーを作成するまでデプロイグループを作成しません。依存性がない場合、AWS CloudFormation はロールのポリシーを作成する前にデプロイグループリソースを作成できます。そうすると、デプロイグループは権限が不順分なため作成に失敗します。

ロールにポリシーが組み込まれている場合は、依存性を指定しないでください。AWS CloudFormation は、ロールとポリシーを同時に作成します。

このページの内容: