Amazon web services aws无服务器lambda:“;“内部服务器错误”;

Amazon web services aws无服务器lambda:“;“内部服务器错误”;,amazon-web-services,aws-lambda,amazon-dynamodb,aws-api-gateway,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Aws Api Gateway,我不熟悉无服务器lambda功能。我使用lambda创建了一个post请求。我将我的应用程序部署到AWS。我正在使用Postman测试我的应用程序。我厌倦了我的post请求,我得到了内部服务器错误。。我还在api网关中进行了测试,发现以下错误: Fri Mar 05 19:09:33 UTC 2021 : Endpoint response body before transformations: null Fri Mar 05 19:09:33 UTC 2021 : Execution fai

我不熟悉无服务器lambda功能。我使用lambda创建了一个post请求。我将我的应用程序部署到AWS。我正在使用Postman测试我的应用程序。我厌倦了我的post请求,我得到了
内部服务器错误。
。我还在api网关中进行了测试,发现以下错误:

Fri Mar 05 19:09:33 UTC 2021 : Endpoint response body before transformations: null
Fri Mar 05 19:09:33 UTC 2021 : Execution failed due to configuration error: Malformed Lambda proxy response
Fri Mar 05 19:09:33 UTC 2021 : Method completed with status: 502
我不明白我做错了什么。这是我的yaml文件发布请求事件

  createBeers:
    handler: handlers/createBeers.createBeers
    events:
      - http:
          path: createBeers
          method: post
          cors: true
这是我的lambda函数

'use strict';
const AWS = require('aws-sdk');

const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.createBeers = async event => {
  const requestBody = JSON.parse(event.body);
  const params = {
    TableName: "tablename",
    Item: {
      beer_name: requestBody.beer_name,
      beer_type: requestBody.beer_type,
      beer_img_url: requestBody.beer_img_url,
      beer_description: requestBody.beer_description,
      alcohol_per: requestBody.alcohol_per
    }
  };

  try {
    await dynamoDb.put(params).promise();
    return {
      statusCode: 200,
      body: JSON.stringify(requestBody),
    };
  } catch (error) {
    console.log(error);
  }
};
格式错误的Lambda代理响应

听起来您的lambda没有返回正确的响应。一些故障排除建议:

  • 在lambda中打印出请求主体,使自己确信lambda代码正在执行,事件正如您所期望的那样
  • 如果lambda失败,则不会返回响应。还可以尝试在catch块中返回错误

  • 返回结构
    {statusCode:200,body:JSON.stringify(requestBody)}
    很好。您是否可能因为等待抛出而遇到
    catch
    处理程序?你查过Lambda函数日志了吗?谢谢!我做了一个post请求'catch(error){console.log(error);}',它可以正常工作。那怎么可能呢?我不太明白你的问题,你能重新措辞吗?如果对DynamoDB的调用成功,lambda将返回正确的格式,并且永远不会进入catch块。如果DynamoDB操作失败(我怀疑是这样),lambda将不会返回正确格式的响应。
      try {
        await dynamoDb.put(params).promise();
        return {
          statusCode: 200,
          body: JSON.stringify(requestBody),
        };
      } catch (error) {
        return {
          statusCode: 500,
          body: JSON.stringify(error),
        };
      }