Alguém pode explicar como corrigir um erro de configuração ausente com Node.js? Eu segui todos os exemplos da página de doc do aws, mas ainda recebo esse erro, não importa o quê.
{ [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 - -
Aqui está o meu código:
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'});
(...)
javascript
node.js
amazon-web-services
aws-sdk
Anejah Daniels
fonte
fonte
us-east-1
para todos os recursos, use região específica do recurso ao criar o objeto.Eu tive o mesmo problema "Região ausente na configuração" e no meu caso era que, ao contrário do CLI ou Python SDK, o Node SDK não lê o
~\.aws\config
arquivo.Para resolver isso, você tem três opções:
Configure-o programaticamente (codificado):
AWS.config.update({region:'your-region'});
Use uma variável de ambiente. Enquanto a CLI usa
AWS_DEFAULT_REGION
, o Node SDK usaAWS_REGION
.Carregar de um arquivo JSON usando
AWS.config.loadFromPath('./config.json');
Formato JSON:
fonte
AWS_DEFAULT_REGION
e SdkAWS_REGION
. Isso é algo não óbvio e algo que me mordeu no passado. Ele é destacado na parte inferior do AWS SDK For Javascript Developer Guide - Definindo a região, mas não é óbvioAWS_SDK_LOAD_CONFIG
paratrue
Se você trabalha com AWS CLI, provavelmente tem uma região padrão definida em ~ / .aws / config. Infelizmente, o SDK da AWS para JavaScript não o carrega por padrão. Para carregá-lo, defina env var
Veja https://github.com/aws/aws-sdk-js/pull/1391
fonte
set AWS_ACCESS_KEY_ID="KEY ID GOES HERE" set AWS_SECRET_ACCESS_KEY="SECRET KEY GOES HERE" set AWS_REGION="us-east-1"
Você pode especificar a região ao criar a conexão dynamodb (não tentei s3, mas também deve funcionar).
fonte
var dynamodb = new AWS.DynamoDB({ 'region': 'eu-west-1', 'endpoint': 'http://localhost:8000' }); var docClient = new AWS.DynamoDB.DocumentClient({"service": dynamodb});
Deve funcionar// atribua credenciais AWS aqui da seguinte maneira:
fonte
Analisei seu código e aqui você está se conectando aos serviços da AWS antes de definir a região, então sugiro que você atualize a região primeiro e, em seguida, conecte-se aos serviços ou crie uma instância como abaixo -
fonte
Mesmo erro para mim:
Depois de fazer muitos testes, resolvi o seguinte:
OPÇÃO 1
AWS_REGION
variável de ambiente apenas no sistema local, paraus-east-1
(exemplo)Para Linux:
Para Windows,
consulte: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
também, não há necessidade de usar no código, por exemplo:
AWS.config.update(...)
, isso não é necessárioAWS.S3()
etc., funcionarão sem problemas. No lugar do S3, pode haver qualquer serviço awsEm um caso raro, se em algum lugar alguns padrões forem assumidos no código e você for forçado a enviar região, use
{'region': process.env.AWS_REGION})
OPÇÃO 2
Em vez de variáveis de ambiente, outra maneira é o arquivo AWS CONFIG:
No Linux, você pode criar os arquivos abaixo:
Consulte https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
fonte
environment variable
? o que você quer dizer comlocal system
?Essa pode não ser a maneira certa de fazer isso, mas tenho todas as minhas configurações em um arquivo JSON separado. E isso resolve o problema para mim
Para carregar a configuração da AWS, eu faço o seguinte:
config.aws é apenas um arquivo JSON.
fonte
Você pode criar um módulo comum e usá-lo com base na região que deseja
e consumi-lo como,
a ideia é atualizar a configuração da AWS antes de instanciar s3
fonte