借助 AWS CloudFormation ,开发人员可以建模并定义他们的基础设施即代码(IaC)。亚马逊发布了一项名为 Macros 的 AWS CloudFormation 新功能,开发人员可以通过调用基于 AWS Lambda Function 的转换来扩展 CloudFormation 模板的原生语法。
AWS CloudFormation 是 AWS 平台必不可少的构建块,有很多服务都依赖它。自 2011 年首次发布以来,CloudFormation 已经发展到目前的状态,最近新增了 Macros 功能。AWS CloudFormations 的宏包含了两个组件:定义和实现。开发人员创建一个定义,以 CloudFormation 资源类型 AWS::CloudFormation::Macro 开头,概述了要使用的 Lambda Function 以及应该被调用的宏。
Type: "AWS::CloudFormation::Macro" Properties: Description: String FunctionName: String LogGroupName: String LogRoleARN: String Name: String
在定义中,Name 必须是唯一的,并且 FunctionName 对 Lambda Function 的引用需要与宏位于同一区域。当开发人员执行宏模板时,对于其他模板也是可用的。宏的实现是一个 Lambda Function,它需要一个 JSON 载荷。
{ "region": "us-east-1", "accountId": "$ACCOUNT_ID", "fragment": { ... }, "transformId": "$TRANSFORM_ID", "params": { ... }, "requestId": "$REQUEST_ID", "templateParameterValues": { ... } }
JSON 载荷中的片段包含整个模板或模板的相关部分。请注意,无论模板是否为 YAML,片段都是 JSON。此外,Lambda Function 返回一个 JSON 响应,其中包含:
- 一个请求 ID,与请求中收到的请求 ID 相同;
- 一个状态字段,包含成功值或使 ChangeSet 失败的其他值;
- 一个片段,包含已转换模板的有效 CloudFormation JSON 载荷。
当开发人员想要使用宏时,他们可以使用必要的参数调用 Fn::Transform。
AWSTemplateFormatVersion: 2010-09-09 Resources: MyS3Bucket: Type: 'AWS::S3::Bucket' Fn::Transform: Name: EchoMacro Parameters: Key: Value
如果开发人员需要解析整个模板,他们可以将其包含在模板的变换列表中。在执行这个模板时,将通过调用每个宏的指定函数并返回最终模板将变换收集到变更集中,如这篇博文所述。
来源: https://aws.amazon.com/blogs/aws/cloudformation-macros/
AWS 的高级技术宣传员 Randall Hunt 在博文中谈到了Macros 的发布:
它真正的优势在于可以通过代码来扩展基础设施即代码。这项新功能带来的可能性几乎是无限的。
开发人员可以通过几个参考宏(如 ShortHand 和 String Functions )来熟悉宏功能。AWS CloudFormation 的宏功能在所有提供 AWS Lambda 的 AWS 区域可用。此外,使用宏功能不需要额外的费用,这意味着客户只需支付标准 AWS Lambda Function 费用即可使用宏功能。
查看英文原文: Amazon Announces Extensibility for AWS CloudFormation with AWS Lambda Powered Macros
评论