2015-06-25 11 views
50

Qualcuno può spiegare come risolvere un errore di configurazione mancante con Node.js? Ho seguito tutti gli esempi dal aws doc page ma ottengo ancora questo errore, non importa quale.Configurazione regione in Node.js AWS SDK

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

Ecco il mio codice:

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

(...) 

risposta

105

Come di cambiare l'ordine delle istruzioni? Aggiornamento AWS config prima di creare un'istanza s3 e DD

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

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

questa dovrebbe essere la risposta accettata. ha funzionato alla grande! – dev

+0

Aveva il problema con i vogel. La stessa soluzione ha funzionato. –

+0

Aveva il problema con SNS. La stessa soluzione ha funzionato. – tzachs

38

ho avuto lo stesso problema "Regione in config Missing" e nel mio caso è stato che, a differenza del CLI o Python SDK, l'SDK Nodo non leggere dal file ~\.aws\config.

Per risolvere questo problema, sono disponibili tre opzioni:

  1. configurarlo a livello di codice (hard-coded): AWS.config.update({region:'your-region'});

  2. utilizzare una variabile di ambiente. Mentre la CLI utilizza AWS_DEFAULT_REGION, l'SDK del nodo utilizza AWS_REGION.

  3. Carica da un file JSON utilizzando AWS.config.loadFromPath('./config.json'); formato

JSON:

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

Lol. Quindi l'SDK leggerà dal file delle credenziali condivise, ma la configurazione è sempre associata a questo, dimenticatene! – duhseekoh

+1

Complimenti per aver evidenziato che CLI utilizza "AWS_DEFAULT_REGION' e Sdk" AWS_REGION'. Questa è una cosa non ovvia e qualcosa che mi ha morso in passato. È evidenziato nella parte inferiore di [AWS SDK per Javascript Developer Guide - Setting Region] (https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-region.html) ma non è ovvio –

+1

L'SDK può leggere da ~/.aws/config, ma è necessario impostare la variabile di ambiente 'AWS_SDK_LOAD_CONFIG' su' true' –

4

Questo non può essere il modo giusto per farlo, ma ho tutti i miei file di configurazione in un JSON separata file. E questo non risolvere il problema per me

per caricare la configurazione AWS, faccio questo:

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

config.aws è solo un file JSON.

8

È possibile specificare la regione durante la creazione della connessione dynamodb (non aver provato s3 ma dovrebbe funzionare anche).

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

new AWS.DynamoDB ({'region': 'us-east-1'}}) non funziona, devi chiamare AWS.config.update ({region: 'your region'}) – HaneTV

+1

Al momento sto testando con dynamodb [eseguito localmente] (http: //docs.aws.amazon. it/amazondynamodb/latest/gettingstartedguide/GettingStarted.Download.html) in modo che il comportamento possa essere diverso. Funziona sicuramente con tutto il codice che sto usando in quell'ambiente. 'var dynamodb = new AWS.DynamoDB ({ 'region': 'eu-west-1', 'endpoint': 'http: // localhost: 8000' }); var docClient = new AWS.DynamoDB.DocumentClient ({"servizio": dynamodb}); ' Se il lavoro è stato assegnato è [nella documentazione] (http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS /DynamoDB.html#constructor-property) – WaffleSouffle

6

stesso errore per me:

Dopo aver fatto un sacco di prove
ho optato per il seguito:

  1. impostare la variabile d'ambiente AWS_REGION nel sistema locale solo per noi- est-1 (esempio)
  2. ora, non è necessario impostare alcuna variabile lambda per la regione
  3. anche, no nee d da utilizzare nel codice, ad esempio:

    AWS.config.update (...) non è necessario
    AWS.XYZ() questo funzionerà senza problemi XYZ è alcun AWS servizio come S3 o altro

[[In un caso raro]] se da qualche parte alcuni valori di default sono assunti nel codice e si è costretti a inviare regione, quindi utilizzare { 'regione': process.env.AWS_REGION})

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

// assegna le credenziali AWS qui nel seguente modo:

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

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

Se si lavora con AWS CLI, probabilmente avete una regione di default definito in ~/.aws/config. Sfortunatamente AWS SDK per JavaScript non lo carica per impostazione predefinita. Per caricarlo definire env var

AWS_SDK_LOAD_CONFIG=1 

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

+0

GRAZIE! Avevo già eseguito gli altri comandi SET. Tuttavia questo era necessario per usarli nella mia app Node.JS. '' 'set AWS_ACCESS_KEY_ID = "ID KEY va qui" set AWS_SECRET_ACCESS_KEY = "SECRET KEY va qui" set AWS_REGION = "us-est-1"' '' – SteckDEV

0

è possibile creare un modulo comune e usarlo basa sulla regione che si desidera

var AWS = require('aws-sdk') 

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

e consumare come,

var s3Client = s3.getClient(config.region) 

l'idea è di aggiornare la configurazione di AWS prima di istanziare s3