我正在尝试通过lambda函数(通过无服务器构建)发送JSON响应,但它正在错误。
我正在创建响应:
response = {}
response["file_name"] = file_name
response["status"] = status
response["description"] = message
response["data"] = data
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
},
"body": json.dumps(response)
}
但是AWS仅返回:
{
"message": "Internal server error"
}
我正在打印该响应对象,它是:
{'isBase64Encoded': False, 'statusCode': 200, 'headers': {'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json'}, 'body': '{"file_name": "upload-4660557513950187006.csv", "status": "success", "description": "Success.", "data": ""}'}
当我通过API网关调用时,这是我得到的日志:
Thu Oct 05 16:21:15 UTC 2017 : Endpoint request body after transformations: {"resource":"/parse","path":"/parse","httpMethod":"POST","headers":null,"queryStringParameters":null,"pathParameters":null,"stageVariables":null,"requestContext":{"path":"/parse","accountId":"317910044022","resourceId":"xik9xe","stage":"test-invoke-stage","requestId":"test-invoke-request","identity":{"cognitoIdentityPoolId":null,"accountId":"317910044022","cognitoIdentityId":null,"caller":"AIDAJGNM4CLIWDKHDDV2U","apiKey":"test-invoke-api-key","sourceIp":"test-invoke-source-ip","accessKey":"ASIAJHGYEQDHKLLRWL6A","cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":"arn:aws:iam::317910044022:user/chase","userAgent":"Apache-HttpClient/4.5.x (Java/1.8.0_131)","user":"AIDAJGNM4CLIWDKHDDV2U"},"resourcePath":"/parse","httpMethod":"POST","apiId":"3gvwsa0cj2"},"body":"{nt"file_name": "upload-4660557513950187006.csv",nt"vendor": ""n}","isBase64Encoded":false}
Thu Oct 05 16:21:15 UTC 2017 : Sending request to https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:317910044022:function:PyParsingService-dev-parse/invocations
Thu Oct 05 16:21:16 UTC 2017 : Received response. Integration latency: 416 ms
Thu Oct 05 16:21:16 UTC 2017 : Endpoint response body before transformations: "{"isBase64Encoded": false, "statusCode": 200, "headers": {"Access-Control-Allow-Origin": "*", "Content-Type": "application/json"}, "body": "{\"file_name\": \"upload-4660557513950187006.csv\", \"status\": \"success\", \"description\": \"Success.\", \"data\": \"\"}"}"
Thu Oct 05 16:21:16 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=36059915-a9e9-11e7-8444-438990db7407, Connection=keep-alive, Content-Length=317, Date=Thu, 05 Oct 2017 16:21:15 GMT, X-Amzn-Trace-Id=root=1-59d65bfb-7000702549081b6682b894a9;sampled=0, Content-Type=application/json}
Thu Oct 05 16:21:16 UTC 2017 : Execution failed due to configuration error: Malformed Lambda proxy response
Thu Oct 05 16:21:16 UTC 2017 : Method completed with status: 502
对Python来说不是很有经验 - 任何帮助将不胜感激。据此,对于API网关,需要正确格式化响应。不知道为什么我的回应不符合API网关的寻找。
我弄清楚了我在做什么错。由于配置错误而导致的执行失败:畸形的lambda代理响应错误是引用了响应Lambda试图通过API Gateway返回的响应。无服务器自动使用Lambda代理集成。当我查看响应时,我注意到基本响应级别(例如"{"isBase64Encoded": false, "statusCode": 200, ...}
)的额外逃避,我相信这会触发错误。果然,当我深入研究时,我意识到我在创建响应后正在倾倒JSON(json.dumps()
),这引发了错误。
感谢您的回复。