我正试图通过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, {})
现在解决了!