-1
好吧,所以我试图发送一个Dynamo DB表名作为参数。我有以下LAMBDA定义:如何将Dynamo数据库表名称传递给AWS Lambda函数?
'use strict';
const AWS = require('aws-sdk');
const DOC = require('dynamodb-doc');
const docClient = new AWS.DynamoDB.DocumentClient({ region: 'eu-west-1' });
exports.handler = function(event, context, callback) {
// Set local variables to passed in variables
var dynamoDBReadFromTableName = event.dynamoDBReadFromTableName;
var dynamoDBReadFromPrimaryKeyValue = event.dynamoDBReadFromPrimaryKeyValue;
var dynamoDBTablePrimaryKeyName = event.dynamoDBTablePrimaryKeyName;
// Read MCP SKU data from MCPSKU-CustomsPartKey
// Create the Parameters that are used by the GET call
let dynamoDBTableReadFromParameters = {
TableName: dynamoDBReadFromTableName,
Key: {
dynamoDBTablePrimaryKeyName: dynamoDBReadFromPrimaryKeyValue
},
AttributesToGet: [
'CustomsPartKey',
'EffectiveDateCountryOfOrigin',
'ItemWeightLbs'
],
};
//Use the GET call to read the MCP SKU data
docClient.get(dynamoDBTableReadFromParameters, function(err, dataReadFromDynamoDbtable) {
if (err) {
console.log(err, err.stack);
} else {
console.log(dataReadFromDynamoDbtable)
}
});
};
我测试了这个没有传入AWS迪纳摩数据库表名 - 即dynamoDBTablePrimaryKeyName
,不得不 "footer": dynamoDBReadFromPrimaryKeyValue
用foobar的是实际迪纳摩DB名称,它只是花花公子。
当我试图用一个参数(使用相同的/正确的名称),我收到以下错误更换迪纳摩DB名称:
START RequestId: 835fa87b-fdde-11e6-9b5d-a35457d4e835 Version: $LATEST
2017-02-28T17:51:21.575Z 835fa87b-fdde-11e6-9b5d-a35457d4e835 { [ValidationException: The provided key element does not match the schema]
message: 'The provided key element does not match the schema',
code: 'ValidationException',
time: Tue Feb 28 2017 17:51:21 GMT+0000 (UTC),
requestId: 'T37SQIF62TFUFCQUMJM7DL4AJBVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 0 } 'ValidationException: The provided key element does not match the schema
at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:43:27)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:671:14)
at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:673:12)
at Request.callListeners (/var/runtime/node_modules/aws- sdk/lib/sequential_executor.js:115:18)'
END RequestId: 835fa87b-fdde-11e6-9b5d-a35457d4e835
REPORT RequestId: 835fa87b-fdde-11e6-9b5d-a35457d4e835 Duration: 236.73 ms Billed Duration: 300 ms Memory Size: 512 MB Max Memory Used: 30 MB
人有一个想法? AWS Lambda是否让表名不被传入?
这与“AWS Lambda不让表名传入”无关。您需要从调试代码开始。最起码添加一行记录'dynamoDBReadFromTableName'的值是什么。我猜你在调用Lambda函数的时候做错了什么,所以'event.dynamoDBReadFromTableName'值没有被填充。您是直接调用Lambda函数还是使用API网关? –
我是多么愚蠢,我没有检查那些在更高版本中传入的值:console.log('dynamoDBReadFromTableName ='+ dynamoDBReadFromTableName); console.log('dynamoDBTablePrimaryKeyName ='+ dynamoDBTablePrimaryKeyName); console.log('dynamoDBReadFromPrimaryKeyValue ='+ dynamoDBReadFromPrimaryKeyValue);价值回来了。 – Huckleberry
我刚刚尝试使用ARN号代替AWS Dynamo Table名称,结果验证错误为:at'tableName'未能满足约束:成员必须满足正则表达式模式:[a-zA-Z0-9 _.-] + ] 消息:'检测到1验证错误:<在此处的雅安号码yada yada yadda>。 \'tableName \'无法满足约束:成员必须满足正则表达式模式:[a-zA-Z0-9 _.-] +', code:'ValidationException', – Huckleberry