Node.js AWS SDK'da bölgeyi yapılandırma


123

Birisi Node.js ile eksik bir yapılandırma hatasının nasıl düzeltileceğini açıklayabilir mi? Aws belge sayfasındaki tüm örnekleri takip ettim ancak ne olursa olsun bu hatayı alıyorum.

{ [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 - -

İşte kodum:

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'});

(...)

Yanıtlar:


209

İfadelerin sırasını değiştirmeye ne dersiniz? S3 ve dd'yi başlatmadan önce AWS yapılandırmasını güncelleyin

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

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

1
Bunun neden başarısız olduğunu saatlerce araştırmak .. bu sorunu çözdü.
FredArters

Bu, bölgeyi us-east-1tüm kaynaklar için ayarlayacak, nesne oluştururken kaynağa özgü bölgeyi kullanacaktır.
Atul Kumar

Bu sadece nodejs aws istemcisinin ~ \ .aws \ config ayarlarını neden göz ardı ettiğini anlamaya çalışmadan yapılan bir hackleme
19'da

Teşekkürler, bulut saatini başlattıktan sonra http Seçeneklerini ayarlarken yaşadığım sorun buydu
LJT

87

Aynı sorunu "Yapılandırmada eksik bölge" yaşadım ve benim durumumda, CLI veya Python SDK'nın aksine, Node SDK ~\.aws\configdosyadan okumuyor .

Bunu çözmek için üç seçeneğiniz var:

  1. Programlı olarak yapılandırın (sabit kodlu): AWS.config.update({region:'your-region'});

  2. Bir ortam değişkeni kullanın. CLI kullanırken AWS_DEFAULT_REGION, Node SDK kullanır AWS_REGION.

  3. Kullanarak bir JSON dosyasından yükleyin AWS.config.loadFromPath('./config.json');

JSON biçimi:

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

3
Lol. Yani SDK, paylaşılan kimlik bilgileri dosyasından okuyacak, ancak her zaman onunla eşleştirilmiş yapılandırma, unutun gitsin!
duhseekoh

10
CLI'nin kullandığını AWS_DEFAULT_REGIONve Sdk'yi vurguladığınız için tebrikler AWS_REGION. Bu açık olmayan bir şey ve geçmişte beni ısıran bir şey. AWS SDK For Javascript Developer Guide - Setting Region (Bölge Ayarlama) belgesinin alt kısmında vurgulanmıştır ancak bu açık değildir
Dimitry K

12
SDK ~ / .aws / yapılandırmasındaki okuyabilir, ancak ortam değişkeni ayarlamak için gerekmez AWS_SDK_LOAD_CONFIGiçintrue
Gareth Oakley

2
Bu benim sorunumdu. Bunun aptalca olmayacağını düşündüm ve sanırım bu benim hatamdı.
Justin Force

63

AWS CLI ile çalışıyorsanız, muhtemelen ~ / .aws / config içinde tanımlanmış bir varsayılan bölgeniz vardır. Ne yazık ki JavaScript için AWS SDK onu varsayılan olarak yüklemez. Yüklemek için env var tanımlayın

AWS_SDK_LOAD_CONFIG=1

Bkz. Https://github.com/aws/aws-sdk-js/pull/1391


2
TEŞEKKÜR EDERİM! Diğer SET komutlarını zaten çalıştırmıştım. Ancak bu, onları Node.JS uygulamamda kullanmak için gerekliydi. 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, SDK değişiklik günlüğü başına 2.44.0 itibarıyla desteklenmektedir.
jarmod

2
mükemmel çalıştı ve betiğinizde herhangi bir kodlama gerektirmez: sadece process.env.AWS_SDK_LOAD_CONFIG = 1 yazın; önce AWS
sashok_bg

harika çalıştı. Vscode ve bash kabuğunu kullanan herhangi biri hakkında bilgi almak için, ortam değişkenini aşağıdaki gibi ekleyebilirsiniz: - $ export AWS_SDK_LOAD_CONFIG = 1
Tim Newton

12

Dinamodb bağlantısını oluştururken bölgeyi belirtebilirsiniz (s3'ü denemedim ama bu da işe yaramalı).

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

1
yeni AWS.DynamoDB ({'region': 'us-east-1'}) çalışmıyor, AWS.config.update ({bölge: 'bölgeniz'}) 'i aramanız gerekiyor
HaneTV

1
Şu anda yerel olarak çalışan dynamodb ile test ediyorum, bu nedenle davranış farklı olabilir. Kesinlikle o ortamda kullandığım tüm kodda çalışıyor. Belgelerdevar dynamodb = new AWS.DynamoDB({ 'region': 'eu-west-1', 'endpoint': 'http://localhost:8000' }); var docClient = new AWS.DynamoDB.DocumentClient({"service": dynamodb}); verildiği için çalışmalı
WaffleSouffle

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

// AWS kimlik bilgilerini buraya aşağıdaki şekilde atayın:

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

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

9

Kodunuzu inceledim ve burada bölgeyi ayarlamadan önce AWS hizmetlerine bağlanıyorsunuz, bu yüzden önce bölgeyi güncellemenizi ve ardından hizmetlere bağlanmanızı veya aşağıdaki gibi bunların örneklerini oluşturmanızı öneririm -

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

Benim için aynı hata:

Çok sayıda deneme yaptıktan sonra aşağıdakilere karar verdim:

SEÇENEK 1

  1. set AWS_REGION, sadece yerel sisteme ortam değişkeni us-east-1(örnek)

Linux için:

dışa aktar AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLE
dışa aktar AWS_SECRET_ACCESS_KEY = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY
dışa aktar AWS_DEFAULT_REGION = us-east-1

Windows için
bkz: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html

  1. artık bölge için herhangi bir lambda değişkeni ayarlamaya gerek yok
  2. ayrıca kodda kullanmaya gerek yoktur, örneğin:

    • AWS.config.update(...), bu gerekli değil
    • AWS.S3()vb. bunlar sorunsuz çalışacaktır. S3 yerine herhangi bir aws hizmeti olabilir

Nadir bir durumda , kodda bazı varsayılanlar varsayılırsa ve bölgeyi göndermek zorunda kalırsanız,{'region': process.env.AWS_REGION})


SEÇENEK 2

Ortam değişkenleri yerine başka bir yol AWS CONFIG dosyasıdır:

Linux'ta aşağıdaki dosyaları oluşturabilirsiniz:

~ / .Aws / kimlik bilgileri

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

~ / .Aws / yapılandırma

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

Bkz. Https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html


Bunu nereye ayarlıyorsunuz environment variable? Ne demek istiyorsunuz local system?
Malcolm Salvador

@MalcolmSalvador Cevabı sizin için güncelledim, yukarıya bakın.
Manohar Reddy Poreddy

4

Bunu yapmanın doğru yolu bu olmayabilir, ancak tüm yapılandırmalarımı ayrı bir JSON dosyasında saklıyorum. Ve bu benim için sorunu çözüyor

AWS yapılandırmasını yüklemek için şunu yapıyorum:

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

config.aws yalnızca bir JSON dosyasıdır.


1

Ortak bir modül oluşturabilir ve istediğiniz bölgeye göre kullanabilirsiniz.

var AWS = require('aws-sdk')

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

ve olarak tüketin,

 var s3Client = s3.getClient(config.region)

fikir, s3'ü başlatmadan önce AWS yapılandırmasını güncellemektir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.