API перестает работать с использованием nodejs и dynamodb

#node.js #api #express #amazon-dynamodb #aws-sdk

#node.js #API #экспресс #amazon-dynamodb #aws-sdk

Вопрос:

Я работаю над API на основе nodejs с использованием aws dynamodb. API работал нормально, но сегодня я получаю эту ошибку:

 {
    "success": false,
    "message": {
        "message": "Missing region in config",
        "code": "ConfigError",
        "time": "2020-08-17T19:17:17.462Z"
    }
}
  

Ниже приведен мой пользовательский маршрут api:

 const AWS = require('aws-sdk');
const config = require('config');
const { v4: uuidv4 } = require('uuid');
// Set the region
AWS.config.update({ region: 'us-east-2' });

router.post(`/api/user`, (req, res) => {
    console.log('User Add Services Called');

    try {
        //Constants
        AWS.config.update(config.aws_remote_config);

        var params = {
            TableName: config.aws_table_name,
            Item: {
                PK: `${uuidv4()}`,
                SK: `User`,
                name: 'Test'
            }
        };

        //Calling DynamoDB to add the item to the table
        docClient.put(params, function (err) {
            if (err) {
                res.send({
                    success: false,
                    message: err
                });
            } else {
                res.send({
                    success: true,
                    message: 'User Added'
                });
            }
        });
    } catch (error) {
        return res.status(500).json({
            status: 'error',
            message: 'An error occurred trying to process your request'
        });
    }
});
  

Некоторое время эти ошибки тоже отображаются:

  • подключитесь к ENETUNREACH 169.254.169.254:80
  • Отсутствуют учетные данные в конфигурации, при использовании AWS_CONFIG_FILE установите AWS_SDK_LOAD_CONFIG=1

Кто-нибудь может сказать, почему это происходит, API работал нормально, и я также пытался восстановить ключи доступа, но возникает та же проблема

Комментарии:

1. уже есть решение, ребята?

2. такая же проблема после использования api в течение нескольких дней.

Ответ №1:

Я думаю, вы перенастраиваете AWS.config, который перезаписывает ваше первоначальное обновление конфигурации, содержащее инициализацию региона. Попробуйте это:

 const AWS = require('aws-sdk');
const config = require('config');
const { v4: uuidv4 } = require('uuid');

// Set the region
AWS.config.update({ region: 'us-east-2', ...config.aws_remote_config });

router.post(`/api/user`, (req, res) => {
    console.log('User Add Services Called');

    try {
        var params = {
            TableName: config.aws_table_name,
            Item: {
                PK: `${uuidv4()}`,
                SK: `User`,
                name: 'Test'
            }
        };

        //Calling DynamoDB to add the item to the table
        docClient.put(params, function (err) {
            if (err) {
                res.send({
                    success: false,
                    message: err
                });
            } else {
                res.send({
                    success: true,
                    message: 'User Added'
                });
            }
        });
    } catch (error) {
        return res.status(500).json({
            status: 'error',
            message: 'An error occurred trying to process your request'
        });
    }
});
  

Редактировать

Тогда это означает, что ваши учетные данные отсутствуют, просто сделайте это:

 
// ... Other code

// Set the region
AWS.config.update({ 
    ...config.aws_remote_config,
    region: 'us-east-2',
    credentials: {
        accessKeyId: 'your-access-key',
        secretAccessKey: 'your-secret-key'
    } });

// ... Other code

  

Комментарии:

1. если я это сделаю, то придет такой ответ: Отсутствуют учетные данные в конфигурации, если используется AWS_CONFIG_FILE, установите AWS_SDK_LOAD_CONFIG=1

2. Я уже передаю все это в массив. Если проблема заключалась в последовательности, то она не должна была работать с самого начала. Мой вопрос остается тем же, почему он перестал работать? раньше все работало нормально