নোড.জেএস এডাব্লুএস এসডিকে অঞ্চল কনফিগার করছে


123

কেউ কীভাবে Node.js এর সাহায্যে একটি হারিয়ে যাওয়া কনফিগার ত্রুটিটি ঠিক করবেন তা ব্যাখ্যা করতে পারেন? আমি অ্যাউজ ডক পৃষ্ঠা থেকে সমস্ত উদাহরণ অনুসরণ করেছি তবে এখনও যাই হোক না কেন এই ত্রুটিটি পেয়েছি।

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

বিবৃতি ক্রম পরিবর্তন সম্পর্কে? এস 3 এবং ডিডি ইনস্ট্যান্ট করার আগে অ্যাডাব্লুএস কনফিগারেশন আপডেট করুন

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সমস্ত সংস্থান হিসাবে সেট করবে , অবজেক্ট তৈরি করার সময় সংস্থানগুলি নির্দিষ্ট অঞ্চল ব্যবহার করবে।
অতুল কুমার

এটা চিন্তা করার চেষ্টা ছাড়া শুধু একটি হ্যাক কেন nodejs আওস ক্লায়েন্ট উপেক্ষা ~ \ .aws \ কনফিগ সেটিংস
ffeast

ধন্যবাদ, ক্লাউডওয়াচ ইনস্ট্যান্ট করার পরে httpOptions স্থাপন করার সময় আমার এই সমস্যাটি হয়েছিল
এলজেটি

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
SDK এর ~ / .aws / কনফিগ থেকে পড়তে পারেন, কিন্তু আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে হবে AWS_SDK_LOAD_CONFIGকরতেtrue
গ্যারেথ Oakley,

2
এটা আমার সমস্যা ছিল। আমি ভেবেছিলাম এটি বোকা হবে না, এবং আমার ধারণা এটি আমার ভুল ছিল।
জাস্টিন ফোর্স

63

আপনি যদি এডাব্লুএস সিএলআইয়ের সাথে কাজ করেন তবে আপনার সম্ভবত সম্ভবত একটি ডিফল্ট অঞ্চল ~ / .aws / config এ সংজ্ঞায়িত করা আছে। দুর্ভাগ্যক্রমে জাভাস্ক্রিপ্টের জন্য AWS SDK এটি ডিফল্টরূপে লোড করে না। এটি লোড করতে env var সংজ্ঞায়িত করুন

AWS_SDK_LOAD_CONFIG=1

Https://github.com/aws/aws-sdk-js/pull/1391 দেখুন


2
ধন্যবাদ! আমি ইতিমধ্যে অন্যান্য এসইটি কমান্ড কার্যকর করেছি। তবে এটি আমার নোড.জেএস অ্যাপে সেগুলি ব্যবহার করা দরকার ছিল। set AWS_ACCESS_KEY_ID="KEY ID GOES HERE" set AWS_SECRET_ACCESS_KEY="SECRET KEY GOES HERE" set AWS_REGION="us-east-1"
স্টেকডেভিভি

AWS_SDK_LOAD_CONFIG এসডিকে পরিবর্তন লগ অনুযায়ী 2.44.0 হিসাবে সমর্থিত।
জারোমড

2
নিখুঁতভাবে কাজ করেছে এবং আপনার স্ক্রিপ্টে কোনও কিছু হার্ডকোডিংয়ের দরকার নেই: কেবল প্রসেস.েনভ.এডাব্লুএসএসডিডি_এলএডি_কোনফিগ = 1;
এডাব্লুএস

দুর্দান্ত কাজ করেছে তথ্যের জন্য যে কেউ ভিসকোড এবং ব্যাশ শেল ব্যবহার করছে আপনি নীচের মতো করে viভিরমেন্ট ভেরিয়েবলটি যুক্ত করতে পারেন: - $ রফতানি করুন AWS_SDK_LOAD_CONFIG = 1
টিম নিউটন

12

ডায়নামডব সংযোগ তৈরি করার সময় আপনি অঞ্চলটি নির্দিষ্ট করতে পারেন (এস 3 চেষ্টা করেন নি তবে এটিও কার্যকর হওয়া উচিত)।

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

1
নতুন AWS.DynamoDB (region 'অঞ্চল': 'us-પૂર્વ-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}); কাজ করা উচিত
ওয়াফল সাফল ২

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

আমি আপনার কোডটি দিয়েছি এবং এখানে আপনি অঞ্চল নির্ধারণের আগে আপনি ডাব্লুএস পরিষেবাগুলিতে সংযোগ করছেন, তাই আমি আপনাকে প্রথমে অঞ্চলটি আপডেট করার এবং তারপরে পরিষেবাগুলিতে সংযুক্ত হওয়ার বা নীচের মতোগুলির উদাহরণ তৈরি করার পরামর্শ দিচ্ছি -

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 = আমাদের-পূর্ব-পূর্ব 1

উইন্ডোজের জন্য
দেখুন: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html

  1. এখন, অঞ্চলের জন্য কোনও ল্যাম্বদা ভেরিয়েবল সেট করার দরকার নেই
  2. এছাড়াও, কোডে ব্যবহার করার দরকার নেই, উদাহরণস্বরূপ:

    • AWS.config.update(...), এটি প্রয়োজন হয় না
    • AWS.S3(), ইত্যাদি, এগুলি কোনও সমস্যা ছাড়াই কাজ করবে। এস 3 এর জায়গায়, কোনও আওস পরিষেবা থাকতে পারে

বিরল ক্ষেত্রে যদি কোথাও কোথাও কিছু ডিফল্ট কোড ধরে নেওয়া হয় এবং আপনি অঞ্চল পাঠাতে বাধ্য হন তবে ব্যবহার করুন{'region': process.env.AWS_REGION})


বিকল্প 2

এনভায়রনমেন্ট ভেরিয়েবলের পরিবর্তে অন্য উপায় হ'ল এডাব্লুএস কনফিগ ফাইল:

লিনাক্সে আপনি নীচে ফাইলগুলি তৈরি করতে পারেন:

~ / .Aws / পরিচয়পত্র

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

~ / .Aws / কনফিগ

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

Https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html দেখুন


আপনি কোথায় সেট করেন environment variable? তুমি কি বলতে চাচ্ছো local system?
ম্যালকম সালভাদোর

@ মালকোলমসালভাদোর আপনার জন্য উত্তর আপডেট করেছি, উপরে দেখুন।
মনোহর রেড্ডি পোরেডি

4

এটি করার সঠিক উপায় এটি নাও হতে পারে তবে আমার নিজের সমস্ত কনফিগার আলাদা জেএসওএন ফাইলে রয়েছে। এবং এটি আমার জন্য সমস্যাটি স্থির করে

এডাব্লুএস কনফিগারেশন লোড করতে, আমি এটি করি:

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)

ধারণাটি হ'ল এস 3 ইনস্ট্যান্ট করার আগে অ্যাডাব্লুএস কনফিগারেশন আপডেট করা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.