这是我的云形成模板,它将事件模式传递到子堆栈,该子堆栈实际上根据事件数据创建规则。
cloudwatchRule:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "${s3Path}/cw-rule.yml"
Parameters:
eventPattern: !Join
- ' '
- - '{"source":["aws.iam"],"detail-type":["AWS API Call via CloudTrail"],"detail":{"eventSource":["iam.amazonaws.com"],"eventName":['
- Fn::Split:
- ','
- !Sub ${ssmParamWhichContainsEventNames}
- ']}}'
ruleState: "ENABLED"
#The value of ssmParamWhichContainsEventNames is of format #"CreateServiceSpecificCredential,DeactivateMFADevice"
运行此命令时,出现以下错误
模板错误:每个Fn :: Join对象都需要两个参数,(1)一个字符串定界符,(2)一个要连接的字符串列表或一个返回字符串列表的函数(例如Fn :: GetAZs)要加入。.用户请求回滚。
我尝试了各种技巧来格式化!加入 !拆分 !Sub 的顺序 我也尝试过使用 Fn :: Join (完整功能格式),但是它总是失败。
eventPattern参数中的eventName要求输入以下格式。
“事件名称”:[“事件1”,“事件2”,“事件3”,“事件4”]
我的SSM变量的事件名称的格式为“ event1,event2,event3 ...” 。为了使其与 eventName 兼容并使cloudwatch规则运行,我'必须将“ event1,event2,event3 ...” 转换为'“ event1”,“ event2”,“ event3” ...'
一种选择是,我将SSM转换为可接受的格式,但这是出于某些原因我要避免的事情。
谁能帮我找出将“ CreateServiceSpecificCredential,DeactivateMFADevice” 转换为'“ CreateServiceSpecificCredential”,“ DeactivateMFADevice”'的方法(每个值都用双引号引起来)并且整个字符串都用单引号引起来
我一直感觉我没有以正确的顺序在上面的代码中正确编写内在函数。
答案 0 :(得分:1)
万一有人还在寻找实现它的方法。这是cloudformation模板片段,该片段将逗号分隔的字符串分割成单独的元素数组,以注入到“ eventName”属性中:
cloudwatchRule:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "${s3Path}/cw-rule.yml"
Parameters:
eventPattern: !Sub
- |
{"source":["aws.iam"],"detail-type":["AWS API Call via CloudTrail"],"detail":{"eventSource":["iam.amazonaws.com"],"eventName":[
"${eventNames}"
]}}
- eventNames: !Join
- '","'
- !Split
- ','
- !Ref ssmParamWhichContainsEventNames
ruleState: "ENABLED"