

Este é o novo *Guia de referência de modelos do CloudFormation*. Atualize seus favoritos e links. Para obter ajuda para começar a usar o CloudFormation, consulte o [Guia do usuário do AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# `DependsOn`Atributo
<a name="aws-attribute-dependson"></a>

Com o atributo `DependsOn`, você pode especificar que a criação de um recurso específico segue outro. Quando você adiciona um atributo `DependsOn` a um recurso, esse recurso é criado apenas após a criação do recurso especificado no atributo `DependsOn`.

**Importante**  
Pilhas dependentes também têm dependências implícitas na forma de propriedades de destino `!Ref`, `!GetAtt` e `!Sub`. Por exemplo, as seguintes regras serão aplicadas se as propriedades do recurso A usarem um `!Ref` para o recurso B:  
O recurso B é criado antes do recurso A.
O recurso A é excluído antes do recurso B.
O recurso B é atualizado antes do recurso A.

Você pode usar o atributo `DependsOn` com qualquer recurso. Estes são alguns usos típicos:
+ Determinar quando uma condição de espera entra em vigor. Para obter mais informações, consulte [Criar condições de espera em um modelo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html) no *Guia do usuário do AWS CloudFormation*.
+ Declarar dependências para recursos que devem ser criados ou excluídos em uma ordem específica. Por exemplo, você deve declarar explicitamente dependências de anexos de gateway para alguns recursos em uma VPC. Para obter mais informações, consulte [Quando um atributo `DependsOn` é obrigatório](#gatewayattachment).
+ Substituir o paralelismo padrão ao criar, atualizar ou excluir recursos. O CloudFormation cria, atualiza e exclui recursos em paralelo até o máximo possível. Ele determina automaticamente quais recursos em um modelo podem ser paralelizados e quais têm dependências que exigem que outras operações encerrem primeiro. Você pode usar `DependsOn` para especificar explicitamente dependências, o que substitui o paralelismo padrão e instrui CloudFormation a operar nesses recursos em uma ordem específica.

**nota**  
Durante a atualização de uma pilha, os recursos que dependem de recursos atualizados são atualizados automaticamente. O CloudFormation não faz alterações nos recursos atualizados automaticamente, mas, se uma política de pilha estiver associada a esses recursos, sua conta deverá ter as permissões para atualizá-los.

## Sintaxe
<a name="aws-attribute-dependson-syntax"></a>

O atributo `DependsOn` pode usar uma única sequência ou uma lista de sequências.

```
"DependsOn" : [ {{String, ...}} ]
```

## Exemplo
<a name="aws-attribute-dependson-example"></a>

O modelo a seguir contém um recurso [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html) com um atributo `DependsOn` que especifica o `myDB`, um [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html). Quando o CloudFormation cria essa pilha, ele primeiro cria o o `myDB`, depois, cria `Ec2Instance`.

### JSON
<a name="aws-attribute-dependson-example-1.json"></a>

```
 1. {
 2.     "Resources" : {
 3.         "Ec2Instance" : {
 4.             "Type" : "AWS::EC2::Instance",
 5.             "Properties" : {
 6.                 "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
 7.                 "InstanceType": "t2.micro"
 8.             },
 9.             "DependsOn" : "myDB"
10.         },
11.         "myDB" : {
12.             "Type" : "AWS::RDS::DBInstance",
13.             "Properties" : {
14.                "AllocatedStorage" : "5",
15.                "DBInstanceClass" : "db.t2.small",
16.                "Engine" : "MySQL",
17.                "EngineVersion" : "5.5",
18.                "MasterUsername" : "{{resolve:secretsmanager:{{MySecret}}:SecretString:{{username}}}}",
19.                "MasterUserPassword" : "{{resolve:secretsmanager:{{MySecret}}:SecretString:{{password}}}}"
20.             }
21.         }
22.     }
23. }
```

### YAML
<a name="aws-attribute-dependson-example-1.yaml"></a>

```
 1. Resources:
 2.   Ec2Instance:
 3.     Type: AWS::EC2::Instance
 4.     Properties:
 5.       ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
 6.       InstanceType: t2.micro
 7.     DependsOn: myDB
 8.   myDB:
 9.     Type: AWS::RDS::DBInstance
10.     Properties:
11.       AllocatedStorage: '5'
12.       DBInstanceClass: db.t2.small
13.       Engine: MySQL
14.       EngineVersion: '5.5'
15.       MasterUsername: '{{resolve:secretsmanager:{{MySecret}}:SecretString:{{username}}}}'
16.       MasterUserPassword: '{{resolve:secretsmanager:{{MySecret}}:SecretString:{{password}}}}'
```

## Quando um atributo `DependsOn` é obrigatório
<a name="gatewayattachment"></a>

Anexo de gateway de VPC

Alguns recursos em uma VPC exigem um gateway (um gateway de VPN ou de Internet). Se o modelo do CloudFormation definir uma VPC, um gateway e um anexo de gateway, todos os recursos que requeiram o gateway dependerão do anexo de gateway. Por exemplo, uma instância de Amazon EC2 com um endereço IP público será dependente do anexo de gateway de VPC se os recursos `VPC` e `InternetGateway` também forem declarados no mesmo modelo.

Atualmente, os seguintes recursos dependem de um anexo de gateway de VPC quando tiverem um endereço IP público associado e estiverem em uma VPC.
+ Grupos do Auto Scaling
+ Instâncias do Amazon EC2
+ Load balancers Elastic Load Balancing
+ Endereços IP elásticos
+ Instâncias de bancos de dados Amazon RDS
+ Rotas da Amazon VPC que incluem o Internet gateway

A propagação de uma rota de gateway de VPN depende de um anexo de gateway de VPC quando você tem um gateway de VPN.

O trecho a seguir mostra um anexo de gateway de exemplo e uma instância Amazon EC2 que depende de um anexo de gateway:

### JSON
<a name="aws-attribute-dependson-example-2.json"></a>

```
"GatewayToInternet" : {
  "Type" : "AWS::EC2::VPCGatewayAttachment",
  "Properties" : {
    "VpcId" : { 
      "Ref" : "VPC" 
    },
    "InternetGatewayId" : { 
      "Ref" : "InternetGateway" 
    }
  }
},

"EC2Host" : {
  "Type" : "AWS::EC2::Instance",
  "DependsOn" : "GatewayToInternet",
  "Properties" : {
    "InstanceType" : "t2.micro",
    "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
    "KeyName"  : { 
      "Ref" : "KeyName" 
    },
    "NetworkInterfaces" : [
      {
        "GroupSet" : [
          { 
            "Ref" : "EC2SecurityGroup" 
          }
        ],
        "AssociatePublicIpAddress" : "true",
        "DeviceIndex" : "0",
        "DeleteOnTermination" : "true",
        "SubnetId" : { 
          "Ref" : "PublicSubnet" 
        }
      }
    ]
  }
}
```

### YAML
<a name="aws-attribute-dependson-example-2.yaml"></a>

```
GatewayToInternet:
  Type: AWS::EC2::VPCGatewayAttachment
  Properties:
    VpcId:
      Ref: VPC
    InternetGatewayId:
      Ref: InternetGateway
EC2Host:
  Type: AWS::EC2::Instance
  DependsOn: GatewayToInternet
  Properties:
    InstanceType: t2.micro
    ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
    KeyName:
      Ref: KeyName
    NetworkInterfaces:
    - GroupSet:
      - Ref: EC2SecurityGroup
      AssociatePublicIpAddress: 'true'
      DeviceIndex: '0'
      DeleteOnTermination: 'true'
      SubnetId:
        Ref: PublicSubnet
```

### Serviço Amazon ECS e grupo do Auto Scaling
<a name="w2aac19c19c17c19"></a>

Quando você usa o Auto Scaling ou Amazon Elastic Compute Cloud (Amazon EC2) para criar instâncias de contêiner para um cluster de Amazon ECS o recurso do serviço de Amazon ECS deve ter uma dependência do grupo de Auto Scaling ou de instâncias de Amazon EC2 conforme mostrado no trecho a seguir. Dessa forma, as instâncias de contêiner estão disponíveis e associadas ao cluster de Amazon ECS antes do CloudFormation criar o serviço de Amazon ECS.

#### JSON
<a name="aws-attribute-dependson-example-3.json"></a>

```
"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
<a name="aws-attribute-dependson-example-3.yaml"></a>

```
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
```

### Política de perfil do IAM
<a name="w2aac19c19c17c21"></a>

Os recursos que fazem chamadas adicionais para a AWS exigem uma função de serviço, o que permite que um serviço faça chamadas para a AWS em seu nome. Por exemplo, o recurso `AWS::CodeDeploy::DeploymentGroup` exige uma função de serviço para que o CodeDeploy tenha permissões para implantar aplicações em suas instâncias. Quando você tiver um único modelo que define uma função de serviço, a política de função (usando o recurso `AWS::IAM::Policy` ou `AWS::IAM::ManagedPolicy`) e um recurso que usa a função, adicione uma dependência para que o recurso dependa da política de função. Essa dependência garante que a política esteja disponível durante todo o ciclo de vida do recurso.

Por exemplo, imagine que você tem um modelo com um recurso de grupo de implantação, uma função de serviço e a política da função. Quando você cria uma pilha, o CloudFormation não cria o grupo de implantação até que a política de função seja criada. Sem a dependência, o CloudFormation pode criar o recurso de grupo de implantação antes de criar a política da função. Se isso acontecer, o grupo de implantação não poderá ser criado devido a permissões insuficientes.

Se a função tiver uma política inserida, não especifique uma dependência. O CloudFormation cria a função e sua política ao mesmo tempo.