Подтвердить что ты не робот

Настройка области в Node.js AWS SDK

Может кто-нибудь объяснить, как исправить недостающую ошибку конфигурации с помощью Node.js? Я выполнил все примеры из страницы aws doc, но я все равно получаю эту ошибку независимо от того, что.

{ [ConfigError: Missing region in config]
message: 'Missing region in config',
code: 'ConfigError',
time: Wed Jun 24 2015 21:39:58 GMT-0400 (EDT) }>{ thumbnail: 
 { fieldname: 'thumbnail',
 originalname: 'testDoc.pdf',
 name: 'testDoc.pdf',
 encoding: '7bit',
 mimetype: 'application/pdf',
path: 'uploads/testDoc.pdf',
 extension: 'pdf',
 size: 24,
 truncated: false,
 buffer: null } }
 POST / 200 81.530 ms - -

Вот мой код:

var express = require('express');
var router = express.Router();
var AWS = require('aws-sdk');
var dd = new AWS.DynamoDB();
var s3 = new AWS.S3();
var bucketName = 'my-bucket';

AWS.config.update({region:'us-east-1'});

(...)
4b9b3361

Ответ 1

Как насчет изменения порядка выписок? Обновите конфигурацию AWS до создания экземпляров s3 и dd

var AWS = require('aws-sdk');
AWS.config.update({region:'us-east-1'});

var dd = new AWS.DynamoDB();
var s3 = new AWS.S3();

Ответ 2

У меня была такая же проблема "Отсутствующая область в config", и в моем случае это было то, что в отличие от CLI или SDK Python SDK Node не будет читать из файла ~\.aws\config.

Чтобы решить эту проблему, у вас есть три варианта:

  • Настроить его программным способом (жестко запрограммированным): AWS.config.update({region:'your-region'});

  • Используйте переменную окружения. Хотя CLI использует AWS_DEFAULT_REGION, SDK Node использует AWS_REGION.

  • Загрузка из файла JSON с помощью AWS.config.loadFromPath('./config.json');

Формат JSON:

{ 
    "accessKeyId": "akid", 
    "secretAccessKey": "secret", 
    "region": "us-east-1" 
}

Ответ 3

Если вы работаете с AWS CLI, у вас, вероятно, есть регион по умолчанию, определенный в ~/.aws/config. К сожалению, AWS SDK for JavaScript не загружает его по умолчанию. Чтобы загрузить его, определите env var

AWS_SDK_LOAD_CONFIG=1

См https://github.com/aws/aws-sdk-js/pull/1391

Ответ 4

Вы можете указать область при создании соединения dynamodb (не пробовал s3, но это тоже должно работать).

var AWS = require('aws-sdk');
var dd = new AWS.DynamoDB({'region': 'us-east-1'});

Ответ 5

Та же ошибка для меня:

После многих испытаний я остановился на следующем:

  1. установите переменную среды AWS_REGION только в локальной системе, на us-east-1 (пример)
  2. Теперь нет необходимости устанавливать лямбда-переменные для региона
  3. кроме того, нет необходимости использовать в коде, например:

    • AWS.config.update(...), это не обязательно
    • AWS.XYZ(), это будет работать без проблем. XYZ - это любой сервис AWS, такой как S3 или другой

В редком случае, если где-то в коде предполагаются некоторые значения по умолчанию, и вы вынуждены отправить регион, используйте {'region': process.env.AWS_REGION})

Ответ 6

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

//присваиваем учетные данные AWS следующим образом:

AWS.config.update({
  accessKeyId: 'asdjsadkskdskskdk',
  secretAccessKey: 'sdsadsissdiidicdsi',
  region: 'us-east-1'
});

var dd = new AWS.DynamoDB();
var s3 = new AWS.S3();

Ответ 7

Это может быть неправильный способ сделать это, но у меня есть все мои конфиги в отдельном файле JSON. И это исправляет проблему для меня.

Чтобы загрузить конфигурацию AWS, я делаю это:

var awsConfig = config.aws;
AWS.config.region = awsConfig.region;
AWS.config.credentials = {
    accessKeyId: awsConfig.accessKeyId,
    secretAccessKey: awsConfig.secretAccessKey
}

config.aws - это просто файл JSON.

Ответ 8

Я просмотрел ваш код и здесь вы подключаетесь к сервисам AWS перед настройкой региона, поэтому я предлагаю вам сначала обновить регион, а затем подключиться к сервисам или создать их экземпляр, как показано ниже -

var express = require('express');
var router = express.Router();
var AWS = require('aws-sdk');
AWS.config.update({region:'us-east-1'});

var dd = new AWS.DynamoDB();
var s3 = new AWS.S3();
var bucketName = 'my-bucket';

Ответ 9

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

var AWS = require('aws-sdk')

module.exports = {
    getClient: function(region) {
        AWS.config.update({ region: region })
        return new AWS.S3()
    }
}

и потребляйте его как,

 var s3Client = s3.getClient(config.region)

идея заключается в обновлении конфигурации AWS до создания экземпляра s3