DependsOn Attribut - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DependsOn Attribut

Mit dem DependsOn-Attribut können Sie angeben, dass die Erstellung einer bestimmten Ressource einer anderen folgt. Wenn Sie einer Ressource ein DependsOn-Attribut hinzufügen, wird die Ressource erst nach der Erstellung der im DependsOn-Attribut angegebenen Ressource erstellt.

Wichtig

Abhängige Stacks haben auch implizite Abhängigkeiten in Form der Zieleigenschaften !Ref, !GetAtt und !Sub. Wenn beispielsweise die Eigenschaften der Ressource A einen !Ref auf Ressource B verwenden, gelten die folgenden Regeln:

  • Ressource B wird vor Ressource A erstellt.

  • Ressource A wird vor Ressource B gelöscht.

  • Ressource B wird vor Ressource A aktualisiert.

Sie können das DependsOn-Attribut mit jeder Ressource verwenden. Hier finden Sie einige typische Anwendungsfälle:

  • Ermitteln, wann eine Wartebedingung in Kraft tritt. Weitere Informationen finden Sie unter Wartebedingungen in einer CloudFormation Vorlage erstellen.

  • Deklarieren Sie Abhängigkeiten für Ressourcen, die in einer bestimmten Reihenfolge erstellt oder gelöscht werden müssen. Beispielsweise müssen Sie für einige Ressourcen in a explizit Abhängigkeiten von Gateway-Anhängen deklarierenVPC. Weitere Informationen finden Sie unter Wann ein DependsOn-Attribut erforderlich ist.

  • Überschreiben Sie beim Erstellen, Aktualisieren und Löschen von Ressourcen Standardparallelität. AWS CloudFormation erstellt, aktualisiert und löscht Ressourcen soweit möglich parallel. Es wird automatisch bestimmt, welche Ressourcen in einer Vorlage parallel ausgeführt werden und welche Ressourcen Abhängigkeiten aufweisen, bei denen zuerst andere Vorgänge abgeschlossen werden müssen. Sie können DependsOn damit Abhängigkeiten explizit angeben, wodurch die Standardparallelität außer Kraft gesetzt wird und Sie angewiesen werden, mit diesen Ressourcen in einer bestimmten Reihenfolge CloudFormation zu arbeiten.

Anmerkung

Während eines Stack-Updates werden Ressourcen, die von aktualisierten Ressourcen abhängig sind, automatisch aktualisiert. CloudFormation nimmt keine Änderungen an den automatisch aktualisierten Ressourcen vor. Wenn diesen Ressourcen jedoch eine Stack-Richtlinie zugeordnet ist, muss Ihr Konto über die erforderlichen Berechtigungen verfügen, um sie zu aktualisieren.

Syntax

Für das DependsOn-Attribut kann eine einzelne Zeichenfolge oder eine Liste von Zeichenfolgen verwendet werden.

"DependsOn" : [ String, ... ]

Beispiel

Die folgende Vorlage enthält eine AWS::EC2: :Instance-Ressource mit einem DependsOn Attribut, das MyDB spezifiziert, ein AWS:::RDS:. DBInstance Wenn dieser Stack CloudFormation erstellt wird, erstellt er zuerst MyDB und dann 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

Wann ein DependsOn-Attribut erforderlich ist

VPC-Gateway-Anhang

Für einige Ressourcen in a ist ein Gateway VPC erforderlich (entweder ein Internet oder ein VPN Gateway). Wenn Ihre CloudFormation Vorlage einenVPC, einen Gateway und einen Gateway-Anhang definiert, hängen alle Ressourcen, die den Gateway benötigen, vom Gateway-Anhang ab. Beispielsweise ist eine EC2 Amazon-Instance mit einer öffentlichen IP-Adresse vom VPC -gateway-Anhang abhängig, wenn die InternetGateway Ressourcen VPC und -Ressourcen auch in derselben Vorlage deklariert sind.

Derzeit hängen die folgenden Ressourcen von einem VPC -gateway-Anhang ab, wenn ihnen eine öffentliche IP-Adresse zugeordnet ist und sie sich in einem befinden. VPC

  • Auto-Scaling-Gruppen

  • EC2Amazon-Instanzen

  • Elastic Load Balancing-Load Balancer

  • Elastic-IP-Adressen

  • RDSAmazon-Datenbank-Instances

  • VPCAmazon-Routen, die das Internet-Gateway beinhalten

Die Weitergabe einer VPN Gateway-Route hängt von einem VPC -Gateway-Anhang ab, wenn Sie über ein VPN Gateway verfügen.

Der folgende Ausschnitt zeigt ein Beispiel für einen Gateway-Anhang und eine EC2 Amazon-Instance, die von einem Gateway-Anhang abhängt:

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

Amazon ECS Service und Auto Scaling Scaling-Gruppe

Wenn Sie Auto Scaling oder Amazon Elastic Compute Cloud (AmazonEC2) verwenden, um Container-Instances für einen ECS Amazon-Cluster zu erstellen, muss die ECS Amazon-Serviceressource von der Auto Scaling Scaling-Gruppe oder den EC2 Amazon-Instances abhängig sein, wie im folgenden Ausschnitt dargestellt. Auf diese Weise sind die Container-Instances verfügbar und dem ECS Amazon-Cluster zugeordnet, bevor der ECS Amazon-Service CloudFormation erstellt wird.

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

IAM-Rollenrichtlinie

Für Ressourcen, die zusätzliche Anrufe tätigen, ist eine Servicerolle AWS erforderlich, die es einem Service ermöglicht, in AWS Ihrem Namen Anrufe zu tätigen. Für die AWS::CodeDeploy::DeploymentGroup Ressource ist beispielsweise eine Servicerolle erforderlich, die CodeDeploy über Berechtigungen zum Bereitstellen von Anwendungen auf Ihren Instanzen verfügt. Wenn Sie über eine einzelne Vorlage verfügen, die eine Servicerolle definiert, wird durch die Richtlinie der Rolle (mithilfe der AWS::IAM::Policy- oder AWS::IAM::ManagedPolicy-Ressource) und eine Ressource, welche die Rolle verwendet, eine Abhängigkeit hinzugefügt, sodass die Ressource von der Richtlinie der Rolle abhängt. Diese Abhängigkeit stellt sicher, dass die Richtlinie während des gesamten Lebenszyklus der Ressource verfügbar ist.

Angenommen, Sie haben beispielsweise eine Vorlage mit einer Bereitstellungsgruppenressource, einer Servicerolle und der Richtlinie der Rolle. Wenn Sie einen Stack erstellen, CloudFormation wird die Bereitstellungsgruppe erst erstellt, wenn die Richtlinie für die Rolle erstellt wurde. Ohne die Abhängigkeit CloudFormation kann die Bereitstellungsgruppenressource erstellt werden, bevor die Rollenrichtlinie erstellt wird. Wenn dies der Fall ist, kann die Bereitstellungsgruppe aufgrund unzureichender Berechtigungen nicht erstellt werden.

Wenn die Rolle über eine eingebettete Richtlinie verfügt, geben Sie keine Abhängigkeit an. CloudFormation erstellt die Rolle und ihre Richtlinie gleichzeitig.