Node.js AWS SDK에서 리전 구성


123

누군가 Node.js로 누락 된 구성 오류를 수정하는 방법을 설명 할 수 있습니까? aws 문서 페이지 의 모든 예제를 따랐 지만 어쨌든이 오류가 발생합니다.

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

명세서의 순서를 바꾸는 것은 어떻습니까? s3 및 dd를 인스턴스화하기 전에 AWS 구성 업데이트

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

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

1
이것이 실패한 이유를 찾는 시간 .. 이것은 그것을 고쳤다.
FredArters

그러면 us-east-1모든 리소스 에 대해 지역이 설정되고 개체를 만드는 동안 리소스 특정 지역을 사용합니다.
아툴 쿠마르

nodejs aws 클라이언트가 ~ \ .aws \ config 설정을 무시하는 이유를 파악하지 않고 그냥 해킹 일뿐입니다.
ffeast

감사합니다. 이것은 cloudwatch를 인스턴스화 한 후 httpOptions를 설정할 때 내가 가진 문제였습니다
LJT

87

"구성에 지역이 없음"이라는 동일한 문제가 발생했으며 제 경우에는 CLI 또는 Python SDK와 달리 Node SDK가 ~\.aws\config파일 에서 읽지 않습니다 .

이를 해결하기위한 세 가지 옵션이 있습니다.

  1. 프로그래밍 방식으로 구성 (하드 코딩) : AWS.config.update({region:'your-region'});

  2. 환경 변수를 사용하십시오. CLI가를 사용하는 동안 AWS_DEFAULT_REGIONNode SDK는 AWS_REGION.

  3. 다음을 사용하여 JSON 파일에서로드 AWS.config.loadFromPath('./config.json');

JSON 형식 :

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

3
Lol. 따라서 SDK는 공유 자격 증명 파일에서 읽지 만 항상 그와 쌍을 이루는 구성은 잊어 버리십시오!
duhseekoh

10
그 CLI 사용하는 강조 표시에 대한 명예 AWS_DEFAULT_REGION와 SDK를 AWS_REGION. 그것은 분명하지 않은 것이고 과거에 나를 물었던 것입니다. AWS SDK for Javascript 개발자 안내서-리전 설정 하단에 강조 표시되어 있지만 명확하지 않습니다
Dimitry K

12
SDK는 ~ / .aws / config에서 읽을 수 있지만 환경 변수 AWS_SDK_LOAD_CONFIG를 다음으로 설정해야 합니다.true
Gareth Oakley

2
이것은 내 문제였습니다. 나는 그것이 어리석지 않을 것이라고 생각했고 그것이 내 실수라고 생각합니다.
Justin Force

63

AWS CLI로 작업하는 경우 ~ / .aws / config에 정의 된 기본 리전이있을 수 있습니다. 불행히도 JavaScript 용 AWS SDK는 기본적으로로드하지 않습니다. 로드하려면 env var를 정의하십시오.

AWS_SDK_LOAD_CONFIG=1

참조 https://github.com/aws/aws-sdk-js/pull/1391를


2
감사합니다! 이미 다른 SET 명령을 실행했습니다. 그러나 이것은 Node.JS 앱에서 사용하는 데 필요했습니다. set AWS_ACCESS_KEY_ID="KEY ID GOES HERE" set AWS_SECRET_ACCESS_KEY="SECRET KEY GOES HERE" set AWS_REGION="us-east-1"
SteckDEV

AWS_SDK_LOAD_CONFIG는 SDK 변경 로그에 따라 2.44.0부터 지원됩니다.
jarmod

2
완벽하게 작동했으며 스크립트에 아무것도 하드 코딩 할 필요가 없습니다. process.env.AWS_SDK_LOAD_CONFIG = 1 만 입력하면됩니다. AWS를 포함하기 전에
sashok_bg

훌륭하게 작동했습니다. vscode 및 bash 쉘을 사용하는 모든 사용자는 다음과 같이 enviornment 변수를 추가 할 수 있습니다.-$ export AWS_SDK_LOAD_CONFIG = 1
Tim Newton

12

dynamodb 연결을 생성 할 때 지역을 지정할 수 있습니다 (s3를 시도하지는 않았지만 작동해야 함).

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

1
new AWS.DynamoDB ({ 'region': 'us-east-1'})가 작동하지 않습니다. AWS.config.update ({region : 'your region'})를 호출해야합니다.
HaneTV

1
현재 로컬에서 실행되는 dynamodb 테스트 중이므로 동작이 다를 수 있습니다. 해당 환경에서 사용중인 모든 코드에서 확실히 작동합니다. var dynamodb = new AWS.DynamoDB({ 'region': 'eu-west-1', 'endpoint': 'http://localhost:8000' }); var docClient = new AWS.DynamoDB.DocumentClient({"service": dynamodb}); 그것의 주어진 작업을해야 설명서에
WaffleSouffle

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

코드를 살펴 보았고 여기에서 리전을 설정하기 전에 AWS 서비스에 연결하고 있으므로 먼저 리전을 업데이트 한 다음 서비스에 연결하거나 아래와 같이 서비스에 연결하는 것이 좋습니다.

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(예)

Linux의 경우 :

export AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION = us-east-1

Windows의
경우 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html을 참조하십시오.

  1. 이제 지역에 람다 변수를 설정할 필요가 없습니다.
  2. 또한 코드에서 사용할 필요가 없습니다. 예를 들면 다음과 같습니다.

    • AWS.config.update(...), 이것은 필수 가 아닙니다.
    • AWS.S3(), 등은 문제없이 작동합니다. S3 대신 AWS 서비스가있을 수 있습니다.

드물지만 코드에서 일부 기본값이 가정되고 지역을 보내야하는 경우 다음을 사용합니다.{'region': process.env.AWS_REGION})


옵션 2

환경 변수 대신 다른 방법은 AWS CONFIG 파일입니다.

Linux에서는 아래 파일을 만들 수 있습니다.

~ / .aws / credentials

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

~ / .aws / config

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

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html을 참조 하십시오.


이것을 어디에 설정 environment variable합니까? 무슨 뜻 local system이야?
Malcolm Salvador

@MalcolmSalvador 나는 당신을 위해 답변을 업데이트했습니다. 위를 참조하십시오.
Manohar Reddy Poreddy

4

이것이 올바른 방법이 아닐 수도 있지만 모든 구성이 별도의 JSON 파일에 있습니다. 그리고 이것은 나를 위해 문제를 해결합니다.

AWS 구성을로드하려면 다음을 수행합니다.

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)

아이디어는 s3를 인스턴스화하기 전에 AWS 구성을 업데이트하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.