Este tópico descreve como usar a transformação AWS::LanguageExtensions
para habilitar funções e recursos adicionais que não estão disponíveis por padrão.
AWS::LanguageExtensions
é uma macro do CloudFormation que, quando referenciada no seu modelo de pilha, atualiza qualquer função intrínseca definida pela transformação para seu valor resolvido dentro do modelo quando você cria ou atualiza uma pilha usando um conjunto de alterações.
Ao incluir essa transformação em seu modelo do CloudFormation, você pode acessar recursos adicionais, como Fn::ForEach
, o qual permite operações mais avançadas, como iterações. Você também pode usar funções intrínsecas em locais onde elas normalmente não são permitidas, como nas funções Ref
e Fn::GetAtt
.
Uso
Para usar a transformação AWS::LanguageExtensions
, é necessário declará-la no nível superior do seu modelo do CloudFormation. Não é possível usar AWS::LanguageExtensions
como uma transformação incorporada em nenhuma outra seção de modelo.
A declaração deve usar a string literal AWS::LanguageExtensions
como seu valor. Você não pode usar um parâmetro ou uma função para especificar um valor de transformação.
Sintaxe
Para declarar essa transformação no modelo do CloudFormation, use a seguinte sintaxe:
JSON
{
"Transform":"AWS::LanguageExtensions",
"Resources":{
...
}
}
YAML
Transform: AWS::LanguageExtensions
Resources:
...
A transformação AWS::LanguageExtensions
é uma declaração independente sem parâmetros adicionais.
Suporte para funções adicionais
A transformação AWS::LanguageExtensions
é compatível com as seguintes funções adicionais:
Considerações
Ao usar a transformação AWS::LanguageExtensions
, tenha em mente as seguintes considerações:
-
Ao atualizar uma pilha usando um valor de parâmetro diferente, não use a opção Usar modelo existente no console do CloudFormation, ou a opção de linha de comando equivalente
--use-previous-template
, se o modelo original contiver uma transformação. Em vez disso, use o modelo original não transformado ao atualizar a pilha. Isso garantirá que a pilha seja atualizada corretamente com os novos valores de parâmetros. -
A sintaxe YAML de formato curto não é compatível com um modelo para funções intrínsecas disponíveis apenas na transformação
AWS::LanguageExtensions
. Use referências explícitas a essas funções. Por exemplo, useFn::Length
em vez de!Length
. -
No momento, a CLI do AWS SAM não oferece suporte à função intrínseca
Fn::ForEach
da transformaçãoAWS::LanguageExtensions
. -
Se você estiver usando várias transformações, use um formato de lista. Se você estiver usando macros personalizadas, posicione as transformações fornecidas pela AWS depois das macros personalizadas. Se você estiver usando ambas as transformações
AWS::LanguageExtensions
eAWS::Serverless
, a transformaçãoAWS::LanguageExtensions
deve vir antes da transformaçãoAWS::Serverless
na lista. -
As funções e os atributos fornecidos pela transformação
AWS::LanguageExtensions
só são compatíveis com as seçõesResources
,Conditions
eOutputs
do seu modelo.
Exemplos
Os exemplos a seguir mostram como usar a transformação AWS::LanguageExtensions
para usar a função intrínseca Fn::Length
definida pela transformação.
JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::LanguageExtensions",
"Parameters": {
"QueueList": {
"Type": "CommaDelimitedList"
},
"QueueNameParam": {
"Description": "Name for your SQS queue",
"Type": "String"
}
},
"Resources": {
"Queue": {
"Type": "AWS::SQS::Queue",
"Properties": {
"QueueName": {
"Ref": "QueueNameParam"
},
"DelaySeconds": {
"Fn::Length": {
"Ref": "QueueList"
}
}
}
}
}
}
YAML
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::LanguageExtensions'
Parameters:
QueueList:
Type: CommaDelimitedList
QueueNameParam:
Description: Name for your SQS queue
Type: String
Resources:
Queue:
Type: AWS::SQS::Queue
Properties:
QueueName: !Ref QueueNameParam
DelaySeconds:
'Fn::Length': !Ref QueueList
Recursos relacionados
Para obter mais exemplos, consulte os tópicos a seguir.
Para obter mais informações sobre o uso de macros, consulte Executar processamento personalizado em modelos do CloudFormation com macros de modelo no Guia do usuário do AWS CloudFormation.