如何在Cloud Custodian webhook中拼接字符串与JMESPath查询构建请求体
解决方法
你之前写法不生效的原因是拆分了反引号的作用范围,Cloud Custodian只会把反引号包裹的内容识别为JMESPath表达式,反引号外的内容会被当做普通JSON字符串处理,两者不会自动拼接。
你只需要把完整的字符串拼接逻辑放在同一对反引号内,使用JMESPath内置的字符串拼接语法即可实现需求,正确的webhook配置如下:
- type: webhook url: https://api.datadoghq.eu/api/v1/events method: POST headers: DD-API-KEY: '`{{ dd_api_key }}`' body: |- { "title": "nutkin news", "text": "squirrel found in account", "tags": [ `'resource_name:' + resource.Name`, `'policy_name:' + policy.name`, `'account_id:' + account_id` ] }
如果担心符号冲突,也可以用JMESPath的join函数实现拼接,效果完全一致:
"tags": [ `join(':', ['resource_name', resource.Name])`, `join(':', ['policy_name', policy.name])`, `join(':', ['account_id', account_id])` ]
注意事项
- 反引号内的字符串字面量需要用单引号包裹,避免和外层JSON的双引号产生转义冲突
- 所有需要Custodian解析的变量逻辑都要放在反引号范围内,不要拆分反引号和静态字符串
内容的提问来源于stack exchange,提问作者mikejmcfarlane
相关产品推荐
相关产品推荐

