web-dev-qa-db-fra.com

"Impossible de charger les informations d'identification de tous les fournisseurs" lors de l'utilisation de dynamodb localement dans le noeud

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! 

10
Torben

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.

4
Torben

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));
    }
});
9
Zhu Xiaohu

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!!

5
abdulbarik

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.

0
Thomas L.

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

0
notionquest