【问题标题】:How to integrate API Gateway to call Lambda function with a parameter?如何集成 API Gateway 调用带参数的 Lambda 函数?
【发布时间】:2021-02-08 03:04:55
【问题描述】:

我有一个将文件上传到 S3 的反应应用程序。当用户按下按钮从文件中提取文本时,应用程序将调用 GET 到 API Gateway 并将文件名作为参数发送。这将触发 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

我读到的每篇关于这个错误的帖子都说问题是我的 HTTP 方法必须是 POST,但它是吗?在我的设置截图中:

Screenshot of my API integration request


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

【问题讨论】:

  • 什么是myLambdaRole
  • lambda 函数的执行角色。它具有完整的 lambda 和 cloudwatch 访问权限,并允许调用 lambda 函数

标签: amazon-web-services aws-lambda aws-api-gateway api-gateway


【解决方案1】:

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

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

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

【讨论】:

  • 你有什么理由使用AWS Service集成类型而不是Lambda集成类型
  • 嗨,是的,使用它而不是 lambda 集成的原因是 AWS 在教程中做了它,所以我认为它会“更正确”
  • 您是否检查了 lambda 的 cloudwatch 日志,请求是否到达那里
  • 太棒了。我将其更改为 Lambda 集成,并且可以正常工作。谢谢阿伦!!您必须帮助 AWS 编写更好的教程! xD
  • 由于我的名声,我无法为您的答案投票,但我确实尝试过投票xD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 2018-01-23
  • 2020-08-21
  • 2017-06-03
相关资源
最近更新 更多