Проблемы с подключением к DynamoDB локально с помощью ECONNREFUSED - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь сохранить отправленные формы в таблицу DynamoDB, однако у меня возникают проблемы с локальным подключением. Сейчас я использую DynamoDB локально, но позже мне хотелось бы переместить его обратно в обычный экземпляр DDB, доступный из Elastic Beanstalk.

Я скачал и распаковал dynamodb-local в каталог и выполнил команду java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb , убедившись, что я в соответствующем каталоге. Когда я запускаю команду, я получаю это:

    Initializing DynamoDB Local with the following configuration:
    Port:   8000
    InMemory:       false
    DbPath: null
    SharedDb:       true
    shouldDelayTransientStatuses:   false
    CorsParams:     *

На этом этапе я пытаюсь отправить форму в мою конечную точку POST в app.js, но я получаю эту повторяющуюся ошибку в терминале, где я использую DynamoDB local в:

    Jan 12, 2019 1:24:25 PM com.almworks.sqlite4java.Internal log
    WARNING: [sqlite] cannot open DB[1]: 
    com.almworks.sqlite4java.SQLiteException: [-91] cannot load library: java.lang.UnsatisfiedLinkError: C:\cygwin64\home\Administrator\dynamodb_local_latest\DynamoDBLocal_lib\sqlite4java-win32-x64.dll: Access is denied
    Jan 12, 2019 1:24:25 PM com.almworks.sqlite4java.Internal log
    SEVERE: [sqlite] SQLiteQueue[shared-local-instance.db]: error running job queue
    com.almworks.sqlite4java.SQLiteException: [-91] cannot load library: java.lang.UnsatisfiedLinkError: C:\cygwin64\home\Administrator\dynamodb_local_latest\DynamoDBLocal_lib\sqlite4java-win32-x64.dll: Access is denied
        at com.almworks.sqlite4java.SQLite.loadLibrary(SQLite.java:97)
        at com.almworks.sqlite4java.SQLiteConnection.open0(SQLiteConnection.java:1441)
        at com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:282)
        at com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:293)
        at com.almworks.sqlite4java.SQLiteQueue.openConnection(SQLiteQueue.java:464)
        at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:641)
        at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
        at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
        at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
        at java.base/java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.UnsatisfiedLinkError: C:\cygwin64\home\Administrator\dynamodb_local_latest\DynamoDBLocal_lib\sqlite4java-win32-x64.dll: Access is denied
        at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
        at java.base/java.lang.ClassLoader$NativeLibrary.load(Unknown Source)
        at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(Unknown Source)
        at java.base/java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.base/java.lang.Runtime.load0(Unknown Source)
        at java.base/java.lang.System.load(Unknown Source)
        at com.almworks.sqlite4java.Internal.tryLoadFromPath(Internal.java:340)
        at com.almworks.sqlite4java.Internal.loadLibraryX(Internal.java:117)
        at com.almworks.sqlite4java.SQLite.loadLibrary(SQLite.java:95)
        ... 9 more

В терминале, в котором я запускаю кластер рабочих Node, я получаю следующие выходные данные об ошибках от каждого рабочего (8), а затем об ошибке DDB:

    Failed to create table in DB.
     { Error: connect ECONNREFUSED 127.0.0.1:8000
        at Object.exports._errnoException (util.js:1022:11)
        at exports._exceptionWithHostPort (util.js:1045:20)
        at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:14)
      message: 'connect ECONNREFUSED 127.0.0.1:8000',
      code: 'NetworkingError',
      errno: 'ECONNREFUSED',
      syscall: 'connect',
      address: '127.0.0.1',
      port: 8000,
      region: 'us-west-2',
      hostname: 'localhost',
      retryable: true,
      time: 2019-01-12T20:31:00.742Z }
    DDB Error: NetworkingError: connect ECONNREFUSED 127.0.0.1:8000

Обещаю, я закончу это. Вот мой код для создания таблицы DDB (я передаю const ddb = new AWS.DynamoDB() в качестве параметра из app.js):

    const AWS = require('aws-sdk');

    function createDDBTable(ddb, tableName) {
        // console.log('ddb:\n',ddb);
        const tableParams = {
            AttributeDefinitions: [
                {
                    AttributeName: 'email',
                    AttributeType: 'S'
                },
                {
                    AttributeName: 'id',
                    AttributeType: 'S'
                }
            ],
            KeySchema: [
               {
                AttributeName: 'email',
                KeyType: 'HASH'
               },
               {
                    AttributeName: 'id',
                    KeyType: 'RANGE'
               }
            ],
            ProvisionedThroughput: {
                ReadCapacityUnits: 8,
                WriteCapacityUnits: 8
            },
            TableName: tableName,
            StreamSpecification: {
                StreamEnabled: false
            }
        };
        ddb.createTable(tableParams, (err, data) => {
            if(err) console.error('Failed to create table in DB.\n', err);
            else console.log('Success creating table!', data);
        })
    }
    module.exports = createDDBTable;

Я в растерянности, потому что я иду не так. Все мои проверки и конечные точки работают, однако, когда приходит время создавать таблицу, мой код удерживает меня от ошибок. У меня также есть ощущение, что мне может понадобиться немного откорректировать файл options.config, но я не уверен, как его отформатировать. Заранее благодарю за любую помощь! Я старался быть внимательным к своей проблеме, но дайте мне знать, если я могу расширить что-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...