代码之家  ›  专栏  ›  技术社区  ›  plutownium2

尽管遵循了正确的响应格式,但我还是收到了错误“由于配置错误而执行失败:Lambda代理响应格式不正确”

  •  0
  • plutownium2  · 技术社区  · 2 年前

    我正试图通过POST请求从AWS Lambda中获取一个随机数。我在这里有额外的挑战,因为我是lambdas和serverless的新手。我仍在学习AWS UI的所有细节。

    这一切都始于昨天 curl https://ix14jbto25.execute-api.us-east-1.amazonaws.com/dev/users/random 回应为 {"message": "Internal server error"} 。我尝试在中将方法从GET更改为POST serverless.yml 文件,认为问题可能是我试图用GET请求发回一个正文。不是这样。

    我还尝试了异步/非异步的各种组合,返回对象或使用回调。

    后来,有人告诉我在API网关UI中查找测试功能。我使用了测试,发现了以下额外线索:

    Tue Oct 17 15:53:56 UTC 2023 : Endpoint response body before transformations: null
    Tue Oct 17 15:53:56 UTC 2023 : Execution failed due to configuration error: Malformed Lambda proxy response
    Tue Oct 17 15:53:56 UTC 2023 : Method completed with status: 502
    

    a. bunch 属于 different 岗位 about this bug 讨论返回值或回调格式的解决方案。但我的格式正确:

    export const getRandomNum = (event, context) => {
      try {
        const number = Math.random() * 100;
        console.log(number, "199");
        return {
          statusCode: 200,
          headers: { headers },
          isBase64Encoded: false,
          body: JSON.stringify({ message: "look, a cat" }),
        };
      } catch (err) {
        return {
          statusCode: 400,
          headers: { headers },
          isBase64Encoded: false,
          body: JSON.stringify({ message: "look, a dog" }),
        };
      }
    };
    

    除非,也许,我在不知不觉中犯了一个错误?

    我可以通过CloudWatch日志来确认,通过将控制台日志放在返回语句/回调执行之前,就可以到达它们。

    我的一些相关部分 serverless.yml

    service: pluto-lama-users-service
    
    frameworkVersion: "3"
    
    provider:
      name: aws
      runtime: nodejs18.x
    
    functions:
      getRandomNum:
        handler: entrypoint.getRandomNum
        events:
          - http:
              path: /users/random
              method: post
    

    编辑:解决方案最终是我需要的 二者都 (a)响应中的特定形状,即 {statusCode: someStatusCode, headers, isBase64Encoded: true|false, body} (b) 任意使用 async + return {} 或非异步+ callback(null, {})

    现在解决了!

    0 回复  |  直到 2 年前