amazon-web-services - 使用 CloudWatch 事件:如何将 JSON 对象作为环境变量传递给 CodeBuild
问题描述
摘要:我无法使用 CloudWatch 目标输入转换器指定 JSON 对象,以便将对象内容作为环境变量传递给 CodeBuild 项目。
背景:当 S3 存储桶收到任何新对象时,我会触发 AWS CodeBuild 作业。我已为 S3 操作启用 CloudTrail,以便我可以使用 CloudWatch 规则,该规则将我的 S3 存储桶作为事件源,并将 CodeBuild 项目作为目标。
如果我使用输入转换器设置目标的“配置输入”部分,我可以使用以下格式从事件中获取单个“原始”值:
输入路径文本框:
{"zip_file":"$.detail.requestParameters.key"}
输入模板文本框:
{"environmentVariablesOverride": [ {"name":"ZIP_FILE", "value":<zip_file>}]}
如果我使用“简单”的单个字符串,这很好用。
但是,例如,如果我希望获取整个“资源”键,它是一个 JSON 对象,我需要了解其中的每个键和对象结构,并为每个键/值手动重新创建结构一对。
例如,事件中的资源元素是:
"resources": [
{
"type": "AWS::S3::Object",
"ARN": "arn:aws:s3:::mybucket/myfile.zip"
},
{
"accountId": "1122334455667799",
"type": "AWS::S3::Bucket",
"ARN": "arn:aws:s3:::mybucket"
}
],
我希望 CodeBuild 中的构建规范中的代码能够完成繁重的工作并解析 JSON 数据。
如果我在输入路径文本框中指定:
{"zip_file":"$.detail.resources"}
然后 CodeBuild 项目永远不会被触发。
有没有办法将由特定键标识的整个 JSON 对象作为环境变量?
解决方案
检查这个...CodeBuild 目标支持 StartBuild API 允许的所有参数。您需要在 JSON 字符串中使用 environmentVariablesOverride。
{"environmentVariablesOverride": [ {"name":"ZIPFILE", "value":<zip_file>}]}
请避免在环境名称中使用“_”。
推荐阅读
- java - LinkedList addLast 函数替换列表中的其他值
- javascript - 将父类实例注入模块导出函数?
- excel - 如何获取用户从数据验证列表中选择的值?
- regex - HaProxy 路径正则表达式未按预期工作
- android - 通过firebase分析点击流数据
- python - 如何在 Python 中将未转义的文本添加到 LXML Etree?
- ios - 应用关闭时阻止动画完成
- sql-server - SQL:触发器没有收集每一行
- flex-lexer - 写我想要的,但必须在某些标记之前或之后
- javascript - 我可以强制 chrome 或其他浏览器使用旧版本的 javascript 吗?