Attributo DependsOn - AWS CloudFormation

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Attributo DependsOn

Con l'attributo DependsOn puoi specificare che la creazione di una risorsa specifica segua un'altra. Quando aggiungi un attributo DependsOn a una risorsa, tale risorsa viene creata solo dopo la creazione della risorsa specificata nell'attributo DependsOn.

Importante

Gli stack dipendenti hanno anche dipendenze implicite sotto forma di proprietà di destinazione !Ref, !GetAtt e !Sub. Ad esempio, se le proprietà di una risorsa A utilizzano !Ref su una risorsa B, si applica la regola seguente:

  • La risorsa B viene creata prima della risorsa A.

  • La risorsa A viene eliminata prima della risorsa B.

  • La risorsa B viene aggiornata prima della risorsa A.

Puoi utilizzare l'attributo DependsOn con qualsiasi risorsa. Di seguito sono elencati alcuni usi tipici:

  • Determina quando una condizione di attesa diventa valida. Per ulteriori informazioni, consulta Creare condizioni di attesa in un CloudFormation modello.

  • Dichiara dipendenze per le risorse che devono essere create o eliminate in un ordine specifico. Ad esempio, è necessario dichiarare esplicitamente le dipendenze dagli allegati del gateway per alcune risorse in a. VPC Per ulteriori informazioni, consulta Quando un attributo DependsOn è obbligatorio.

  • Sovrascrivi il parallelismo predefinito durante la creazione, l'aggiornamento o l'eliminazione di risorse. AWS CloudFormation crea, aggiorna ed elimina le risorse in parallelo il più possibile. Determina automaticamente quali risorse in un modello possono essere parallelizzate e quali hanno dipendenze che richiedono altre operazioni per finire prima. È possibile utilizzare DependsOn per specificare in modo esplicito le dipendenze, il che sostituisce il parallelismo predefinito e impone di operare su tali risorse in un ordine specificato. CloudFormation

Nota

Durante un aggiornamento dello stack, le risorse che dipendono dalle risorse aggiornate vengono aggiornate automaticamente. CloudFormation non apporta modifiche alle risorse aggiornate automaticamente, ma, se a tali risorse è associata una policy di stack, l'account deve disporre delle autorizzazioni per aggiornarle.

Sintassi

L'attributo DependsOn può richiedere una singola stringa o un elenco di stringhe.

"DependsOn" : [ String, ... ]

Esempio

Il seguente modello contiene una risorsa AWS::EC2: :Instance con un DependsOn attributo che specifica myDB, un AWS::::. RDS DBInstance Quando CloudFormation crea questo stack, crea prima MyDB, quindi crea 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

Quando un attributo DependsOn è obbligatorio

VPC-allegato gateway

Alcune risorse in a VPC richiedono un gateway (Internet o un VPN gateway). Se il CloudFormation modello definisce un gatewayVPC, un gateway e un allegato gateway, tutte le risorse che richiedono il gateway dipendono dall'allegato del gateway. Ad esempio, un'EC2istanza Amazon con un indirizzo IP pubblico dipende dall'allegato VPC -gateway se anche InternetGateway le risorse VPC and sono dichiarate nello stesso modello.

Attualmente, le seguenti risorse dipendono da un allegato VPC -gateway quando hanno un indirizzo IP pubblico associato e si trovano in un. VPC

  • Gruppi Auto Scaling

  • EC2Istanze Amazon

  • Load balancer Elastic Load Balancing

  • Indirizzi IP elastici

  • Istanze RDS di database Amazon

  • VPCPercorsi Amazon che includono il gateway Internet

La propagazione di una route VPN gateway dipende da un allegato VPC -gateway se si dispone di un VPN gateway.

Il seguente frammento mostra un allegato gateway di esempio e un'EC2istanza Amazon che dipende da un allegato gateway:

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

ECSServizio Amazon e gruppo Auto Scaling

Quando usi Auto Scaling o Amazon Elastic Compute Cloud (AmazonEC2) per creare istanze di container per un cluster AmazonECS, la risorsa del ECS servizio Amazon deve dipendere dal gruppo Auto Scaling o dalle EC2 istanze Amazon, come mostrato nel seguente frammento. In questo modo le istanze del contenitore sono disponibili e associate al ECS cluster Amazon prima di CloudFormation creare il ECS servizio 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

Policy del ruolo IAM

Risorse che effettuano chiamate aggiuntive AWS richiedono un ruolo di servizio, che consente a un servizio di effettuare chiamate per tuo AWS conto. Ad esempio, la AWS::CodeDeploy::DeploymentGroup risorsa richiede un ruolo di servizio che CodeDeploy disponga delle autorizzazioni necessarie per distribuire applicazioni sulle istanze dell'utente. Quando disponi di un singolo modello che definisce un ruolo del servizio, la policy del ruolo (utilizzando la risorsa AWS::IAM::Policy o AWS::IAM::ManagedPolicy) e una risorsa che usa il ruolo, aggiungi una dipendenza in modo che la risorsa dipenda dalla policy del ruolo. Questa dipendenza garantisce che la policy sia disponibile per tutto il ciclo di vita della risorsa.

Ad esempio, immagina di disporre di un modello con una risorsa del gruppo di distribuzione, un ruolo del servizio e il ruolo della policy. Quando crei uno stack, CloudFormation non creerà il gruppo di distribuzione finché non creerà la politica del ruolo. Senza la dipendenza, CloudFormation può creare la risorsa del gruppo di distribuzione prima di creare la politica del ruolo. In tal caso, il gruppo di distribuzione non riuscirà a creare a causa della mancanza di autorizzazioni.

Se il ruolo ha una politica incorporata, non specificare una dipendenza. CloudFormation crea il ruolo e la relativa politica contemporaneamente.