AWS Lambda和Gateway API集成,返回状态码500。

7

首先,我对AWS完全不熟悉。我正在尝试使用AWS Lambda和API网关来解决一个问题。

  1. 我创建了一个Python Lambda函数。它接收一些数据并根据一些条件返回一个基于string的字符串。类似下面这样:
def lambda_function(event, context):
    if event['some_property']:
        return "SUCCESS: Operation performed successfully."
    else
        return "ERROR: Operation failed."
  1. 在触发器下,我设置了一个网关API。

  2. 在创建的资源中,API网关服务配置了集成请求以传递到lambda函数。我测试了lambda函数,并且它正确地返回值。

  3. 但是,如果我用post请求curl API,它会返回服务器错误。消息如下:

{"message": "内部服务器错误"}

  1. 我尝试过改变一些东西。如果我从函数中返回一个空的json,并使用Content-Type为application/json的body映射模板并为其使用空的模型模板,则一切正常。

我猜,在集成响应部分我漏掉了一些东西。我希望如果操作成功执行,则返回200状态代码以及成功消息。


起初,我没有返回状态码,可以使用以下命令获取响应:aws lambda invoke --region=us-east-1 --function-name=$(terraform output -raw function_name) response.json - Henry S.
当我通过浏览器或Postman调用我的API时,我收到了“500内部服务器错误”。建议返回状态码。 - Henry S.
2个回答

2
执行 Lambda 函数后,您需要传递 statusCode。如果未传递,则 API 网关默认会触发 502 Bad Gateway
message = {
   'message': 'Execution started successfully!'
}
return {
    'statusCode': 200,
    'headers': {'Content-Type': 'application/json'},
    'body': json.dumps(message)
}

1
我建议首先使用“代理”Lambda集成。这种方法更易于配置和使用。以下是相关文档http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.htmlhttp://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html
但是,听起来您没有正确映射响应。从您的描述中很难说出问题所在,但您可以使用“Petstore API”示例查看响应应该是什么样子的。这可能有所帮助。您可以在“创建API”屏幕中看到该选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接