誰かが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'});
(...)
ステートメントの順序を変更するのはどうですか? 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
ファイルから読み取れませんでした。 。
これを解決するには、3つのオプションがあります。
プログラムで設定(ハードコード):AWS.config.update({region:'your-region'});
環境変数を使用します。 CLIはAWS_DEFAULT_REGION
を使用しますが、Node SDKはAWS_REGION
を使用します。
AWS.config.loadFromPath('./config.json');
を使用してJSONファイルから読み込む
JSON形式:
{
"accessKeyId": "akid",
"secretAccessKey": "secret",
"region": "us-east-1"
}
AWS CLIを使用する場合、おそらく〜/ .aws/configにデフォルトのリージョンが定義されています。残念ながら、AWS SDK for JavaScriptはデフォルトではそれをロードしません。ロードするにはenv varを定義します
AWS_SDK_LOAD_CONFIG=1
Dynamodb接続を作成するときにリージョンを指定できます(s3を試していませんが、それでも動作するはずです)。
var AWS = require('aws-sdk');
var dd = new AWS.DynamoDB({'region': 'us-east-1'});
私と同じエラー:
多くの試行を行った後
私は以下に同意しました:
また、コードで使用する必要はありません。例:
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();
これは正しい方法ではないかもしれませんが、すべての構成を個別のJSONファイルに収めています。そして、これは私にとって問題を解決します
AWS設定を読み込むには、次の操作を行います。
var awsConfig = config.aws;
AWS.config.region = awsConfig.region;
AWS.config.credentials = {
accessKeyId: awsConfig.accessKeyId,
secretAccessKey: awsConfig.secretAccessKey
}
config.awsは単なるJSONファイルです。
私はあなたのコードを調べましたが、ここではリージョンを設定する前に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';
共通のモジュールを作成し、目的の地域に基づいて使用できます
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設定を更新することです