首页 > 解决方案 > 在 shell 或 Makefile (AWS) 中使用 JSON 字符串中的 HTML 文件内容

问题描述

我正在尝试使用 AWS apigateway CLI 为我的 API 中的一个端点设置集成响应映射模板。这种特殊情况涉及使用 text/html 作为我的 Content-Type,因此我的映射模板是原始 HTML 代码。根据某些情况,我想使用 CLI 将映射模板设置为不同的 HTML 代码。因此,我试图将指定文件中的 HTML 内容读取到--response-templateJSON 字符串中,该字符串将填充映射模板。

执行此操作的命令如下:

aws apigateway put-integration-response 
   --rest-api-id $(restApiId) --resource-id $(resourceId) \
   --http-method POST --status-code 200 \
   --selection-pattern "" \
   --response-parameters '{"method.response.header.Content-Type":"'"'"'text/html'"'"'"}' \
   --response-templates '{"text/html": "<!DOCTYPE html><html lang="en"><body><p>Hello, world</p></body></html>"}'

我最初试图在 Makefile 中执行此操作,因此是变量,但我愿意创建一个 shell 脚本来实现相同的目标。我的 HTML 文件比上面的示例大得多,并且包含带有函数、括号、JSON 对象、大量样式表字符串等等的脚本——换句话说,许多字符需要转义。我无法手动更改 HTML 文件,也不确定是否可以使用转义字符对其进行修改,因为映射模板必须是正在呈现的 HTML 内容。

我是否可以将 HTML 文件的全部内容放入该 JSON 字符串的值部分?如果是这样,我怎样才能让它工作?

任何帮助表示赞赏。

标签: bashamazon-web-servicesshellmakefileaws-cli

解决方案


Simon 在使用 AWS CLI 方法时为此提供了一个可能的解决方案,但我以另一种方式解决了这个问题。

我决定将 Python 脚本与 AWS Python 开发工具包Boto3 一起使用。我使用 Python 的json库将 HTML 文件的内容转储为有效的 JSON 格式,使用json.dumps(). 我把它作为最终在下面的 Boto3 函数中使用的 JSON 对象的值,并在我发送它时对值进行了内联替换json.loads()。我按照此链接中关于如何将 html 源代码转换为 json 对象的最佳答案进行了操作。

我使用了 Boto3put_integration_response()函数并将 JSON 对象作为 发送--response-template,这对我有用。


推荐阅读