【问题标题】:aws-serverless-lambda: "Internal server error"aws-serverless-lambda:“内部服务器错误”
【发布时间】:2021-03-06 03:38:20
【问题描述】:

我是无服务器 lambda 函数的新手。我使用 lambda 创建了一个帖子请求。我将我的应用程序部署到AWS。我正在使用 Postman 测试我的应用程序。我厌倦了我的发帖请求,我得到了internal server error.。我也在 api-gateway 中测试了这个错误:

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);
  }
};

【问题讨论】:

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


    【解决方案1】:

    格式错误的 Lambda 代理响应

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

    1. 在您的 lambda 中打印出请求正文,让自己确信 lambda 代码正在执行并且事件如您所愿。
    2. 如果您的 lambda 失败,您不会返回响应。尝试在你的 catch 块中返回一个错误
      try {
        await dynamoDb.put(params).promise();
        return {
          statusCode: 200,
          body: JSON.stringify(requestBody),
        };
      } catch (error) {
        return {
          statusCode: 500,
          body: JSON.stringify(error),
        };
      }
    

    【讨论】:

    • 谢谢你!我做了一个帖子请求`catch (error) { console.log(error); }`,它的工作原理。那怎么可能呢?
    • 我不确定我是否理解你的问题,你能改写一下吗?如果您对 DynamoDB 的调用成功,您的 lambda 将返回正确的格式并且永远不会进入 catch 块。如果 DynamoDB 操作失败(我怀疑正在发生这种情况),您的 lambda 将不会返回格式正确的响应。
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 2020-07-07
    • 2023-02-16
    • 1970-01-01
    • 2018-08-06
    • 2018-03-19
    • 2019-10-26
    • 2019-12-10
    相关资源
    最近更新 更多