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 de plus amples informations, veuillez consulter Création de conditions d'attente dans un CloudFormation modèle.
-
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 relatives aux pièces jointes de passerelle pour certaines ressources d'unVPC. Pour de plus amples informations, veuillez consulter 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 ressource AWS: : EC2 : :Instance avec un DependsOn
attribut qui spécifie MyDB, AWSun : : : 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
VPC-attachement à une passerelle
Certaines ressources d'un VPC ont besoin d'une passerelle (Internet ou VPN passerelle). Si votre CloudFormation modèle définit uneVPC, une passerelle et une pièce jointe de passerelle, toutes les ressources nécessitant la passerelle dépendent de la pièce jointe de passerelle. Par exemple, une EC2 instance Amazon avec une adresse IP publique dépend de la pièce jointe VPC -gateway si les InternetGateway
ressources VPC
and sont également déclarées dans le même modèle.
Actuellement, les ressources suivantes dépendent d'une pièce jointe VPC -gateway lorsqu'elles ont une adresse IP publique associée et qu'elles se trouvent dans unVPC.
-
Groupes Auto Scaling
-
EC2Instances Amazon
-
Equilibreurs de charge Elastic Load Balancing
-
Adresses IP Elastic
-
Instances RDS de base de données Amazon
-
VPCItinéraires Amazon qui incluent la passerelle Internet
La propagation d'une route de VPN passerelle dépend d'une pièce jointe VPC -gateway lorsque vous avez une VPN passerelle.
L'extrait suivant montre un exemple de pièce jointe de passerelle et une EC2 instance Amazon qui dépend d'une pièce jointe de passerelle :
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
ECSService Amazon et groupe Auto Scaling
Lorsque vous utilisez Auto Scaling ou Amazon Elastic Compute Cloud (AmazonEC2) pour créer des instances de conteneur pour un ECS cluster Amazon, la ressource de ECS service Amazon doit dépendre du groupe Auto Scaling ou des EC2 instances Amazon, comme indiqué dans l'extrait suivant. De cette façon, les instances de conteneur sont disponibles et associées au ECS cluster Amazon avant de CloudFormation créer le ECS service Amazon.
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
Stratégie 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 qu'elle ne crée 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.