首页 > 解决方案 > 使用 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 对象作为环境变量?

标签: amazon-web-servicesamazon-cloudwatch

解决方案


检查这个...CodeBuild 目标支持 StartBuild API 允许的所有参数。您需要在 JSON 字符串中使用 environmentVariablesOverride。

{"environmentVariablesOverride": [ {"name":"ZIPFILE", "value":<zip_file>}]}

请避免在环境名称中使用“_”。


推荐阅读