Amazon web services python中API网关格式不正确的Lambda代理响应
我用serverless创建了一个lambda函数。我用lambda控制台测试了我的lambda函数,效果很好。但我在转换之前得到了端点响应正文:null,由于配置错误,执行失败:当我尝试调用此函数的API端点时,Lambda代理响应格式错误 这是我的无服务器.ymlAmazon web services python中API网关格式不正确的Lambda代理响应,amazon-web-services,aws-lambda,aws-api-gateway,python-3.7,aws-serverless,Amazon Web Services,Aws Lambda,Aws Api Gateway,Python 3.7,Aws Serverless,我用serverless创建了一个lambda函数。我用lambda控制台测试了我的lambda函数,效果很好。但我在转换之前得到了端点响应正文:null,由于配置错误,执行失败:当我尝试调用此函数的API端点时,Lambda代理响应格式错误 这是我的无服务器.yml org: orgname app: appname service: report provider: name: aws runtime: python3.7 stage: ${opt:stage,'dev'} tim
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问题还不熟悉,请向我解释是否有什么问题。事实证明,我的主函数handler函数不包含来自generate函数的返回值,因此lambda会给出null值作为响应。当集成代理尝试将此空响应转换为API网关响应时,此空响应将导致错误的lambda代理响应。激活Lambda proxy integration时,请确保您的函数始终根据返回有效的响应格式。这会节省你的时间 我发现我的问题有点重复