AWS-Lambda执行失败



我对编码比较陌生。因此,如果已经有100个帖子,我很抱歉。

我的问题如下:我想简单地使用Lambda和Api网关查询我的DynamoDb。

不幸的是,我收到以下错误消息:

Tue May 18 11:58:37 UTC 2021 : Endpoint response body before transformations: {"errorType":"MultipleValidationErrors","errorMessage":"There were 4 validation errors:n* MissingRequiredParameter: Missing required key 'TableName' in paramsn* UnexpectedParameter: Unexpected key 'ExpressionAttributenames' found in paramsn* UnexpectedParameter: Unexpected key 'ExpressionAttributValues' found in paramsn* UnexpectedParameter: Unexpected key 'Tablename' found in params","trace":["MultipleValidationErrors: There were 4 validation errors:","* MissingRequiredParameter: Missing required key 'TableName' in params","* UnexpectedParameter: Unexpected key 'ExpressionAttributenames' found in params","* UnexpectedParameter: Unexpected key 'ExpressionAttributValues' found in params","* UnexpectedParameter: Unexpected key 'Tablename' found in params","    at ParamValidator.validate (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:40:28)","    at Request.VALIDATE_PARAMETERS (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:132:42)","    at  [TRUNCATED]
Tue May 18 11:58:37 UTC 2021 : Lambda execution failed with status 200 due to customer function error: There were 4 validation errors:
* MissingRequiredParameter: Missing required key 'TableName' in params
* UnexpectedParameter: Unexpected key 'ExpressionAttributenames' found in params
* UnexpectedParameter: Unexpected key 'ExpressionAttributValues' found in params
* UnexpectedParameter: Unexpected key 'Tablename' found in params. Lambda request id: 99851ec8-e332-46e2-bd62-bb88626e15de
Tue May 18 11:58:37 UTC 2021 : Method completed with status: 502

这是lambda代码:

const AWS = require('aws-sdk');
exports.handler = async(event) => {
var queryStringParameters = null;
var statusCode = 500;
var content = '';
console.log(JSON.stringify(event));
if (event.queryStringParameters != null) {
queryStringParameters = event.queryStringParameters;
}
if (queryStringParameters != null) {
var dynamodb = new AWS.DynamoDB();
statusCode = 200;
}
if (queryStringParameters.country != null) {
if (queryStringParameters.city != null) {
console.log(queryStringParameters.country);
// dynamo scan params aufbauen
var params = {
ExpressionAttributenames: {
"#ID": "id",
"#FO": "form",
"#NA": "name",
"#LA": "langu",
"#CI": "city",
"#PO": "postcode",
"#EM": "email",
"#RE": "region",
"#TE": "telephone",
"#CO": "country"
},
ExpressionAttributValues: {
":a": {
S: queryStringParameters.country
},
":b": {
S: queryStringParameters.country
}
},
FilterExpression: "country = :a AND city = :b",
ProjectionExpression: "#ID, #FO, #NA, #LA, #CI, #PO, #EM, #RE, #TE, #CO",
Tablename: "customer"
};
console.log(JSON.stringify(params));
var dbResponse = await dynamodb.scan(params, function(err, data) {
if (err) {
console.log(err, err.stack);
content = 'Error';
}
else {
console.log(data);
content = data;
}
}).promise();
}
}
const response = {
statusCode: statusCode,
body: JSON.stringify(content),
};
return response;
};

我认为这只是Lambda函数中的一个小错误。非常感谢。

出色的开局!看起来有一些参数键不正确。错误消息清楚地指出4…

  1. 参数中缺少必需的键"TableName"。应将Tablename重命名为Tablename
  2. 在参数中找到意外的键"ExpressionAttributenames"。ExpressionAttributenames应重命名为ExpressionAttributenames
  3. 在参数中找到意外的键"ExpressionAttributionValues"。ExpressionAttributeValues应重命名为ExpressionAttributeValue
  4. 在params中找到意外的键"Tablename"。一旦你修复了数字1,这种情况就会消失

例如,我认为param对象应该是这样的。。。

var params = {
ExpressionAttributeNames: {
"#ID": "id",
"#FO": "form",
"#NA": "name",
"#LA": "langu",
"#CI": "city",
"#PO": "postcode",
"#EM": "email",
"#RE": "region",
"#TE": "telephone",
"#CO": "country"
},
ExpressionAttributeValues: {
":a": {
S: queryStringParameters.country
},
":b": {
S: queryStringParameters.country
}
},
FilterExpression: "country = :a AND city = :b",
ProjectionExpression: "#ID, #FO, #NA, #LA, #CI, #PO, #EM, #RE, #TE, #CO",
TableName: "customer"
};

最新更新