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

बयानों के क्रम को बदलने के बारे में कैसे? S3 और dd को इंस्टेंट करने से पहले AWS कॉन्फिग को अपडेट करें

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

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

1
यह असफल क्यों हो रहा था इसकी खोज के घंटे .. यह तय कर दिया।
फ्रेडअर्स

यह us-east-1सभी संसाधनों के लिए क्षेत्र सेट करेगा , ऑब्जेक्ट बनाते समय संसाधन विशिष्ट क्षेत्र का उपयोग करें।
अतुल कुमार

यह सिर्फ यह पता लगाने की कोशिश किए बिना कि हैक क्यों है, नोडज अवीस क्लाइंट को अनदेखा करता है ~ \ .aws \ config सेटिंग्स
20

धन्यवाद, यही वह समस्या थी जब मैंने क्लाउडवॉच को इंस्टेंट करने के बाद httpOptions सेट किया था
LJT

87

मेरे पास एक ही मुद्दा था "कॉन्फ़िगरेशन में मिसिंग क्षेत्र" और मेरे मामले में यह था कि सीएलआई या पायथन एसडीके के विपरीत, नोड एसडीके ~\.aws\configफ़ाइल से नहीं पढ़ेगा ।

इसे हल करने के लिए, आपके पास तीन विकल्प हैं:

  1. इसे प्रोग्रामेटिक रूप से कॉन्फ़िगर करें (हार्ड-कोडेड): AWS.config.update({region:'your-region'});

  2. एक पर्यावरण चर का उपयोग करें। जबकि सीएलआई का उपयोग करता है AWS_DEFAULT_REGION, नोड एसडीके का उपयोग करता है AWS_REGION

  3. JSON फ़ाइल का उपयोग करके लोड करें AWS.config.loadFromPath('./config.json');

JSON प्रारूप:

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

3
जबरदस्त हंसी। तो एसडीके साझा किए गए क्रेडेंशियल फ़ाइल से पढ़ेगा, लेकिन इसके साथ कॉन्फ़िगर किया गया कॉन्फ़िगरेशन हमेशा इसे भूल जाता है!
दुहसेकोह

10
इस बात पर प्रकाश डालने के लिए कुडोस सीएलआई का उपयोग करता है AWS_DEFAULT_REGIONऔर एसडीके AWS_REGION। यह कुछ गैर-स्पष्ट है और अतीत में मुझे जो कुछ है। यह जावास्क्रिप्ट विकासक गाइड के लिए एडब्ल्यूएस एसडीके के निचले भाग पर प्रकाश डाला गया है - सेटिंग क्षेत्र लेकिन यह स्पष्ट नहीं है
दिमित्री के

12
एसडीके ~ / .aws / config से पढ़ सकते हैं, लेकिन आप वातावरण चर निर्धारित करने की आवश्यकता AWS_SDK_LOAD_CONFIGके लिएtrue
गैरेथ ओकले

2
यह मेरी समस्या थी। मैंने सोचा कि यह बेवकूफ नहीं होगा, और मुझे लगता है कि मेरी गलती थी।
जस्टिन फोर्स

63

यदि आप AWS सीएलआई के साथ काम करते हैं, तो संभवतः आपके पास ~ / .aws / config में परिभाषित एक डिफ़ॉल्ट क्षेत्र है। दुर्भाग्य से जावास्क्रिप्ट के लिए AWS SDK इसे डिफ़ॉल्ट रूप से लोड नहीं करता है। इसे लोड करने के लिए 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

SDK परिवर्तन लॉग के अनुसार AWS_SDK_LOAD_CONFIG को 2.44.0 के रूप में समर्थित किया गया है।
जमरोड

2
पूरी तरह से काम किया है और आपको अपनी स्क्रिप्ट में कुछ भी हार्डकोड करने की आवश्यकता नहीं है: बस प्रक्रिया करें ।env.AWS_SDK_LOAD_CONFIG = 1; AWS से पहले
sashok_bg

बढ़िया काम किया। Vscode और bash शेल का उपयोग करने वाले किसी भी व्यक्ति की जानकारी के लिए आप निम्न प्रकार से एनवायरनमेंट वैरिएबल जोड़ सकते हैं: - $ Export AWS_SDK_LOAD_CONFIG = 1
टिम न्यूटन

12

डायनामोडब कनेक्शन बनाते समय आप क्षेत्र को निर्दिष्ट कर सकते हैं (s3 की कोशिश नहीं की है, लेकिन यह भी काम करना चाहिए)।

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

1
नया AWS.DynamoDB ({'क्षेत्र': 'us-east-1'}) काम नहीं करता है, आपको AWS.config.update ({क्षेत्र: 'आपका क्षेत्र'}) पर कॉल करने की आवश्यकता है
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(उदाहरण के लिए)

लिनक्स के लिए:

निर्यात AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLE
निर्यात AWS_SECRET_ACCESS_KEY = wJalrXUtnFEMI / K7MDENG (bPxRfiCYEXAMPLEKEY
निर्यात AWS_DEFAULT_REGION = हमें-पूर्व)

विंडोज के लिए
देखें: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html

  1. अब, क्षेत्र के लिए कोई लंबो चर निर्धारित करने की आवश्यकता नहीं है
  2. उदाहरण के लिए, कोड में उपयोग करने की आवश्यकता नहीं:

    • AWS.config.update(...), यह आवश्यक नहीं है
    • AWS.S3(), आदि, ये बिना किसी समस्या के काम करेंगे। S3 के स्थान पर, कोई भी सेवा हो सकती है

एक दुर्लभ मामले में अगर कहीं कुछ चूक कोड में मान ली जाती है और आपको क्षेत्र भेजने के लिए मजबूर किया जाता है, तो उपयोग करें{'region': process.env.AWS_REGION})


विकल्प 2

पर्यावरण चर के बजाय, दूसरा तरीका AWS CONFIG फ़ाइल है:

लिनक्स पर आप नीचे फाइल बना सकते हैं:

~ / .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-fin.html देखें


आप इसे कहां सेट करते हैं environment variable? आपका क्या मतलब है local system?
मैल्कम सल्वाडोर

@MalcolmSalvador मैंने आपके लिए अद्यतन उत्तर दिया है, ऊपर देखें।
मनोहर रेड्डी

4

यह करने का सही तरीका नहीं हो सकता है, लेकिन मेरे पास एक अलग JSON फ़ाइल में मेरे सभी कॉन्फ़िगरेशन हैं। और यह मेरे लिए समस्या को ठीक करता है

एडब्ल्यूएस कॉन्फ़िगरेशन को लोड करने के लिए, मैं यह करता हूं:

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)

यह विचार S3 के इंस्टेंट करने से पहले AWS कॉन्फिग को अपडेट करना है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.