Ответ 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();
Может кто-нибудь объяснить, как исправить недостающую ошибку конфигурации с помощью 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'});
(...)
Как насчет изменения порядка выписок? Обновите конфигурацию 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();
У меня была такая же проблема "Отсутствующая область в 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"
}
Если вы работаете с AWS CLI, у вас, вероятно, есть регион по умолчанию, определенный в ~/.aws/config. К сожалению, AWS SDK for JavaScript не загружает его по умолчанию. Чтобы загрузить его, определите env var
AWS_SDK_LOAD_CONFIG=1
Вы можете указать область при создании соединения dynamodb (не пробовал s3, но это тоже должно работать).
var AWS = require('aws-sdk');
var dd = new AWS.DynamoDB({'region': 'us-east-1'});
Та же ошибка для меня:
После многих испытаний я остановился на следующем:
AWS_REGION
только в локальной системе, на us-east-1
(пример)кроме того, нет необходимости использовать в коде, например:
AWS.config.update(...)
, это не обязательно AWS.XYZ()
, это будет работать без проблем. XYZ - это любой сервис AWS, такой как S3 или другойВ редком случае, если где-то в коде предполагаются некоторые значения по умолчанию, и вы вынуждены отправить регион, используйте {'region': process.env.AWS_REGION})
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();
Это может быть неправильный способ сделать это, но у меня есть все мои конфиги в отдельном файле JSON. И это исправляет проблему для меня.
Чтобы загрузить конфигурацию AWS, я делаю это:
var awsConfig = config.aws;
AWS.config.region = awsConfig.region;
AWS.config.credentials = {
accessKeyId: awsConfig.accessKeyId,
secretAccessKey: awsConfig.secretAccessKey
}
config.aws - это просто файл JSON.
Я просмотрел ваш код и здесь вы подключаетесь к сервисам 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';
Вы можете создать общий модуль и использовать его на основе региона, который хотите
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