2017-02-28 4 views
-1

Okay, also versuche ich, einen Dynamo-DB-Tabellennamen als Parameter zu senden. Ich habe das folgende Lambda definiert habe:Wie übergeben Sie einen Dynamo-DB-Tabellennamen an eine AWS-Lambda-Funktion?

'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) 
     } 
    }); 
}; 

Getestet habe ich diese ohne in dem AWS Dynamo DB Tabellennamen vorbei - dh dynamoDBTablePrimaryKeyName und hatte "footer": dynamoDBReadFromPrimaryKeyValue mit Foobar ist ein wirklich Dynamo DB-Name, und es funktioniert nur Dandy .

Wenn ich versuche, den Dynamo-DB-Namen mit einem Parameter (mit den gleichen/korrekten Namen) zu ersetzen, ich die folgenden Fehlermeldung erhalten:

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 

jemand eine Idee? Verlässt AWS Lambda irgendwie keine Tabellennamen?

+0

Dies hat nichts damit zu tun, dass "AWS Lambda Tabellennamen nicht übergeben werden darf". Sie müssen mit dem Debuggen Ihres Codes beginnen. Fügen Sie mindestens eine Zeile hinzu, um den Wert von 'dynamoDBReadFromTableName' zu ​​protokollieren. Ich vermute, dass Sie etwas falsch machen, wenn Sie die Lambda-Funktion aufrufen, so dass der Wert "event.dynamoDBReadFromTableName" nicht gefüllt wird. Rufen Sie die Lambda-Funktion direkt oder über das API-Gateway auf? –

+0

Wie dumm von mir, habe ich überprüft, die in Werten in einer späteren Version übergeben: console.log ('dynamoDBReadFromTableName =' + dynamoDBReadFromTableName); console.log ('dynamoDBTablePrimaryKeyName =' + dynamoDBTablePrimaryKeyName); console.log ('dynamoDBReadFromPrimaryKeyValue =' + dynamoDBReadFromPrimaryKeyValue); und die Werte kamen gut zurück. – Huckleberry

+0

Ich habe gerade versucht, die ARN-Nummer anstelle des Namens der AWS Dynamo-Tabelle zu verwenden. Der folgende Validierungsfehler war: at 'tableName' konnte die Bedingung nicht erfüllen: Member muss das Muster für reguläre Ausdrücke erfüllen: [a-zA-Z0-9 _.-] + ] Nachricht: '1 Validierungsfehler erkannt: . at \ 'tableName \' konnte die Bedingung nicht erfüllen: Member muss regulärem Ausdruck entsprechen: [a-zA-Z0-9 _.-] + ', code:' ValidationException ', – Huckleberry

Antwort

0

Ah ..... Ich bin im Grunde eine Boob. Ich habe es herausgefunden. (1) Die Tabellenübergabe war nicht fehlgeschlagen, die Zuordnung des Primärkettnamens zum Primärschlüsselwert war. (2) Ich habe es behoben mit var key = {}; Schlüssel [dynamoDBTablePrimaryKeyName] = dynamoDBReadFromPrimaryKeyValue;

Verwandte Themen