在Node.js AWS SDK中configuration区域
有人可以解释如何解决与Node.js丢失的configuration错误? 我已经遵循aws doc页面的所有例子,但是无论如何,我仍然会得到这个错误。
{ [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之前更新AWSconfiguration
var AWS = require('aws-sdk'); AWS.config.update({region:'us-east-1'}); var dd = new AWS.DynamoDB(); var s3 = new AWS.S3();
我有同样的问题“在configuration丢失区域”,在我的情况是这样的,不像在CLI或Python SDK中,Node SDK不会从~\.aws\config
文件中读取。
要解决这个问题,你有三个select:
-
以编程方式configuration(硬编码):
AWS.config.update({region:'your-region'});
-
使用一个环境variables。 CLI使用
AWS_DEFAULT_REGION
,Node SDK使用AWS_REGION
。 -
使用
AWS.config.loadFromPath('./config.json');
从JSON文件中加载
JSON格式:
{ "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-east-1" }
您可以在创builddynamodb连接时指定区域(尚未尝试s3,但也应该可以)。
var AWS = require('aws-sdk'); var dd = new AWS.DynamoDB({'region': 'us-east-1'});
这可能不是正确的方法,但我有我的所有configuration在一个单独的JSON文件。 这确实解决了我的问题
要加载AWSconfiguration,我这样做:
var awsConfig = config.aws; AWS.config.region = awsConfig.region; AWS.config.credentials = { accessKeyId: awsConfig.accessKeyId, secretAccessKey: awsConfig.secretAccessKey }
config.aws只是一个JSON文件。
对我来说同样的错误:
经过大量的试验
我已经解决了以下问题:
- 只在本地系统中设置AWS_REGION环境variables,us-east-1(示例)
- 现在,不需要为区域设置任何lambdavariables
-
另外,不需要在代码中使用,例如:
AWS.config.update(…)这不是必需的
AWS.XYZ()这将工作没有任何问题XYZ是像S3或其他任何aws服务
[[在极less数情况下]]如果代码中假设某些默认值,并且您被迫发送区域,则使用{'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();
如果您使用AWS CLI,则可能在〜/ .aws / config中定义了一个默认区域。 不幸的是,AWS SDK for JavaScript默认不加载它。 要加载它,请定义env var
AWS_SDK_LOAD_CONFIG=1
您可以创build一个通用模块,并根据您想要的区域来使用它
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之前更新AWSconfiguration