2017-02-28 2 views
-1

자, Dynamo DB 테이블 이름을 매개 변수로 보내려고합니다. 나는 다음과 같은 람다 정의있어 :Dynamo DB 테이블 이름을 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 디나모 DB 테이블 이름을 전달하지 않고 테스트 - 즉 dynamoDBTablePrimaryKeyName을하고는 foobar가 실제로 디나모 DB 이름 인 상태 "footer": dynamoDBReadFromPrimaryKeyValue 가 있고, 그냥 멋쟁이 작동 .

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 

누구나 아이디어가 :

내가 (같은/올바른 이름) 매개 변수, 나는 다음과 같은 오류와 함께 디나모 DB 이름을 대체하려고 시도

? AWS Lambda가 어떻게 든 테이블 이름을 전달하지 못하게합니까?

+0

"AWS Lambda는 테이블 이름을 전달하지 않습니다."와는 아무런 관련이 없습니다. 코드를 디버깅해야합니다. 적어도'dynamoDBReadFromTableName'의 값이 무엇인지를 기록하는 라인을 추가하십시오. 'event.dynamoDBReadFromTableName' 값이 채워지지 않도록 람다 함수를 호출 할 때 당신이 뭔가 잘못하고 있다고 생각합니다. 람다 함수를 직접 호출하거나 API 게이트웨이를 사용하고 있습니까? –

+0

나 한테 얼마나 어리석은 지, 나중 버전에서 전달 된 값을 확인했다. console.log ('dynamoDBReadFromTableName ='+ dynamoDBReadFromTableName); console.log ('dynamoDBTablePrimaryKeyName ='+ dynamoDBTablePrimaryKeyName); console.log ('dynamoDBReadFromPrimaryKeyValue ='+ dynamoDBReadFromPrimaryKeyValue); 값은 다시 정상적으로 돌아 왔습니다. – Huckleberry

+0

AWS Dynamo 테이블 이름 대신 ARN 번호를 사용하려고 시도한 결과 유효성 검사 오류가 발생했습니다. 'tableName'이 제약 조건을 충족하지 못했습니다. 구성원이 정규 표현식 패턴을 충족해야합니다. [a-zA-Z0-9 _.-] + ] 메시지 : '1 유효성 검사 오류가 감지되었습니다 : . \ 'tableName \'에서 제약 조건을 충족시키지 못했습니다. 구성원이 정규 표현식 패턴을 만족해야합니다. [a-zA-Z0-9 _.-] + ' code :'ValidationException ', – Huckleberry

답변

0

아 ..... 나는 기본적으로 가슴입니다. 나는 그것을 알아. (1) 테이블 전달이 실패하지 않았으므로 Primary Ket 이름을 Primary Key Value에 할당하는 것이 실패했습니다. (2) 을 사용하여 고정했습니다. var key = {}; 키 [dynamoDBTablePrimaryKeyName] = 다이나모 DBReadFromPrimaryKeyValue;

관련 문제