Налаштування регіону в Node.js AWS SDK


123

Хтось може пояснити, як виправити відсутню помилку конфігурації за допомогою 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'});

(...)

Відповіді:


209

Як щодо зміни порядку заяв? Оновіть конфігурацію 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();

1
Години пошуку, чому це було невдало .. це виправило це.
FredArters

Це встановить регіон us-east-1для всіх ресурсів, використовуючи конкретний ресурс, створюючи об'єкт.
Атул Кумар

Це просто злому, не намагаючись зрозуміти, чому клієнт nodejs aws ігнорує параметри ~ \ .aws \ config
ffeast

Дякую, ця проблема була у мене під час встановлення httpOptions після інстанціювання cloudwatch
LJT

87

У мене був той самий випуск "Відсутня область у конфігурації", і в моєму випадку це було те, що, на відміну від CLI або Python SDK, SDK вузла не буде читати з ~\.aws\configфайлу.

Щоб вирішити це питання, у вас є три варіанти:

  1. Налаштуйте це програмно (жорстко): AWS.config.update({region:'your-region'});

  2. Використовуйте змінну середовища. У той час як CLI використовує AWS_DEFAULT_REGION, SDK Node використовує AWS_REGION.

  3. Завантажте з файлу JSON за допомогою AWS.config.loadFromPath('./config.json');

Формат JSON:

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

3
Лол. Тож SDK буде читати з файлу загальних облікових даних, але конфігурація, яка завжди в парі з ним, забудьте про це!
duhseekoh

10
Kudos для виділення, який CLI використовує AWS_DEFAULT_REGIONта Sdk AWS_REGION. Це щось неочевидне і щось, що мене вкусило в минулому. Це підкреслено внизу AWS SDK для керівництва розробників Javascript - Регіон налаштування, але це не очевидно
Dimitry K

12
SDK може читати з ~ / .aws / config, але вам потрібно встановити змінну середовища AWS_SDK_LOAD_CONFIGнаtrue
Gareth Oakley

2
Це була моя проблема. Я думав, що це не буде дурно, і я думаю, що це була моя помилка.
Джастін Форс

63

Якщо ви працюєте з AWS CLI, у вас, ймовірно, визначена область за замовчуванням у ~ / .aws / config. На жаль, AWS SDK для JavaScript не завантажує його за замовчуванням. Щоб завантажити його, визначте env var

AWS_SDK_LOAD_CONFIG=1

Дивіться https://github.com/aws/aws-sdk-js/pull/1391


2
СПАСИБІ! Інші команди SET я вже виконав. Однак цей був необхідний, щоб використовувати їх у моєму додатку Node.JS. set AWS_ACCESS_KEY_ID="KEY ID GOES HERE" set AWS_SECRET_ACCESS_KEY="SECRET KEY GOES HERE" set AWS_REGION="us-east-1"
SteckDEV

AWS_SDK_LOAD_CONFIG підтримується станом на 2,44,0, в журналі змін SDK.
jarmod

2
працював ідеально і не вимагає жорсткого кодування у вашому сценарії: просто поставте process.env.AWS_SDK_LOAD_CONFIG = 1; до включення AWS
sashok_bg

працював чудово. Для інформації, хто користується vscode та bash shell, ви можете додати змінну enviornment наступним чином: - $ export AWS_SDK_LOAD_CONFIG = 1
Тім Ньютон,

12

Ви можете вказати регіон під час створення підключення dynamodb (не пробували s3, але це також має працювати).

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

1
новий AWS.DynamoDB ({'регіон': 'us-east-1'}) не працює, вам потрібно зателефонувати на AWS.config.update ({region: 'ваш регіон'})
HaneTV

1
На даний момент я тестую динамодб, який працює локально, тому поведінка може бути різною. Це, безумовно, працює у всьому коді, який я використовую в тому середовищі. var dynamodb = new AWS.DynamoDB({ 'region': 'eu-west-1', 'endpoint': 'http://localhost:8000' }); var docClient = new AWS.DynamoDB.DocumentClient({"service": dynamodb}); Якщо працювати, враховуючи це в документації
WaffleSouffle

9
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();

9

Я переглянув ваш код і тут ви підключаєтесь до служб 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';

8

Однакова помилка для мене:

Після багатьох випробувань я зупинився на наступному:

ВАРІАНТ 1

  1. встановити AWS_REGIONзмінну середовища лише в локальній системі на us-east-1(приклад)

Для Linux:

експортувати AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLE
експорт AWS_SECRET_ACCESS_KEY = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY
експорт AWS_DEFAULT_REGION = us-east-1

Для Windows
див: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html

  1. тепер не потрібно встановлювати лямбда-змінних для регіону
  2. також не потрібно використовувати в коді, наприклад:

    • AWS.config.update(...), це не потрібно
    • AWS.S3()тощо, вони працюватимуть без проблем. Замість S3 може бути будь-яка служба Aws

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


ВАРІАНТ 2

Замість змінних середовища інший спосіб - файл AWS CONFIG:

У Linux ви можете створити файли нижче:

~ / .aws / повноваження

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

~ / .aws / config

[default]
region=us-west-2
output=json

Дивіться https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html


Де ти це встановив environment variable? що ти маєш на увазі під собою local system?
Малькольм Сальвадор

@MalcolmSalvador Я оновив відповідь для вас, див. Вище.
Манохар Редді Поредді

4

Це може бути не правильним способом зробити це, але я маю всі свої конфігурації в окремому файлі JSON. І це все вирішує проблему для мене

Щоб завантажити конфігурацію AWS, я роблю це:

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

config.aws - це лише файл JSON.


1

Ви можете створити загальний модуль і використовувати його на основі регіону, який ви хочете

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.