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.