web-dev-qa-db-ja.com

Node.js AWS SDKでリージョンを設定する

誰かがNode.jsで不足している設定エラーを修正する方法を説明できますか? aws doc page のすべての例に従いましたが、それでもこのエラーが発生します。

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

(...)
82
Anejah Daniels

ステートメントの順序を変更するのはどうですか? 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();
162
umbrel

「設定に領域がありません」という同じ問題がありました。私の場合、CLIまたはPython SDKとは異なり、Node SDKは~\.aws\configファイルから読み取れませんでした。 。

これを解決するには、3つのオプションがあります。

  1. プログラムで設定(ハードコード):AWS.config.update({region:'your-region'});

  2. 環境変数を使用します。 CLIはAWS_DEFAULT_REGIONを使用しますが、Node SDKはAWS_REGIONを使用します。

  3. AWS.config.loadFromPath('./config.json');を使用してJSONファイルから読み込む

JSON形式:

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

AWS CLIを使用する場合、おそらく〜/ .aws/configにデフォルトのリージョンが定義されています。残念ながら、AWS SDK for JavaScriptはデフォルトではそれをロードしません。ロードするにはenv varを定義します

AWS_SDK_LOAD_CONFIG=1

https://github.com/aws/aws-sdk-js/pull/1391 を参照してください

35
Peter Dotchev

Dynamodb接続を作成するときにリージョンを指定できます(s3を試していませんが、それでも動作するはずです)。

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

私と同じエラー:

多くの試行を行った後
私は以下に同意しました:

  1. ローカルシステムのみでAWS_REGION環境変数をus-east-1に設定します(例)
  2. 現在、領域にラムダ変数を設定する必要はありません
  3. また、コードで使用する必要はありません。例:

    AWS.config.update(...)これは必須ではありません
    AWS.XYZ()これは問題なく動作しますXYZはS3などのawsサービスです

[[まれなケース]]コードのどこかでデフォルトが想定され、リージョンの送信を強制される場合、{'region':process.env.AWS_REGION}を使用します)

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();
5
BHUVNESH KUMAR

これは正しい方法ではないかもしれませんが、すべての構成を個別のJSONファイルに収めています。そして、これは私にとって問題を解決します

AWS設定を読み込むには、次の操作を行います。

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

config.awsは単なるJSONファイルです。

4
Tony

私はあなたのコードを調べましたが、ここではリージョンを設定する前に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';
2
Himanshu Tongya

共通のモジュールを作成し、目的の地域に基づいて使用できます

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設定を更新することです

0
Sajeetharan