当前位置: 首页 > 知识库问答 >
问题:

python中API网关格式错误的Lambda代理响应

祁修平
2023-03-14

我用无服务器创建了一个lambda函数。我用lambda控制台测试了lambda函数,它工作得很好。但是,在转换之前,我得到了endpoint响应体:null和执行失败,原因是配置错误:当我试图为该函数调用APIendpoint时,错误的Lambda代理响应。

org: orgname
app: appname
service: report

provider:
 name: aws
 runtime: python3.7
 stage: ${opt:stage,'dev'}
 timeout: 120

role: arn:aws:iam::xxxxxxxx:role/rolexxxx

plugins:
 - serverless-python-requirements

functions:
 reportgen:
  handler: xlsx_generator.main
  events:
   - http:
      path: main
      method: get
      cors: true

custom:
 pythonRequirements:
  dockerizePip: true

package:
  exclude:
    - node_modules/**
    - venv/**
def main(event, context):
    log.basicConfig(level=log.DEBUG)

    if "queryStringParameters" in event.keys() and 'start_date' in event["queryStringParameters"].keys():
        if "end_date" in event["queryStringParameters"].keys():
            end_date = event["queryStringParameters"]['end_date']
        else:
            end_date = event["queryStringParameters"]['start_date']
        try:
            generate(event["queryStringParameters"]['start_date'],
                     end_date,
                     event["queryStringParameters"]['output'])
        except (ClientError, Exception, RuntimeError) as e:
            raise e
    else:
        body = json.dumps({
            "message": "Missing parameter",
            "event": event
        })
        return {
            "isBase64Encoded": False,
            "statusCode": 400,
            "headers": {
                "Access-Control-Allow-Origin": '*'
            },
            "body": body
        }

并且调用了查询字符串参数的endpoint:?start_date=2019-11-1&end_date=2019-11-30&output=reporthugree.xlsx

我不知道为什么我的函数已经以这里的格式返回了响应,但仍然得到了格式错误的Lambda代理响应。我对这整个AWS的事情是新的,如果有什么不对的,请向我解释。

共有1个答案

苏宾鸿
2023-03-14

结果表明,我的处理程序函数(main函数)不包含generate函数的返回值,因此lambda给出了空值作为响应。当集成代理尝试将其转换为API网关响应时,此空响应将导致错误的lambda代理响应。当您激活Lambda代理集成时,请确保您的函数始终根据此返回有效的响应格式。这会节省你的时间。

我发现我的问题有点重复了

 类似资料:
  • 我正在尝试使用AWS lambda设置一个hello world示例并通过api网关提供它。我单击了“创建Lambda函数”,它设置了api网关并选择了空白函数选项。我添加了在AWS网关上找到的lambda函数入门指南: 问题是,当我向它发出GET请求时,它会返回502响应{“message”:“Internal server error”}。日志显示“由于配置错误,执行失败:Lambda代理响应

  • 问题内容: 我正在尝试使用AWS Lambda建立一个hello world示例,并通过api网关为其提供服务。我单击了“创建Lambda函数”,这将设置api通道并选择了Blank Function选项。我添加了在AWS网关入门指南中找到的lambda函数: 问题是,当我向它发出GET请求时,它返回了502响应。并且日志显示“由于配置错误,执行失败:Lambda代理响应格式错误”。 问题答案:

  • 我试图用AWS lambda建立一个hello world示例,并通过api网关为其服务。我点击了“创建一个Lambda函数”,它设置了api网关,并选择了空白函数选项。我添加了在AWS网关入门指南上找到的lambda函数: 问题是,当我向它发出GET请求时,它返回502响应。日志上写着“由于配置错误执行失败:Lambda代理响应不正确”。

  • 我试图在aws.lamda-service上的node.js中创建函数,并在函数控制台进行测试,效果良好,但当调用api时,它不能导出到外部,api网关错误“malformed Lambda proxy response”状态错误502 有什么想法吗

  • 我正在使用API网关和AWS Lambda与另一个AWS Lambda函数进行交换。 我应该在初次请求插入数据后发送响应,无论是成功还是失败。我正在使用API网关的特定路由。 结构是这样的: 现在我不断得到502畸形Lambda代理响应,这在我的API测试日志中: 问题是我返回了一个真实的回应。如前所述,我将API网关与lambda API一起使用,这是一个处理API网关路由(如Express)的

  • 我创建了一个简单的lambda函数,具有以下代码。 它将与Amazon API网关连接。使用REST客户机能够获得成功 但是我仍然有200个HTTP状态代码。与这种选择模式相关的实际问题是什么?