it-swarm.com.ru

"Не удалось загрузить учетные данные от каких-либо поставщиков" при локальном использовании DynamodB в Node

я настраиваю DynamodB локально для тестирования с моим приложением Node. Чтобы настроить его, я просто скопировал код из здесь и настроил его для своих нужд. 
Это код:

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));
    }
});

Это выдает ошибку, и я понятия не имею, почему:

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

Был бы благодарен за любую помощь! 

10
Torben

Видимо я понял проблему. Использование файла json для установки учетных данных все равно приводило к ошибке. Использование только объекта конфигурации без флага -inMemory также вызвало ошибку. Казалось, это решило сочетание жесткого кодирования учетных данных в скрипте и использования флага -inMemory при локальном запуске динамодаба. Я действительно не понимаю, почему, хотя.

4
Torben

Перейдите к следующему коду, используйте фиктивные accessKeyId и secretAccessKey, затем запустите его 

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

Согласно сообщению об ошибке ваши учетные данные не установлены в config.

Я даю свое мнение, чтобы установить учетные данные, а затем использовать службы.

 const aws = require('aws-sdk');
 aws.config = new aws.Config();
 aws.config.accessKeyId = "xxxxxxxxxxxxxx";
 aws.config.secretAccessKey = "xxxxxxxxxx";
 aws.config.region = "region";

Теперь используйте Dynamodb

var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

ОБНОВИТЬ

вы также можете установить учетные данные с файлом

aws.config.loadFromPath('./AwsConfig.json'); 

Надеюсь, что это работает!!

5
abdulbarik

Вы, вероятно, путаете веб-сервис DynamoDB с локальной версией. Основные различия между ними можно найти в документации AWS .

Если вы хотите использовать локальную версию DynamoDB, вы найдете последнюю информацию для ее установки и запуска в документация AWS .

Когда вы закончите, не забудьте запустить локальный экземпляр DynamoDB, выполнив:

Java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -inMemory

Ваша ошибка, вероятно, будет предотвращена.

0
Thomas L.

У меня нормально работает DynamoDB на port 8000 с фиктивными учетными данными.

Заметка: 

Номер порта 8000. Я использую ниже фиктивные учетные данные.

var creds = new AWS.Credentials('akid', 'secret', 'session');

AWS.config.update({
    region: "us-west-2",
    endpoint: "http://localhost:8000",
    credentials: creds
});

Запустить команду: -

Java -Djava.library.path=DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

ОПЕРАЦИОННЫЕ СИСТЕМЫ:-

Windows

0
notionquest