J'ai créé une table 'user_info' dans dynamoDB avec une clé de hachage primaire 'user_id' (String), pas de clé de plage. J'ai ensuite créé 2 fonctions lambda aws pour insérer et interroger les éléments. Je peux insérer des éléments dans la table, mais lorsque je recherche la table, elle renvoie une ValidationException: l'élément clé fourni ne correspond pas au schéma. Ma fonction de requête:
var params = {
Key: {
user_id:{
S: "[email protected]"
}
},
TableName: 'user_info',
ProjectionExpression: 'password'
};
dynamodb.getItem(params,
function(err, data) {
if (err) {
console.log("get item err." + err);
context.done('error','getting item from dynamodb failed: '+err);
}
else {
console.log('great success: '+JSON.stringify(data, null, ' '));
context.succeed('created user ' + event.user_id + ' successfully.');
}
});
Je reçois toujours cette exception:
ValidationException: The provided key element does not match the schema
Depuis 1) je n'ai qu'une seule clé primaire de hachage. 2) user_id est défini comme une chaîne. Je ne sais vraiment pas pourquoi il y a une erreur de décalage.
Pour clarifier davantage pourquoi cela se produit, vous utilisiez à l'origine le DynamoDB Document Client , ce qui élimine le besoin d'étiqueter explicitement vos attributs comme "Chaîne" (S) ou "Numéro" (N) etc. Par conséquent, votre code d'origine aurait fonctionné avec
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();
var params = {
Key: {
user_id: "[email protected]"
},
TableName: 'user_info',
ProjectionExpression: 'password'
};
Notez que le "S" enveloppant la valeur de "user_id" est supprimé du code ci-dessus. Plus tard, vous êtes revenu au sdk javascript de bas niveau en utilisant 'aws-sdk', donc votre code avec l'étiquette "S" a fini par fonctionner.
Enfin, j'ai trouvé la réponse. Il ne s'agit pas du format des paramètres, mais du code précédent, que je n'ai pas posté dans ma question. Quand je remplace
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();
avec
var doc = require('aws-sdk');
var dynamodb = new doc.DynamoDB();
l'exception disparaît.