如何通过 API 网关将 JSON 文件传递​​给 AWS Lambda?

How to pass a JSON file to a AWS Lambda through an API Gateway?

我在 AWS 上有一个处理 JSON 文件的 lambda 运行。我想通过在 API 网关上配置的 REST 接口,使用 curl 从命令行传递 JSON 文件,例如

curl -X POST -H "x-api-key: MyAPIKey" -H "Content-Type: application/json" -d @myFile.json https://my-api.us-east-1.amazonaws.com/default/MyLambda

我已经创建了一个 API 网关,并将其添加为 lambda 的触发器,但是当请求方法被触发时,JSON 文件的内容已添加到JSON 对象的“正文”属性。

是否可以将文件直接传递给 lambda?

如果您在 event.body 中收到请求,则表示您正在使用 Lambda 代理集成。

您正在寻找的是非代理集成或自定义集成。有关如何设置的更多详细信息 here。取消选中此选项。然后您将必须配置请求和响应映射模板。

如果 json 如下所示 -

{
  "attr1": "v1",
  "attr2": "v2"
}

那么 application/json 的映射模板将如下所示 -

#set($inputRoot = $input.path('$'))
{
  "attr1": "$inputRoot.attr1",
  "attr2": "$inputRoot.attr2",
}

然后在Lambda函数中,属性可以直接访问为event.attr1,event.attr2等

然后您可以使用相同的 cURL 命令调用 API 网关。