“传入事件不是来自 Amazon API Gateway 或应用程序负载均衡器的有效请求”lambda Postman

问题描述 投票:0回答:2

我正在尝试做最基本的概念验证 api,但每次我从 Postman 调用我的 lambda 函数 URL 时,我都会得到

com.amazonaws.serverless.exceptions.InvalidRequestEventException: 
    The incoming event is not a valid request from Amazon API Gateway or an Application Load Balancer

我的身份验证类型:NONE,CORS:“*”,允许方法:“*”

政策:

{
      "Sid": "FunctionURLAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-1:11111:function:my-api",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "NONE"
        }
      }
    }

我发现这个问题,它说“框架期望一个形状像 API 网关或 ALB 代理事件的事件。”并链接到此文档但是,我将如何在 Postman 中执行此操作?

这个 AWS Doc 建议我不需要这样做:

如果您的函数 URL 使用 NONE 身份验证类型,则不必使用 SigV4 签署您的请求。您可以使用 Web 浏览器、curl、Postman 或任何 HTTP 客户端调用您的函数。

但是,问题可能在于将请求转换为 Amazon API Gateway 有效负载模式?来自同一份文件:

当客户端调用您的函数 URL 时,Lambda 将请求映射到事件对象,然后再将其传递给您的函数。然后,您的函数的响应将映射到 Lambda 通过函数 URL 发送回客户端的 HTTP 响应。

请求和响应事件格式遵循与 Amazon API Gateway 有效负载格式版本 2.0 相同的架构。

有人知道我需要更改什么才能从浏览器/邮递员调用简单的 GET 请求吗?

amazon-web-services authentication aws-lambda postman policy
2个回答
0
投票

如果您直接调用 AWS Lamda 函数,则需要遵守许多约定(内容类型为 applicatin/json,在调用文档中为每个请求结构配置body)。

这是因为 lambda 实际上是一个可以调用的通用函数,并且对于如何传递信息和参数有约定。

但是,更典型的做法是配置 api 网关服务来调用 lambda。有关将 api gw 配置为 lambda 的完整

文档很长,但有一个 快速入门。注意:许多想要以代码形式管理此配置的人会在所有这些概念之上设置一个配置系统,例如“serverless.com”,它通过 cloudformation 配置 lambda 和 api gw,其中输入通过 .yaml 进行控制。文件存储在您的代码库中 API 网关配置(手动或通过像 serverless.com 这样的系统)实际上只是将 http 调用的常用结构(GET 与 POST、查询字符串、路径等)映射到 json 正文中的通用函数调用结构lambda 调用需要 .同样,映射或嵌套存在的原因是还有其他触发 lambda 的调用结构(例如 dynamodb、异步队列等中的更改)

您没有提及您正在使用哪种语言。 在尝试 Maven 原型

0
投票
时,我遇到了完全相同的错误。 问题在于,SpringBootLambdaContainerHandler 是一个通用类,需要 AwsProxyRequest 和 AwsProxyResponse,而我们使用静态方法

.getAwsProxyHandler(Application.class) 获取此处理程序。 因此,解决方案就是使用静态方法 .getHttpApiV2ProxyHandler(Application.class)

 获取处理程序,这将构造一个 
SpringBootLambdaContainerHandler<HttpApiV2ProxyRequest, AwsProxyResponse>
 处理程序。
	

© www.soinside.com 2019 - 2024. All rights reserved.