Attribut DependsOn - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Attribut DependsOn

Avec l'attribut DependsOn, vous pouvez spécifier que la création d'une ressource spécifique dépend d'une autre. Lorsque vous ajoutez un attribut DependsOn à une ressource, cette dernière est créée uniquement après la création de la ressource spécifiée dans l'attribut DependsOn.

Important

Les piles dépendantes ont également des dépendances implicites sous la forme de propriétés cibles !Ref, !GetAtt et !Sub. Par exemple, si les propriétés de la ressource A utilisent une !Ref pour la ressource B, les règles suivantes s'appliquent :

  • La ressource B est créée avant la ressource A.

  • La ressource A est supprimée avant la ressource B.

  • La ressource B est mise à jour avant la ressource A.

L'attribut DependsOn est utilisable avec n'importe quelle ressource. Voici quelques utilisations typiques :

  • Déterminez si une condition d'attente entre en vigueur. Pour plus d’informations, consultez Création de conditions Wait dans un gabarit.

  • Déclarez des dépendances pour les ressources qui doivent être créées ou supprimées dans un ordre spécifique. Par exemple, vous devez déclarer explicitement les dépendances aux associations de passerelle pour certaines ressources d'un VPC. Pour plus d’informations, consultez Lorsqu'un attribut DependsOn est obligatoire.

  • Remplacez le parallélisme par défaut lors de la création, la mise à jour ou la suppression de ressources. AWS CloudFormation crée, met à jour et supprime les ressources en parallèle dans la mesure du possible. Il détermine automatiquement les ressources d'un modèle qui peuvent être traitées en parallèle et dont les dépendances nécessitent la fin d'autres opérations pour pouvoir être traitées. Vous pouvez l'utiliser DependsOn pour spécifier explicitement les dépendances, ce qui remplace le parallélisme par défaut et indique CloudFormation d'opérer sur ces ressources dans un ordre spécifié.

Note

Lors d'une mise à jour de la pile, les ressources qui dépendent des ressources mises à jour sont mises à jour automatiquement. CloudFormation n'apporte aucune modification aux ressources mises à jour automatiquement, mais si une politique de pile est associée à ces ressources, votre compte doit disposer des autorisations nécessaires pour les mettre à jour.

Syntaxe

L'attribut DependsOn accepte une chaîne unique ou une liste de chaînes.

"DependsOn" : [ String, ... ]

Exemple

Le modèle suivant contient une AWS::EC2::Instanceressource avec un DependsOn attribut qui spécifie MyDB, une AWS : :RDS : :DBInstance. Lors de la CloudFormation création de cette pile, elle crée d'abord MyDB, puis crée Ec2Instance.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-0ff8a91507f77f867" }, "us-west-1" : { "AMI" : "ami-0bdb828fd58c52235" }, "eu-west-1" : { "AMI" : "ami-047bb4163c506cd98" }, "ap-northeast-1" : { "AMI" : "ami-06cd52961ce9f0d85" }, "ap-southeast-1" : { "AMI" : "ami-08569b978cc4dfa10" } } }, "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.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : "MyName", "MasterUserPassword" : "MyPassword" } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Mappings: RegionMap: us-east-1: AMI: ami-0ff8a91507f77f867 us-west-1: AMI: ami-0bdb828fd58c52235 eu-west-1: AMI: ami-047bb4163c506cd98 ap-northeast-1: AMI: ami-06cd52961ce9f0d85 ap-southeast-1: AMI: ami-08569b978cc4dfa10 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.t2.small Engine: MySQL EngineVersion: '5.5' MasterUsername: MyName MasterUserPassword: MyPassword

Lorsqu'un attribut DependsOn est obligatoire

Association passerelle-VPC

Certaines ressources dans un VPC ont besoin d'une passerelle (VPN ou Internet). Si votre CloudFormation modèle définit un VPC, une passerelle et un attachement de passerelle, toutes les ressources nécessitant la passerelle dépendent de l'attachement de passerelle. Par exemple, une instance Amazon EC2 ayant une adresse IP publique est dépendante de l'association de la passerelle au VPC si les ressources VPC et InternetGateway sont également déclarées dans le même modèle.

Actuellement, les ressources suivantes dépendent de l'association d'une passerelle à un VPC lorsqu'elles disposent d'une adresse IP publique et se trouvent dans un VPC.

  • Groupes Auto Scaling

  • Instances Amazon EC2

  • Equilibreurs de charge Elastic Load Balancing

  • Adresses IP Elastic

  • Instances DB Amazon RDS

  • Routages Amazon VPC qui incluent la passerelle Internet

La propagation du routage d'une passerelle VPN dépend de l'association d'une passerelle VPC quand vous utilisez une passerelle VPN.

L'extrait suivant présente un exemple d'association de passerelle et une instance Amazon EC2 qui en dépend :

JSON

"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

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

Service Amazon ECS et groupe Auto Scaling

Lorsque vous utilisez Auto Scaling ou Amazon Elastic Compute Cloud (Amazon EC2) pour créer des instances de conteneur pour un cluster Amazon ECS, la ressource de service Amazon ECS doit avoir une dépendance au groupe Auto Scaling ou aux instances Amazon EC2, comme illustré dans l'extrait suivant. Ainsi, les instances de conteneur sont disponibles et associées au cluster Amazon ECS avant la CloudFormation création du service Amazon ECS.

JSON

"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

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

Politique de rôle IAM

Les ressources qui effectuent des appels supplémentaires AWS nécessitent un rôle de service, ce qui permet à un service de passer des appels AWS en votre nom. Par exemple, la AWS::CodeDeploy::DeploymentGroup ressource nécessite un rôle de service CodeDeploy doté des autorisations nécessaires pour déployer des applications sur vos instances. Si vous disposez d'un modèle unique qui définit un rôle de service, la politique de rôle (en utilisant la ressource AWS::IAM::Policy ou AWS::IAM::ManagedPolicy) et une ressource qui utilise ce rôle, ajoutez une dépendance de telle sorte que la ressource dépende de la politique de rôle. Cette dépendance assure que la politique est disponible dans l'ensemble du cycle de vie de la ressource.

Par exemple, imaginons que vous ayez un modèle avec une ressource de groupe de déploiement, un rôle de service et la politique de rôle. Lorsque vous créez une pile, le groupe de déploiement CloudFormation ne sera pas créé tant qu'il n'aura pas créé la politique du rôle. Sans cette dépendance, CloudFormation vous pouvez créer la ressource du groupe de déploiement avant de créer la politique du rôle. Si cela se produit, la création du groupe de déploiement échouera en raison d'autorisations insuffisantes.

Si le rôle possède une politique intégrée, ne spécifiez pas de dépendance. CloudFormation crée le rôle et sa politique en même temps.