我在AWS中创建了一个简单的lambda函数,从DynamoDB返回列表。我还创建了API来触发lambda函数。当我在AWS控制台中进行测试时,该函数可以正常工作。但是当我在邮递员中测试这个功能时,我总是得到502坏网关下面的错误。({“消息”:“内部服务器错误”)}
以下是node.js中的函数:
const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();
/**
* Provide an event that contains the following keys:
*
* - operation: one of the operations in the switch statement below
* - tableName: required for operations that interact with DynamoDB
* - payload: a parameter to pass to the operation being performed
*/
exports.handler = async (event) => {
const operation = event.operation;
const payload = event.payload;
if (event.tableName) {
payload.TableName = event.tableName;
}
switch (operation) {
case 'create':
return await dynamo.putItem(payload).promise();
case 'read':
return await dynamo.getItem(payload).promise();
case 'update':
return await dynamo.updateItem(payload).promise();
case 'delete':
return await dynamo.deleteItem(payload).promise();
case 'list':
return await dynamo.scan(payload).promise();
case 'echo':
return payload;
case 'ping':
return 'pong';
default:
throw new Error(`Unrecognized operation "${operation}"`);
}
};下面是生成API网关端点的详细信息。
API endpoint: https://iabzqisam7.execute-api.us-east-1.amazonaws.com/test/moneyAppDynamoDBOperationsLambda
Authorization: NONE
Method: ANY
Resource path: /moneyAppDynamoDBOperationsLambda
Stage: test下面是我如何尝试使用Postman测试API:
Postman URL(Get) : https://iabzqisam7.execute-api.us-east-1.amazonaws.com/test/moneyAppDynamoDBOperationsLambda
Headers: Key: content-type, Value: application/json
Body (raw) :
{
"operation": "list",
"tableName": "Advertiser",
"payload": {
"TableName": "Advertiser"
}
}它在AWS控制台中运行得非常好。
知道为什么我在从邮递员打API网关的时候一直收到502个坏网关错误吗?
发布于 2019-04-02 19:56:54
502坏网关异常,通常用于从Lambda代理集成后端返回的不兼容输出,有时用于重负载导致的无序调用。
API getway输出不会告诉您问题与Lambda错误、API getway或策略问题有关。
API网关返回502,这意味着它不理解Lambda返回的输出,并给您{“message”:“内部服务器错误”} 502。
调试使用API getway上的启用日志记录
创建新的IAM角色,允许API将日志推送到CloudWatch。随函附上以下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:GetLogEvents",
"logs:FilterLogEvents"
],
"Resource": "*"
}
]
}信任策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}在API网关控制台->转到->添加API网关的ARN -CloudWatch日志记录角色->‘保存’
进入API的阶段。在“CloudWatch设置”下,选择“启用CloudWatch日志”。将“日志级别”设置为“信息”。选择“记录完整请求/响应数据”。
请检查日志和共享错误日志。
如果函数输出是一种不同的格式或格式错误,API网关返回一个502坏网关错误响应。
https://stackoverflow.com/questions/55481238
复制相似问题