【发布时间】:2018-07-04 19:25:57
【问题描述】:
我们有一个 AWS Lambda 函数,它可以为我们的工程师动态构建测试环境,以便通过 GitHub 拉取请求测试他们的代码。
这个 Lambda 函数是使用 GitHub webhooks 调用的,由此 Github 会发布为该特定产品配置测试环境所需的所有信息。
目前,AWS Lambda 函数被硬编码以解析 POST 数据并构建测试环境。然而,随着被测试产品范围的增加和测试环境的范围变得更加多样化,我们希望摆脱硬编码的方法;也是为了便于管理。
我想要做的是加载一个配置文件,最好是在 JSON 中,并将 GitHub POST 数据中的一些数据应用到配置文件中,本质上是将数据注入到 JSON 配置中。
我不知道如何处理这个问题。我在这里看到了一个问题,想要做类似的事情,但是在 Java 中: Inject dynamically generated data into JSON
最初我们的 Lambda 函数是用 Node.js 编写的,但我们已经开始转向 Go - 主要是因为这是一个有趣的新挑战。如果在 Node.js 中有解决方案,我会接受,但如果在 Go 中有可用的解决方案,那将是可取的。
编辑:
配置文件和 GitHub POST 数据有两种不同的结构。
GitHub POST 数据 (大量精简):
{
"action": "opened",
"number": 89,
"pull_request": {
"url": "https://api.github.com/repos/Owner/ExampleRepository/pulls/89",
"head": {
"repo": {
"id": 123454678,
"name": "ExampleRepository"
}
}
}
}
示例配置文件 (也精简了):
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": [GitHub Post data].pull_request.url,
"Resources": {
"ElasticBeanstalk": {
"Type": "AWS::ElasticBeanstalk::Environment",
"Properties": {
"ApplicationName": [GitHub Post data].pull_request.head.repo + [GitHub Post data].number,
"Description": [GitHub Post data].pull_request.url
}
}
}
}
配置文件和 GitHub POST 数据都比这复杂得多。此外,配置文件会多次引用 POST 数据的各个部分,有时需要连接多个值。
【问题讨论】:
-
您是只想将 json 视为文本并对其进行模板化处理,还是要操作更复杂的数据结构?无论哪种方式,解决方案似乎都很简单,您尝试过什么?
-
是的,我更愿意将 JSON 视为文本。除了能够在 JSON 配置文件中添加某种“链接”来引用来自 GitHub 的 JSON POST 数据之外,我不想做任何复杂的事情。在 Node.js 中,我尝试遍历 JSON 配置文件并执行查找和替换方法,或者将 JSON 配置文件作为模块动态加载并从 GitHub 传递 POST 数据;两者都很麻烦,而后者过于复杂。没有真正尝试过 Go 中的任何东西,因为我对它完全陌生,也不知道该语言能做什么。
标签: json node.js go config inject