藉助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