借助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响应,其中包含:
当开发人员想要使用宏时,他们可以使用必要的参数调用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
领取专属 10元无门槛券
私享最新 技术干货