자, 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가 어떻게 든 테이블 이름을 전달하지 못하게합니까?
"AWS Lambda는 테이블 이름을 전달하지 않습니다."와는 아무런 관련이 없습니다. 코드를 디버깅해야합니다. 적어도'dynamoDBReadFromTableName'의 값이 무엇인지를 기록하는 라인을 추가하십시오. 'event.dynamoDBReadFromTableName' 값이 채워지지 않도록 람다 함수를 호출 할 때 당신이 뭔가 잘못하고 있다고 생각합니다. 람다 함수를 직접 호출하거나 API 게이트웨이를 사용하고 있습니까? –
나 한테 얼마나 어리석은 지, 나중 버전에서 전달 된 값을 확인했다. console.log ('dynamoDBReadFromTableName ='+ dynamoDBReadFromTableName); console.log ('dynamoDBTablePrimaryKeyName ='+ dynamoDBTablePrimaryKeyName); console.log ('dynamoDBReadFromPrimaryKeyValue ='+ dynamoDBReadFromPrimaryKeyValue); 값은 다시 정상적으로 돌아 왔습니다. – Huckleberry
AWS Dynamo 테이블 이름 대신 ARN 번호를 사용하려고 시도한 결과 유효성 검사 오류가 발생했습니다. 'tableName'이 제약 조건을 충족하지 못했습니다. 구성원이 정규 표현식 패턴을 충족해야합니다. [a-zA-Z0-9 _.-] + ] 메시지 : '1 유효성 검사 오류가 감지되었습니다 :. \ 'tableName \'에서 제약 조건을 충족시키지 못했습니다. 구성원이 정규 표현식 패턴을 만족해야합니다. [a-zA-Z0-9 _.-] + ' code :'ValidationException ', –
Huckleberry