【发布时间】:2020-03-18 19:10:04
【问题描述】:
我正在编写一个微服务,我的 lambda 处理程序在请求的主体中采用 JSON 并构建一个 Jinja2 模板。我的 Lambda 函数工作正常并返回状态代码 200,但是当我通过 API 网关调用该函数时,我收到 502 响应。
def lambda_handler(event, context):
try:
file_object = s3.get_object(Bucket= 'bucket_name', Key='object_name')
file_content = file_object["Body"].read().decode('utf-8')
template = Template(file_content)
rendered_template = template.render(resume = request_body)
# Do some logic to place render in s3 and get path
response = {
'statusCode': 200,
'header': {'Content-Type': 'application/json'},
'body': 'path to file'
}
return response
except Exception as e:
print(e)
raise e
我使用的请求正文类似于:
{
"username": "john-doe",
"location": "US",
.
.
.
}
我收到的响应错误是:
{
"errorMessage": "'str object' has no attribute 'lastName'",
"errorType": "UndefinedError",
"stackTrace": [
" File \"/var/task/resume_service.py\", line 39, in lambda_handler\n raise e\n",
" File \"/var/task/resume_service.py\", line 25, in lambda_handler\n generate = template.render(resume=request_body)\n",
" File \"/var/task/jinja2/asyncsupport.py\", line 76, in render\n return original_render(self, *args, **kwargs)\n",
" File \"/var/task/jinja2/environment.py\", line 1008, in render\n return self.environment.handle_exception(exc_info, True)\n",
" File \"/var/task/jinja2/environment.py\", line 780, in handle_exception\n reraise(exc_type, exc_value, tb)\n",
" File \"/var/task/jinja2/_compat.py\", line 37, in reraise\n raise value.with_traceback(tb)\n",
" File \"<template>\", line 28, in top-level template code\n",
" File \"/var/task/jinja2/environment.py\", line 411, in getitem\n return obj[argument]\n"
]
}
为什么Lambda函数自己调用成功,通过API网关调用失败?
【问题讨论】:
-
我错过了什么吗?姓氏甚至不在函数内
-
你能添加你的 api getway image 你是如何创建它的吗,好像你没有在网关中添加参数
标签: python-3.x amazon-web-services aws-lambda aws-api-gateway