亚马逊发布AWS CloudFormation宏功能

借助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的发布:

开发人员可以通过几个参考宏(如ShortHandString Functions)来熟悉宏功能。AWS CloudFormation的宏功能在所有提供AWS Lambda的AWS区域可用。此外,使用宏功能不需要额外的费用,这意味着客户只需支付标准AWS Lambda Function费用即可使用宏功能。

查看英文原文Amazon Announces Extensibility for AWS CloudFormation with AWS Lambda Powered Macros

  • 发表于:
  • 原文链接:http://www.infoq.com/cn/news/2018/09/aws-cloudformations-macros

扫码关注云+社区

领取腾讯云代金券