Com o AWS CloudFormation, os desenvolvedores podem modelar e definir sua infraestrutura como codigo. Agora a Amazon anunciou um novo recurso da AWS CloudFormation chamada de Macros, que permite aos desenvolvedores estender a sintaxe nativa dos modelos do CloudFormation chamando as transformações ativadas pelo AWS Lambda.
O AWS CloudFormation é um bloco de construção essencial na plataforma da AWS, com muitos serviços dependendo dele. Desde o seu lançamento inicial em 2011, o CloudFormation evoluiu para o estado atual com a mais recente adição de Macros. Uma macro no AWS CloudFormation tem dois componentes: uma definição e uma implementação. Um desenvolvedor cria uma definição começando com o tipo de recurso do CloudFormation, AWS::CloudFormation::Macro, que descreve a função lambda a ser usada e como a macro deve ser chamada.
Type: "AWS::CloudFormation::Macro"
Properties:
Description: String
FunctionName: String
LogGroupName: String
LogRoleARN: String
Name: String
Na definição, o Name deve ser exclusivo e a referência a função Lambda no FunctionName precisa estar na mesma região que a macro. Quando o desenvolvedor executa o modelo de macro, ele ficará disponível para outros modelos também. A implementação da macro é uma função do Lambda e espera uma carga útil do JSON.
{
"region": "us-east-1",
"accountId": "$ACCOUNT_ID",
"fragment": { ... },
"transformId": "$TRANSFORM_ID",
"params": { ... },
"requestId": "$REQUEST_ID",
"templateParameterValues": { ... }
}
O fragmento na carga útil do JSON contém um modelo inteiro ou partes relevantes do modelo. Observe que o fragmento também será JSON, independentemente de o modelo ser YAML. Além disso, a função Lambda retorna uma resposta JSON contendo:
- Um ID de requisição, o mesmo que ele recebe na requisição;
- Um campo de status contendo sucesso ou outros valores que falharão no ChangeSet;
- E um fragmento contendo o JSON do CloudFormation válido do modelo transformado.
Quando os desenvolvedores querem usar a macro, eles podem chamar Fn::Transform com os parâmetros necessários.
AWSTemplateFormatVersion: 2010-09-09
Resources:
MyS3Bucket:
Type: 'AWS::S3::Bucket'
Fn::Transform:
Name: EchoMacro
Parameters:
Key: Value
No caso de um desenvolvedor precisar analisar um modelo inteiro, ele poderá incluí-lo na lista de transformações no modelo. Ao executar esse modelo, as transformações serão coletadas em um conjunto de alterações, chamando a função especificada de cada macro e retornando o modelo final de acordo com a postagem do blog.
Fonte: https://aws.amazon.com/blogs/aws/cloudformation-macros/
Rendall Hunt, evangelista técnico sênior da AWS, disse na postagem sobre o anúncio de macros:
O poder real aqui é que você pode estender sua infraestrutura existente como código, com código. As possibilidades permitidas por essa nova funcionalidade são virtualmente ilimitadas.
Existem várias macros de referência, como ShortHand e String Functions, que os desenvolvedores podem explorar para se familiarizar com as macros. O novo recurso Macros no AWS CloudFormation está disponível em todas as regiões da AWS que fornecem o AWS Lambda. Além disso, não há cobrança adicional de CloudFormation para Macros, o que significa que os clientes só recebem cobranças da função padrão do AWS Lambda.