Fn::Sub - AWS CloudFormation

Fn::Sub

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

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

JSON

{ "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

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

Parámetros

String

Una cadena con variables que AWS 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}.

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

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

Ejemplos

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

Fn::Sub con una asignación

El siguiente ejemplo utiliza un mapeo para sustituir la variable ${Domain} por el valor resultante de la función Ref.

JSON

{ "Name": { "Fn::Sub": [ "www.${Domain}", { "Domain": { "Ref": "RootDomainName" } } ] } }

YAML

Name: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName

Fn::Sub sin una asignación

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

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

YAML

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

 

Comandos UserData

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

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

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}

Funciones compatibles

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: