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
, no especifique un mapa de variables.String
{ "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
, no especifique un mapa de variables.String
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
${
. 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.MyVarName
}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ínsecaRef
. Si especifica atributos de recursos, como por ejemplo${MyInstance.PublicIp}
, CloudFormation devuelve los mismos valores que si utiliza la función intrínsecaFn::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,${!
. CloudFormation resuelve este texto comoLiteral
}${
.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: