Fn::Sub
A função intrínseca Fn::Sub
substitui variáveis em uma sequência de entrada por valores especificados por você. Em seus modelos, você pode usar essa função para construir comandos ou saídas que incluem valores que não estão disponíveis até que você crie ou atualize uma pilha.
Declaração
As seções a seguir mostram a sintaxe da função.
JSON
{ "Fn::Sub" : [
String
, {Var1Name
:Var1Value
,Var2Name
:Var2Value
} ] }
Se você estiver substituindo apenas parâmetros do modelo, IDs lógicos de recursos ou atributos de recursos no parâmetro
, não especifique um mapa de variáveis.String
{ "Fn::Sub" :
String
}
YAML
Sintaxe para o nome da função completo:
Fn::Sub: -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
Sintaxe para a forma resumida:
!Sub -
String
-Var1Name
:Var1Value
Var2Name
:Var2Value
Se você estiver substituindo apenas parâmetros do modelo, IDs lógicos de recursos ou atributos de recursos no parâmetro
, não especifique um mapa de variáveis.String
Sintaxe para o nome da função completo:
Fn::Sub:
String
Sintaxe para a forma resumida:
!Sub
String
Parâmetros
String
-
Uma sequência com variáveis que o AWS CloudFormation substitui por seus valores associados em runtime. Escreva variáveis como
${
. As variáveis podem ser nomes de parâmetros do modelo, IDs lógicos de recursos, atributos de recursos ou uma variável em um mapa de chave/valor. Se você especificar apenas nomes de parâmetros do modelo, IDs lógicos de recursos e atributos de recursos, não especifique um mapa de chave/valor.MyVarName
}Se você especificar nomes de parâmetros do modelo ou IDs lógicas de recursos, como
${InstanceTypeParameter}
, o CloudFormation retornará os mesmos valores como se você tivesse usado a função intrínsecaRef
. Se você especificar atributos de recursos, como${MyInstance.PublicIp}
, o CloudFormation retornará os mesmos valores como se você tivesse usado a função intrínsecaFn::GetAtt
.Para escrever um cifrão e chaves (
${}
) literalmente, adicione um ponto de exclamação (!
) após a chave de abertura, como${!
. O CloudFormation resolve esse texto comoLiteral
}${
.Literal
} VarName
-
O nome de uma variável que você incluiu no parâmetro
String
. VarValue
-
O valor que o CloudFormation substitui para o nome da variável associada em runtime.
Valor de retorno
O CloudFormation retorna a sequência original, substituindo os valores de todas as variáveis.
Exemplos
Os exemplos a seguir demonstram como usar a função Fn::Sub
.
Fn::Sub
com um mapeamento
O exemplo a seguir usa um mapeamento para substituir a variável ${Domain}
pelo valor resultante da função Ref
.
JSON
{ "Name": { "Fn::Sub": [ "www.${Domain}", { "Domain": { "Ref": "RootDomainName" } } ] } }
YAML
Name: !Sub - 'www.${Domain}' - Domain: !Ref RootDomainName
Fn::Sub
sem um mapeamento
O exemplo a seguir usa Fn::Sub com os pseudoparâmetros AWS::Region
e AWS::AccountId
e o ID lógico de recurso vpc
para criar um Nome de recurso da Amazon (ARN) para uma 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
O exemplo apresentado a seguir usa Fn::Sub
para substituir os pseudoparâmetros AWS::StackName
e AWS::Region
pelo nome e pela região reais da pilha no runtime.
JSON
Para facilitar a leitura, o exemplo do JSON usa a função Fn::Join
para separar cada comando, em vez de especificar todo o script de dados do usuário em um único valor de sequência.
"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
O exemplo do YAML usa um bloco literal para especificar o script de dados do usuário.
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}
Funções compatíveis
No parâmetro String
, não é possível usar funções. É necessário especificar um valor de string.
Para os parâmetros VarName
e VarValue
, você pode usar as seguintes funções: