AWS Lambda和Gateway API Integration,返回状态代码500

时间:2016-12-12 15:30:46

标签: amazon-web-services lambda aws-lambda aws-api-gateway

首先,我是整个AWS本身的新手。我正在尝试使用AWS lambda和API Gateway解决问题。

  1. 我创建了一个python lambda函数。它需要一些数据并根据某些条件返回string。如下所示:
  2. 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. 但是,如果我卷曲API发出帖子请求,它会返回服务器错误。消息是这样的。

    4.   

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

      1. 我试着玩。如果我从函数返回一个空的json并创建一个内容类型为application/json的正文映射模板并使用空模型模板,那么它可以正常工作。
      2. 我想,我在Integration Response部分遗漏了一些东西。我想要的是,如果操作成功执行,则返回200状态代码和成功消息。

2 个答案:

答案 0 :(得分: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”屏幕中看到该选项。

答案 1 :(得分:1)

执行Lambda函数后需要传递statusCode。如果您没有通过它,API网关默认会触发502 Bad Gateway

message = {
   'message': 'Execution started successfully!'
}
return {
    'statusCode': 200,
    'headers': {'Content-Type': 'application/json'},
    'body': json.dumps(message)
}