Не верны конечные точки динамодов AWS - PullRequest
0 голосов
/ 05 октября 2018

Я использую sails js (последняя версия 1.0) с DynamoDB (я установил фреймворк Sails js на свой локальный компьютер), но когда я пытался читать записи из aws dynamodb, то выдает ошибку.Я пробовал ниже случаи и каждый раз получал разные ошибки.

var AWS = require("aws-sdk");
AWS.config.update({
  region: "ap-southeast-2",
  endpoint: "http://localhost:1337"
});

var docClient = new AWS.DynamoDB.DocumentClient();
var table = "SMSGateway_User";
var email = 'yoursptc@gmail.com';

var params = {
    TableName: table,
    Key:{
        "userEmail": email
    }
};

docClient.get(params, function(err, data) {
    if (err) {
        console.log("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
    }
});

Ошибка, которую я получаю:

Невозможно прочитать элемент.Ошибка JSON: {"message": "Отсутствуют учетные данные в конфигурации", "errno": "ETIMEDOUT", "code": "CredentialsError",
"syscall": "connect", "address": "169.254.169.254"," port ": 80,
" time ":" 2018-10-05T05: 05: 26.002Z "," originalError ": {" message ":" Не удалось загрузить учетные данные ни от каких поставщиков "," errno ": "ETIMEDOUT", "code": "CredentialsError", "syscall": "connect", "address": "169.254.169.254", "port": 80, "time": "2018-10-05T05: 05:26.001Z "," originalError ": {" errno ":" ETIMEDOUT "," code ":" ETIMEDOUT "," syscall ":" connect "," address ":" 169.254.169.254 "," port ": 80,"сообщение ":" подключить ETIMEDOUT 169.254.169.254:80 "}}}

Когда я изменился и добавить ниже код для конфигурации:

AWS.config.update({
  accessKeyId: 'XXXXXXXXXXXX',
  secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
  region: "ap-southeast-2",
  endpoint: "http://localhost:1337"
});

Тогдаошибка ниже:

Невозможно прочитать элемент.Ошибка JSON: {"message": "Not Found", "code": "UnknownError", "statusCode": 404, "time": "2018-10-05T06: 08: 28.707Z", "retryable": false,«retryDelay»: 47.4917958614573}

Когда я меняю конечную точку и ставлю ARN

AWS.config.update({
  accessKeyId: 'XXXXXXXXXXXX',
  secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
  region: "ap-southeast-2",
  endpoint: "arn:aws:dynamodb:ap-southeast-2:420344081058:table/SMSGateway_User"
});

Ошибка:

Невозможно прочитать элемент.Ошибка JSON: {"message": "Недоступный хост: arn'. This service may not be available in the ap-southeast-2 'region.", "Code": "UnknownEndpoint", "region": "ap-southeast-2",
"hostname":" arn "," retryable ": true," originalError ": {" message ":" getaddrinfo ENOTFOUND arn arn: 443 "," errno ":" ENOTFOUND "," code ":" NetworkingError "," syscall ":"getaddrinfo", "имя хоста": "arn", "host": "arn", "port": 443, "region": "ap-southeast-2", "retryable": true, "time": "2018-10-05T06: 17: 21.352Z "}," время ":" 2018-10-05T06: 17: 21.352Z "}

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

Я следую по этой ссылке: https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html#GettingStarted.NodeJs.03.02

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 октября 2018

После долгих исследований я нашел решение, почему оно не работало

   var AWS = require("aws-sdk");
   //AWS.config.loadFromPath('details.json');
   AWS.config.update({
     accessKeyId: 'XXXXXXXXXXXXXXXX',
     secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
     region: "XXXXXXXXX",
   });

   var docClient = new AWS.DynamoDB.DocumentClient();

/* Get single item */

   var table = "TABLE NAME";
   var msgId = 'PRIMARY KEY VALUE';
   var params = {
       TableName: table,
       Key:{
           'MsgId': msgId
       }
   };

   docClient.get(params, function(err, data) {
       if (err) {
           console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
       } else {
           console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
       }
   });

Чтобы получить все записи таблицы, просто используйте функцию сканирования, как показано ниже

   var table = "PadmanStopsTest";
   var params = {
       TableName: table,
   };
   docClient.scan(params, function(err, data) {
       if (err) {
           console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
       } else {
           console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
       }
   });

Конечные точки не требуются, просто необходимо пройти accessKeyId, secretAccessKey и region.Я передавал электронную почту в параметрах, поэтому здесь нам нужно передать значение первичного ключа таблицы.

Я прошел, и он отлично работает для меня.

...