AWS CloudFormation Macro#
Keywords: AWS, Amazon, CloudFormation
Macro 跟 Custom Resource 有点类似, 但是是为了解决不同的问题而设计的. 简单来说 Custom Resource 是为了解决创建 CloudFormation 不支持的资源而设计的. 而 Macro 则像是解决 CloudFormation 的 JSON 语法无法实现的复杂业务逻辑, 而允许你用编程语言替换掉 Macro 的部分而设计的.
举例来说, 假设我们有一个没有参数的 Macro, 叫做 Md5, 它能返回随机的 MD5 字符串. 那么在下面的 CloudFormation Template 中, GroupName
的值就被替换成了 Macro 的 Lambda Function 的返回值. 注意, 这个返回值不仅仅可以是这个例子中的字符串, 而且可以是任何复杂的 JSON 对象, 甚至重新定义一个 Resource 甚至多个 Resource 都是可以的.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"IamGroup": {
"Type": "AWS::IAM::Group",
"Properties": {
"GroupName": {
"Fn::Transform": {
"Name": "Md5",
"Parameters": {},
}
},
},
},
},
}
关于这个 Macro 后端的 Lambda Function 的具体实现, 请参考 Creating a CloudFormation macro definition 一文. 其中 Request object 中的 params
就是上面的 "Parameters" : {}
部分, 而整个 {"Fn: Transform": ...} `` 则是 Response object 中的 ``fragment
部分.