wake-up-neo.net

Region in Node.js AWS SDK konfigurieren

Kann jemand erklären, wie man einen fehlenden Konfigurationsfehler mit Node.js behebt? Ich habe alle Beispiele von der aws doc-Seite verfolgt aber ich bekomme immer noch diesen Fehler.

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

Hier ist mein Code:

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

(...)
69
Anejah Daniels

Wie wäre es, wenn Sie die Reihenfolge der Anweisungen ändern? Aktualisieren Sie die AWS-Konfiguration, bevor Sie s3 und dd instantiieren

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

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

Ich hatte das gleiche Problem "Missing region in config" und in meinem Fall war es so, dass das Node-SDK im Gegensatz zu CLI oder Python SDK nicht aus der Datei ~\.aws\config liest.

Um dies zu lösen, haben Sie drei Möglichkeiten:

  1. Konfigurieren Sie es programmgesteuert (hartcodiert): AWS.config.update({region:'your-region'});

  2. Verwenden Sie eine Umgebungsvariable. Während die CLI AWS_DEFAULT_REGION verwendet, verwendet das Node-SDK AWS_REGION

  3. Laden aus einer JSON-Datei mit AWS.config.loadFromPath('./config.json');

JSON-Format:

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

Wenn Sie mit AWS CLI arbeiten, haben Sie wahrscheinlich eine Standardregion definiert, die in ~/.aws/config definiert ist. Leider wird sie von AWS SDK für JavaScript nicht standardmäßig geladen. Um es zu laden, definieren Sie env var 

AWS_SDK_LOAD_CONFIG=1

Siehe https://github.com/aws/aws-sdk-js/pull/1391

27
Peter Dotchev

Sie können den Bereich angeben, wenn Sie die Dynamodb-Verbindung erstellen.

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

Gleicher Fehler für mich:

Nach vielen Versuchen
Ich habe mich für das Folgende entschieden: 

  1. setzen Sie die Umgebungsvariable AWS_REGION nur im lokalen System auf us-east-1 (Beispiel).
  2. jetzt müssen keine Lambda-Variablen für die Region festgelegt werden
  3. keine Notwendigkeit, in Code zu verwenden, zum Beispiel: 

    AWS.config.update (...) ist nicht erforderlich
    AWS.XYZ () dies wird problemlos funktionieren XYZ ist ein aws-Dienst wie S3 oder ein anderer

[[In seltenen Fällen]] Wenn im Code einige Standardeinstellungen angenommen werden und Sie gezwungen sind, Region zu senden, verwenden Sie {'region': process.env.AWS_REGION}

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

// Weisen Sie AWS-Anmeldeinformationen hier folgendermaßen zu:

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

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

Dies ist möglicherweise nicht der richtige Weg, aber ich habe alle meine Konfigurationsdateien in einer separaten JSON-Datei. Und das behebt das Problem für mich

So laden Sie die AWS-Konfiguration:

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

config.aws ist nur eine JSON-Datei.

4
Tony

Ich habe Ihren Code durchgearbeitet und hier stellen Sie eine Verbindung zu AWS-Diensten her, bevor Sie die Region festlegen. Daher empfehle ich Ihnen, zuerst die Region zu aktualisieren und dann eine Verbindung zu Diensten herzustellen oder eine Instanz von diesen wie folgt zu erstellen:

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';
1
Himanshu Tongya

Sie können ein gemeinsames Modul erstellen und basierend auf der gewünschten Region verwenden

var AWS = require('aws-sdk')

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

und verbrauchen es als

 var s3Client = s3.getClient(config.region)

die Idee ist, die AWS-Konfiguration vor dem Instantiieren von S3 zu aktualisieren 

0
Sajeetharan