4

我已经使用 SAM 规范配置了与 API Gateway 的 lambda 代理集成,并通过传递 X-Amz-Invocation-Type: "'Event'" 标头异步调用 lambda

  ApiGateway:
      Type: AWS::Serverless::Api
      Properties:
        StageName: prod
        DefinitionBody:
          swagger: "2.0"
          info:
            title:
              Ref: AWS::StackName
            description: API endpoint for invoking LambdaFunction
            version: 1.0.0
          paths:
            /items:
              post:
                consumes: ["application/json"]
                produces: ["application/json"]
                responses: {}
                x-amazon-apigateway-integration:
                  type: "aws_proxy"
                  uri:
                    Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations
                  passthroughBehavior: "when_no_match"
                  httpMethod: "POST"
                  requestParameters:
                      integration.request.header.X-Amz-Invocation-Type: "'Event'"

问题是 lambda 返回空响应(调用异步),因此 API Gateway 抛出以下错误

2018 年 11 月 14 日星期三 08:03:14 UTC:由于配置错误,执行失败:Lambda 代理响应格式错误 2018 年 11 月 14 日星期三 08:03:14 UTC:方法完成,状态:502

这种行为是预期的吗?我必须明确定义响应吗?我不想总是抛出 200,因为我也想发送错误的请求和未经授权的错误。避免这个问题的解决方案是什么?

4

1 回答 1

0

AWS Api Gateway不允许这样做。

在使用异步集成时,必须取消选中它以使其非常具体。 在此处输入图像描述

另外,您实际上不需要在请求中传递 X-Amz-Invocation-Type 标头。

不幸的是,异步调用不适用于 lambda-proxy (aws_proxy) 集成类型。

于 2020-12-30T11:45:13.780 回答