

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).

# `Fn::Sub`
<a name="intrinsic-function-reference-sub"></a>

La función intrínseca `Fn::Sub` sustituye variables en una cadena de entrada por los valores que especifique. En las plantillas, puede utilizar esta función para construir comandos o salidas que incluyen valores que no están disponibles hasta que crea o actualiza una pila.

## Declaración
<a name="intrinsic-function-reference-sub-declaration"></a>

En las secciones siguientes se muestra la sintaxis de la función.

### JSON
<a name="intrinsic-function-reference-sub-syntax.json"></a>

```
{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }
```

Si está sustituyendo solamente parámetros de plantilla, ID lógicos de recursos o atributos de recursos en el parámetro `String`, no especifique un mapa de variables.

```
{ "Fn::Sub" : String }
```

### YAML
<a name="intrinsic-function-reference-sub-syntax.yaml"></a>

Sintaxis del nombre de función completo:

```
Fn::Sub:
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

Sintaxis de la forma abreviada:

```
!Sub
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

Si está sustituyendo solamente parámetros de plantilla, ID lógicos de recursos o atributos de recursos en el parámetro `String`, no especifique un mapa de variables.

Sintaxis del nombre de función completo:

```
Fn::Sub: String
```

Sintaxis de la forma abreviada:

```
!Sub String
```

## Parameters
<a name="w2aac24c66b7"></a>

`String`  
Una cadena con variables que CloudFormation sustituye por los valores asociados durante el tiempo de ejecución. Escriba variables como `${MyVarName}`. Las variables pueden ser los nombres de parámetros de plantilla, ID lógicos de recursos, atributos de recursos o una asignación clave-valor. Si especifica únicamente nombres de parámetros de plantilla, ID de recursos lógicos y atributos de recursos, no especifique una asignación clave-valor.  
Si especifica nombres de parámetros de plantilla o ID lógicos de recursos, como por ejemplo `${InstanceTypeParameter}`, CloudFormation devuelve los mismos valores que si utiliza la función intrínseca `Ref`. Si especifica atributos de recursos, como por ejemplo `${MyInstance.PublicIp}`, CloudFormation devuelve los mismos valores que si utiliza la función intrínseca `Fn::GetAtt`.  
Para escribir un símbolo de dólar y llaves (`${}`) literalmente, agregue una exclamación (`!`) después de la llave de apertura, como, por ejemplo, `${!Literal}`. CloudFormation resuelve este texto como `${Literal}`.  
Si está utilizando una plantilla de lanzamiento, agregue una barra invertida `\` antes del signo del dólar, por ejemplo `\${!Literal}`, de lo contrario el literal se resolverá como una cadena vacía.

`VarName`  
El nombre de una variable que incluyó en el parámetro `String`.

`VarValue`  
El valor que CloudFormation sustituye para el nombre de variable asociada durante el tiempo de ejecución.

## Valor devuelto
<a name="w2aac24c66b9"></a>

CloudFormation devuelve la cadena original y sustituye los valores para todas las variables.

## Ejemplos
<a name="w2aac24c66c11"></a>

Los siguientes ejemplos muestran cómo utilizar la función `Fn::Sub`.

### Uso de `Fn::Sub` sin una asignación de clave-valor
<a name="w2aac24c66c11b5"></a>

En este sencillo ejemplo, la descripción del recurso `InstanceSecurityGroup` se crea dinámicamente con el pseudoparámetro `AWS::StackName`. Por ejemplo, si el nombre de la pila es “VPC-EC2-ALB-Stack”, la descripción resultante es “SSH security group for VPC-EC2-ALB-Stack”.

#### JSON
<a name="intrinsic-function-reference-sub-example-1.json"></a>

```
"InstanceSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
        "GroupDescription" : {"Fn::Sub": "SSH security group for ${AWS::StackName}"}
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-1.yaml"></a>

```
InstanceSecurityGroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: !Sub "SSH security group for ${AWS::StackName}"
```

### Uso de `Fn::Sub` con una asignación de clave-valor
<a name="w2aac24c66c11b7"></a>

En este ejemplo, el nombre del recurso `WWWBucket` se crea dinámicamente con una asignación de clave-valor. La función `Fn::Sub` sustituye a `${Domain}` en la cadena de entrada `www.${Domain}` por el valor de una función `Ref` que hace referencia al parámetro `RootDomainName` definido en la misma plantilla de pila. Por ejemplo, si el nombre del dominio raíz es “mydomain.com”, el nombre resultante de este recurso es “www.mydomain.com”.

#### JSON
<a name="intrinsic-function-reference-sub-example-2.json"></a>

```
"WWWBucket":{
  "Type":"AWS::S3::Bucket",
  "Properties":{
    "BucketName":{
      "Fn::Sub":[
        "www.${Domain}",
        {
          "Domain":{
            "Ref":"RootDomainName"
          }
        }
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-2.yaml"></a>

```
  WWWBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub
        - 'www.${Domain}'
        - Domain: !Ref RootDomainName
```

### Uso de diversas variables para construir los ARN
<a name="w2aac24c66c11b9"></a>

En el siguiente ejemplo se utiliza `Fn::Sub` con los pseudoparámetros `AWS::Region` y `AWS::AccountId`, y el ID lógico de recurso `vpc` para crear un nombre de recurso de Amazon (ARN) de una VPC.

#### JSON
<a name="intrinsic-function-reference-sub-example-3.json"></a>

```
{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }
```

#### YAML
<a name="intrinsic-function-reference-sub-example-3.yaml"></a>

```
!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'
```

### Transferencia de los valores de los parámetros a los scripts de datos de usuario
<a name="w2aac24c66c11c11"></a>

En el siguiente ejemplo, se utiliza `Fn::Sub` para sustituir los pseudoparámetros `AWS::StackName` y `AWS::Region` del nombre de pila real, y la región durante el tiempo de ejecución.

#### JSON
<a name="intrinsic-function-reference-sub-example.json"></a>

Por ejemplo, el ejemplo de JSON utiliza la función `Fn::Join` para separar cada comando, en lugar de especificar la totalidad del script de datos del usuario en un valor de cadena individual.

```
"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [
  "#!/bin/bash -xe",
  "yum update -y aws-cfn-bootstrap",
  { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" },
  { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]]
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example.yaml"></a>

El ejemplo de YAML utiliza un bloque literal para especificar el script de datos del usuario.

```
UserData:
  Fn::Base64:
    !Sub |
      #!/bin/bash -xe
      yum update -y aws-cfn-bootstrap
      /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
      /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
```

### Especificación de valores condicionales con asignaciones
<a name="w2aac24c66c11c13"></a>

En este ejemplo, el nombre del recurso de `myLogGroup` se crea dinámicamente mediante la sustitución de la variable `log_group_name` por el valor resultante de la función `Fn::FindInMap`.

#### JSON
<a name="intrinsic-function-reference-sub-example-5.json"></a>

```
{
  "Mappings": {
    "LogGroupMapping": {
      "Test": {
        "Name": "test_log_group"
      },
      "Prod": {
        "Name": "prod_log_group"
      }
    }
  },
  "Resources": {
    "myLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": [
            "cloud_watch_${log_group_name}",
            {
              "log_group_name": {
                "Fn::FindInMap": [
                  "LogGroupMapping",
                  "Test",
                  "Name"
                ]
              }
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-5.yaml"></a>

```
Mappings:
  LogGroupMapping:
    Test:
      Name: test_log_group
    Prod:
      Name: prod_log_group
Resources:
  myLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub 
        - 'cloud_watch_${log_group_name}'
        - log_group_name: !FindInMap 
            - LogGroupMapping
            - Test
            - Name
```

## Funciones compatibles
<a name="intrinsic-function-reference-sub-supported-functions"></a>

Para el parámetro `String`, no se puede usar ninguna función. Debe especificar un valor de cadena.

Para los parámetros `VarName` y `VarValue`, puede utilizar las siguientes funciones:
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](#intrinsic-function-reference-sub)
+ [`Ref`](intrinsic-function-reference-ref.md)