amazon-web-services - 在 cloudwatch 事件规则 cloudformation 中动态附加事件名称
问题描述
这是我的云形成模板,它将事件模式传递给实际上根据事件数据创建规则的子堆栈。
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)的函数.. 用户请求回滚。
我尝试了各种技术来格式化!Join !Split !Sub的顺序 我也尝试过使用Fn::Join(全功能格式),但它一直失败。
eventPattern 参数中的 eventName 需要以下格式的输入。
“事件名称”:[“事件 1”,“事件 2”,“事件 3”,“事件 4”]
我的 SSM 变量的事件名称格式为“event1,event2,event3...”为了使其与eventName兼容并运行 cloudwatch 规则,我必须将“event1,event2,event3...”转换为' “事件 1”、“事件 2”、“事件 3”...'
一种选择是我将 SSM 转换为我可接受的格式,但出于某种原因,这是我想要避免的事情。
谁能帮我弄清楚将“CreateServiceSpecificCredential,DeactivateMFADevice”转换为“”“CreateServiceSpecificCredential”,“DeactivateMFADevice””的方法(每个值用双引号括起来,整个字符串用单引号括起来
我一直觉得我没有以正确的顺序在上面的代码中正确编写内部函数。
解决方案
如果有人仍在寻找如何实现它。这是 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"
推荐阅读
- typo3 - TYPO3: tx_news 修改新闻表格
- ios - 如何滑过 1 UITableView 和 UICollectionView
- string - Bash 将数据集拆分为每对 1 行
- python - 没有外键的 Django Admin Inline
- php - php - 当同一服务器上的另一个项目运行巨大的数据库作业时,laravel 丢失了登录会话
- java - IntelliJ 和 WebStorm 打开文件更改
- amazon-web-services - 在 Athena 中执行命名查询
- arrays - 有条件地投影匹配的数组项
- symfony - Symfony formbuilder DateTime 显示错误的日期
- laravel - Laravel 为更新方法传递 2 个参数