[javascript] Node.js AWS SDK에서 리전 구성
누군가 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'});
(...)
답변
명세서의 순서를 바꾸는 것은 어떻습니까? 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();
답변
“구성에 지역이 없음”이라는 동일한 문제가 발생했으며 제 경우에는 CLI 또는 Python SDK와 달리 Node SDK가 ~\.aws\config
파일 에서 읽지 않습니다 .
이를 해결하기위한 세 가지 옵션이 있습니다.
-
프로그래밍 방식으로 구성 (하드 코딩) :
AWS.config.update({region:'your-region'});
-
환경 변수를 사용하십시오. CLI가를 사용하는 동안
AWS_DEFAULT_REGION
Node SDK는AWS_REGION
. -
다음을 사용하여 JSON 파일에서로드
AWS.config.loadFromPath('./config.json');
JSON 형식 :
{
"accessKeyId": "akid",
"secretAccessKey": "secret",
"region": "us-east-1"
}
답변
AWS CLI로 작업하는 경우 ~ / .aws / config에 정의 된 기본 리전이있을 수 있습니다. 불행히도 JavaScript 용 AWS SDK는 기본적으로로드하지 않습니다. 로드하려면 env var를 정의하십시오.
AWS_SDK_LOAD_CONFIG=1
참조 https://github.com/aws/aws-sdk-js/pull/1391를
답변
dynamodb 연결을 생성 할 때 지역을 지정할 수 있습니다 (s3를 시도하지는 않았지만 작동해야 함).
var AWS = require('aws-sdk');
var dd = new AWS.DynamoDB({'region': 'us-east-1'});
답변
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();
답변
코드를 살펴 보았고 여기에서 리전을 설정하기 전에 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';
답변
나에게 같은 오류 :
많은 시련을 겪은 후 아래에 정착했습니다.
옵션 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을 참조하십시오.
- 이제 지역에 람다 변수를 설정할 필요가 없습니다.
-
또한 코드에서 사용할 필요가 없습니다. 예를 들면 다음과 같습니다.
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을 참조 하십시오.