Fn::Sub - AWS CloudFormation

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 String, não especifique um mapa de variáveis.

{ "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 String, não especifique um mapa de variáveis.

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 ${MyVarName}. 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.

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ínseca Ref. Se você especificar atributos de recursos, como ${MyInstance.PublicIp}, o CloudFormation retornará os mesmos valores como se você tivesse usado a função intrínseca Fn::GetAtt.

Para escrever um cifrão e chaves (${}) literalmente, adicione um ponto de exclamação (!) após a chave de abertura, como ${!Literal}. O CloudFormation resolve esse texto como ${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

{ "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 a seguir usa Fn::Sub para substituir os pseudoparâmetros AWS::StackName e AWS::Region do nome real da pilha e da região em tempo de execução.

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:

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::ImportValue

  • Fn::Join

  • Fn::Select

  • Ref