2017-02-28 52 views
-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是否让表名不被传入?

+0

这与“AWS Lambda不让表名传入”无关。您需要从调试代码开始。最起码添加一行记录'dynamoDBReadFromTableName'的值是什么。我猜你在调用Lambda函数的时候做错了什么,所以'event.dynamoDBReadFromTableName'值没有被填充。您是直接调用Lambda函数还是使用API​​网关? –

+0

我是多么愚蠢,我没有检查那些在更高版本中传入的值:console.log('dynamoDBReadFromTableName ='+ dynamoDBReadFromTableName); console.log('dynamoDBTablePrimaryKeyName ='+ dynamoDBTablePrimaryKeyName); console.log('dynamoDBReadFromPrimaryKeyValue ='+ dynamoDBReadFromPrimaryKeyValue);价值回来了。 – Huckleberry

+0

我刚刚尝试使用ARN号代替AWS Dynamo Table名称,结果验证错误为:at'tableName'未能满足约束:成员必须满足正则表达式模式:[a-zA-Z0-9 _.-] + ] 消息:'检测到1验证错误:<在此处的雅安号码yada yada yadda>。 \'tableName \'无法满足约束:成员必须满足正则表达式模式:[a-zA-Z0-9 _.-] +', code:'ValidationException', – Huckleberry

回答

0

啊.....我基本上是一个胸部。我想到了。 (1)表传递没有失败,将主Ket名称分配给主键值。 (2)我通过使用 var key = {}; key [dynamoDBTablePrimaryKeyName] = dynamoDBReadFromPrimaryKeyValue;

相关问题