如何集成 API Gateway 调用带参数的 Lambda 函数?
Posted
技术标签:
【中文标题】如何集成 API Gateway 调用带参数的 Lambda 函数?【英文标题】:How to integrate API Gateway to call Lambda function with a parameter? 【发布时间】: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 函数
【参考方案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以上是关于如何集成 API Gateway 调用带参数的 Lambda 函数?的主要内容,如果未能解决你的问题,请参考以下文章