首页 > 解决方案 > python中的API网关格式错误的Lambda代理响应

问题描述

我用无服务器创建了一个 lambda 函数。我用 lambda 控制台测试了我的 lambda 函数,它运行良好。但是我在转换之前得到端点响应正文:null 并且由于配置错误而执行失败:当我尝试为此函数调用我的 API 端点时,Lambda 代理响应格式错误。

这是我的 serverless.yml

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/**

这是来自 xlsx_generator.py 的片段:

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
        }

我调用了我的端点,并添加了查询字符串参数:?start_date=2019-11-1&end_date=2019-11-30&output=reporthugree.xlsx

我不知道为什么当我的函数已经从此处返回格式为格式的响应时,我仍然收到格式错误的 Lambda 代理响应。我对整个 AWS 问题不熟悉,如果有问题请向我解释。

标签: amazon-web-servicesaws-lambdaaws-api-gatewaypython-3.7aws-serverless

解决方案


事实证明,我的处理函数,主函数,不包含生成函数的返回值,因此 lambda 给出空值作为响应。当集成代理尝试将其转换为 API Gateway 响应时,此空响应将导致格式错误的 lambda 代理响应。当您激活 Lambda 代理集成时,请确保您的函数始终根据this返回有效的响应格式。这将节省您的时间。

我发现我的问题与此重复


推荐阅读