

Esta es la nueva *Guía de referencia de plantillas de CloudFormation*. Actualice sus marcadores y enlaces. Para obtener ayuda sobre cómo empezar a usar CloudFormation, consulte la [Guía del usuario de AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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

Con el atributo `DependsOn` puede especificar que a la creación de un recurso específico le sigue otra: Cuando añade un atributo `DependsOn` a un recurso, ese recurso se crea solo tras la creación del recurso especificado en el atributo `DependsOn`.

**importante**  
Las pilas dependientes también tienen dependencias implícitas en forma de propiedades de destino `!Ref`, `!GetAtt` y `!Sub`. Por ejemplo, si las propiedades de un recurso A utilizan una `!Ref` al recurso B, se aplican las siguientes reglas:  
El recurso B se crea antes que el recurso A.
El recurso A se elimina antes que el recurso B.
El recurso B se actualiza antes que el recurso A.

Puede utilizar el atributo `DependsOn` con cualquier recurso. A continuación le presentamos algunos usos habituales:
+ Determine cuándo entra en vigor una condición de espera. Para obtener más información, consulte [Creación de condiciones de espera en una plantilla](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html) en la *Guía del usuario de AWS CloudFormation*.
+ Declare dependencias para recursos que deben crearse o eliminarse en un orden específico. Por ejemplo, debe declarar explícitamente dependencias en las vinculaciones de la gateway para algunos recursos en una VPC. Para obtener más información, consulte [Cuándo es obligatorio un atributo `DependsOn`](#gatewayattachment).
+ Invalidación de paralelismo predeterminado al crear, actualizar o eliminar recursos. CloudFormation crea, actualiza y elimina los recursos en paralelo en la medida de lo posible. Determina automáticamente qué recursos de una plantilla pueden paralelizarse y cuáles tienen dependencias que requieren que primero terminen otras operaciones. Puede utilizar `DependsOn` para especificar explícitamente dependencias, lo cual invalida el paralelismo predeterminado e indica a CloudFormation que opere en esos recursos en un orden especificado.

**nota**  
Mientras se actualiza la pila, los recursos que dependen de recursos actualizados se actualizan automáticamente. CloudFormation no realiza cambios a recursos que se han actualizado automáticamente, pero, si existe una política de pilas asociada a estos recursos, la cuenta debe tener permiso para actualizarlos.

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

El atributo `DependsOn` puede tomar una única cadena o una lista de cadenas.

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

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

La siguiente plantilla contiene un recurso [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html) con un atributo `DependsOn` que especifica `myDB`, un [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html). Cuando CloudFormation crea esta pila, crea `myDB` en primer lugar y, a continuación, crea `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}}}}'
```

## Cuándo es obligatorio un atributo `DependsOn`
<a name="gatewayattachment"></a>

Vinculación VPC-gateway

Algunos recursos de una VPC requieren una gateway (ya sea una gateway de Internet o VPN). Si su plantilla de CloudFormation define una VPC, una gateway y una vinculación de la gateway, cualquier recurso que requiera la gateway depende de la vinculación de la gateway. Por ejemplo, una instancia Amazon EC2 con una dirección IP pública depende de la conexión de gateway de VPC si los recursos `VPC` e `InternetGateway` también se declaran en la misma plantilla.

En la actualidad, los siguientes recursos dependen de una vinculación de una puerta de enlace VPC cuando tienen una dirección IP pública asociada y están en una VPC.
+ Grupos de escalado automático
+ Instancias de Amazon EC2
+ Balanceadores de carga de Elastic Load Balancing
+ Direcciones IP elásticas
+ Instancia de base de datos de Amazon RDS
+ Rutas de Amazon VPC que incluyen la gateway de Internet

La propagación de una ruta de gateway de VPN depende de una vinculación VPC-gateway cuando tiene una gateway de VPN.

El siguiente ejemplo muestra una vinculación de gateway de ejemplo y una instancia Amazon EC2 que depende de una vinculación de la 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
```

### Servicio de Amazon ECS y grupo de Auto Scaling
<a name="w2aac19c19c17c19"></a>

Al utilizar Auto Scaling o Amazon Elastic Compute Cloud (Amazon EC2) para crear instancias de contenedor de un clúster de Amazon ECS, el recurso del servicio de Amazon ECS debe tener una dependencia en el grupo de Auto Scaling o las instancias Amazon EC2 tal y como se muestra en el siguiente fragmento de código. De esta manera las instancias de contenedor están disponibles y asociadas al clúster de Amazon ECS antes de que CloudFormation cree el servicio 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 roles de IAM
<a name="w2aac19c19c17c21"></a>

Los recursos que realizan llamadas adicionales a AWS necesitan un rol de servicio, lo que permite a un servicio realizar llamadas a AWS en su nombre. Por ejemplo, el recurso `AWS::CodeDeploy::DeploymentGroup` requiere un rol de servicio para que CodeDeploy tenga permisos para la implementación de aplicaciones en sus instancias. Cuando tenga una única plantilla que define un rol de servicio, la política del rol (a través del recurso `AWS::IAM::Policy` o `AWS::IAM::ManagedPolicy`) y un recurso que utiliza el rol, añada una dependencia para que el recurso dependa de la política del rol. Esta dependencia garantiza que la política esté disponible durante todo el ciclo de vida del recurso.

Por ejemplo, imagine que tiene una plantilla con un recurso de grupo de implementaciones, un rol de servicio y la política del rol. Cuando crea una pila, CloudFormation no creará el grupo de implementaciones hasta que cree la política del rol. Sin la dependencia, CloudFormation puede crear el recurso del grupo de implementaciones antes de crear la política del rol. Si esto ocurre, no se creará el grupo de implementaciones debido a que los permisos son insuficientes.

Si el rol tiene una política incrustada, no especifique una dependencia. CloudFormation crea el rol y su política al mismo tiempo.