web-dev-qa-db-fra.com

Configuration de la région dans Node.js AWS SDK

Quelqu'un peut-il expliquer comment corriger une erreur de configuration manquante avec Node.js? J'ai suivi tous les exemples de la page de documentation de aws mais j'obtiens toujours cette erreur quoi qu'il en soit.

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

Voici mon 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

Pourquoi ne pas modifier l'ordre des instructions? Mettez à jour la configuration AWS avant d'instancier S3 et DD.

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

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

J'avais le même problème "Région manquante dans la configuration" et dans mon cas, c'est que, contrairement à la CLI ou au SDK Python, le SDK Node ne lit pas le fichier ~\.aws\config.

Pour résoudre ce problème, vous avez trois options:

  1. Configurez-le par programme (codé en dur): AWS.config.update({region:'your-region'});

  2. Utilisez une variable d'environnement. Alors que la CLI utilise AWS_DEFAULT_REGION, le kit de développement de nœud utilise AWS_REGION

  3. Charger à partir d'un fichier JSON avec AWS.config.loadFromPath('./config.json');

Format JSON:

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

Si vous travaillez avec AWS CLI, vous avez probablement une région par défaut définie dans ~/.aws/config. Malheureusement, AWS SDK for JavaScript ne le charge pas par défaut. Pour le charger, définissez env var 

AWS_SDK_LOAD_CONFIG=1

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

27
Peter Dotchev

Vous pouvez spécifier la région lors de la création de la connexion dynamodb (vous n'avez pas essayé s3, mais cela devrait également fonctionner).

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

Même erreur pour moi:

Après avoir fait beaucoup d'essais
J'ai choisi le ci-dessous: 

  1. définir la variable d'environnement AWS_REGION dans le système local uniquement, à us-east-1 (exemple)
  2. maintenant, pas besoin de définir des variables lambda pour la région
  3. aussi, pas besoin d'utiliser dans le code, par exemple: 

    AWS.config.update (...) cela n'est pas obligatoire
    AWS.XYZ () cela fonctionnera sans aucun problème XYZ est un service aws comme S3 ou autre

[[Dans de rares cas]] si quelque part certaines valeurs par défaut sont supposées dans le code et que vous êtes obligé d'envoyer une région, utilisez alors {'region': process.env.AWS_REGION})

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

// attribue les informations d'identification AWS ici de la manière suivante:

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

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

Ce n'est peut-être pas la bonne façon de le faire, mais j'ai toutes mes configurations dans un fichier JSON séparé. Et cela résout le problème pour moi

Pour charger la configuration AWS, procédez comme suit:

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

config.aws est juste un fichier JSON.

4
Tony

J'ai parcouru votre code et vous vous connectez aux services AWS avant de définir la région. Je vous suggère donc de mettre à jour la région en premier, puis de vous connecter aux services ou de créer une instance de ceux ci-dessous -

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

Vous pouvez créer un module commun et l’utiliser en fonction de la région que vous souhaitez utiliser.

var AWS = require('aws-sdk')

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

et le consomme comme,

 var s3Client = s3.getClient(config.region)

l'idée est de mettre à jour la configuration AWS avant d'instancier S3. 

0
Sajeetharan