如何集成API网关来调用带参数的Lambda函数?

How to integrate API Gateway to call Lambda function with a parameter?

我有一个将文件上传到 S3 的 React 应用程序。当用户按下按钮从文件中提取文本时,应用程序将调用 GET 到 API 网关并将文件名作为参数发送。这将触发 lambda 函数从 S3 上的文件中提取文本。但是我坚持需要调用 Lambda 函数的 API。

我遵循了 AWS 的本教程:https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html#api-as-lambda-proxy-expose-get-method-with-query-strings-to-call-lambda-function

这是我测试 API 调用时得到的响应:

Received response. Status: 403, Integration latency: 3 ms
Sun Oct 25 13:29:26 UTC 2020 : Endpoint response headers: {Date=Sun, 25 Oct 2020 13:29:26 GMT, Content-Length=130, Connection=keep-alive, x-amzn-RequestId=d8eab391-05a7-44f2-9721-ce67939a9514}
Sun Oct 25 13:29:26 UTC 2020 : Endpoint response body before transformations: <AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>

Sun Oct 25 13:29:26 UTC 2020 : Method response body after transformations: <AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>

Sun Oct 25 13:29:26 UTC 2020 : Method response headers: {X-Amzn-Trace-Id=Root=1-5f957db6-4e36be9def67f8157b8467c5, Content-Type=application/json}
Sun Oct 25 13:29:26 UTC 2020 : Successfully completed execution
Sun Oct 25 13:29:26 UTC 2020 : Method completed with status: 200

我读到的关于此错误的每一个 post 都说问题是我的 HTTP 方法必须是 POST,但它是吗?在我的设置屏幕截图中:

Screenshot of my API integration request


所以我的问题是,我该如何解决这个问题,以便我的 API 可以调用我的 Lambda 函数并将文本 return 返回给应用程序?

AWS Service 集成类型是将 api 网关与任何 AWS 服务集成。尽管 lambda 是 AWS 的一项功能,但有一个 Lambda 集成类型专门用于集成 lambda。我认为 lambda 集成类型适合这种情况。

您也可以在 GET 请求中传递文件名(例如作为查询字符串参数)。

如果您想使用 AWS Service 集成类型,请确保为 api 网关添加调用 lambda 的权限。您需要在 Lambda IAM 角色的信任策略中添加此权限。