je met en place une dynamodb localement pour tester avec mon application Node. Pour le configurer, je viens de copier le code de ici et de l’ajuster à mes besoins.
C'est le code:
var AWS = require("aws-sdk");
var config = ({
"apiVersion": "2012-08-10",
"accessKeyId": "abcde",
"secretAccessKey": "abcde",
"region": "us-west-2",
"endpoint": "http://localhost:8001",
});
var dynamodb = new AWS.DynamoDB(config);
var params = {
TableName : "Movies",
KeySchema: [
{ AttributeName: "year", KeyType: "HASH"}, //Partition key
{ AttributeName: "title", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "year", AttributeType: "N" },
{ AttributeName: "title", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
dynamodb.createTable(params, function(err, data) {
if (err) {
console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
}
});
Cela jette cependant une erreur et je ne sais pas pourquoi:
Unable to create table. Error JSON: {
"message": "Missing credentials in config",
"code": "CredentialsError",
"time": "2017-04-10T11:45:26.748Z",
"retryable": true,
"originalError": {
"message": "Could not load credentials from any providers",
"code": "CredentialsError",
"time": "2017-04-10T11:45:26.747Z",
"retryable": true,
"originalError": {
"message": "Connection timed out after 1000ms",
"code": "TimeoutError",
"time": "2017-04-10T11:45:26.747Z",
"retryable": true
}
}
}
Serait reconnaissant pour toute aide!
Apparemment, j'ai compris le problème. L'utilisation d'un fichier JSON pour définir les informations d'identification entraînait toujours l'erreur. Utiliser uniquement l'objet config sans l'indicateur -inMemory a également provoqué une erreur. La combinaison du codage en dur des informations d'identification dans le script et de l'utilisation de l'indicateur -inMemory lors du démarrage local de dynamodb semblait résoudre ce problème. Je ne comprends vraiment pas pourquoi.
Remplacez le code suivant, installez les variables nominales accessKeyId
et secretAccessKey
, puis exécutez-les.
var AWS = require("aws-sdk");
AWS.config.update({
region: 'us-west-1',
accessKeyId: 'accessKeyId',
secretAccessKey: 'secretAccessKey',
endpoint: new AWS.Endpoint('http://localhost:8000'),
});
var dynamodb = new AWS.DynamoDB();
var params = {
TableName : "Movies",
KeySchema: [
{ AttributeName: "year", KeyType: "HASH"}, //Partition key
{ AttributeName: "title", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "year", AttributeType: "N" },
{ AttributeName: "title", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
dynamodb.createTable(params, function(err, data) {
if (err) {
console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
}
});
Conformément au message d'erreur, vos informations d'identification ne sont pas définies dans config
.
Je donne mon avis pour définir les informations d'identification, puis utiliser les services.
const aws = require('aws-sdk');
aws.config = new aws.Config();
aws.config.accessKeyId = "xxxxxxxxxxxxxx";
aws.config.secretAccessKey = "xxxxxxxxxx";
aws.config.region = "region";
Maintenant, utilisez le Dynamodb
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
METTRE À JOUR
vous pouvez également définir les informations d'identification avec le fichier
aws.config.loadFromPath('./AwsConfig.json');
Esperons que ça marche!!
Vous confondez probablement entre le service Web DynamoDB et la version locale. Vous pouvez trouver les principales différences entre les deux dans documentation AWS .
Si vous souhaitez utiliser une version locale de DynamoDB, vous trouverez les dernières informations à installer et à exécuter dans documentation AWS .
Une fois que vous avez terminé, assurez-vous d’exécuter l’instance locale DynamoDB en exécutant:
Java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -inMemory
Votre erreur sera probablement évitée.
DynamoDB local fonctionne correctement pour moi sur le port 8000 avec des informations d'identification factices.
Remarque:
Le numéro de port est 8000 . J'utilise les informations d'identification factices ci-dessous.
var creds = new AWS.Credentials('akid', 'secret', 'session');
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000",
credentials: creds
});
Commande de démarrage: -
Java -Djava.library.path=DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
OS: -
Les fenêtres