在Node.js AWS SDK中配置区域

Ane*_*els 98 javascript amazon-web-services node.js aws-sdk

有人可以解释如何使用Node.js修复丢失的配置错误吗?我已经按照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 - -
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

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

(...)
Run Code Online (Sandbox Code Playgroud)

umb*_*rel 184

如何改变陈述的顺序?在实例化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();
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.工作得很好! (6认同)
  • 花了几个小时寻找为什么失败了..这解决了它。 (3认同)
  • 这只是一个 hack,没有试图找出为什么 nodejs aws 客户端忽略 ~\.aws\config 设置 (3认同)

Zan*_*non 73

我有同样的问题"配置中缺少区域",在我的情况下,与CLI或Python SDK不同,Node SDK不会从~\.aws\config文件中读取.

要解决此问题,您有三种选择:

  1. 以编程方式配置它(硬编码): AWS.config.update({region:'your-region'});

  2. 使用环境变量.CLI使用时AWS_DEFAULT_REGION,Node SDK使用AWS_REGION.

  3. 使用JSON文件加载 AWS.config.loadFromPath('./config.json');

JSON格式:

{ 
    "accessKeyId": "akid", 
    "secretAccessKey": "secret", 
    "region": "us-east-1" 
}
Run Code Online (Sandbox Code Playgroud)

  • SDK可以从〜/ .aws/config读取,但是您需要将环境变量`AWS_SDK_LOAD_CONFIG`设置为`true` (9认同)
  • 值得称赞的是,CLI使用了"AWS_DEFAULT_REGION"和Sdk"AWS_REGION".这是不明显的事情,也是过去让我感到困惑的事情.它在[AWS SDK For Javascript开发人员指南 - 设置区域](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-region.html)的底部突出显示,但这并不明显 (7认同)
  • 这是我的问题。我认为这不会是愚蠢的,我想那是我的错误。 (3认同)
  • 大声笑。因此,SDK将从共享的凭证文件中读取内容,但是始终与之配对的配置,就算了! (2认同)

Pet*_*hev 51

如果您使用AWS CLI,则可能在〜/ .aws/config中定义了默认区域.遗憾的是,AWS SDK for JavaScript默认情况下不会加载它.要加载它,请定义env var

AWS_SDK_LOAD_CONFIG=1
Run Code Online (Sandbox Code Playgroud)

请参阅https://github.com/aws/aws-sdk-js/pull/1391

  • 谢谢!我已经执行了其他SET命令。但是,这是在我的Node.JS应用中使用它们所必需的。```设置AWS_ACCESS_KEY_ID =“在这里有密钥ID”设置AWS_SECRET_ACCESS_KEY =“在这里有密钥SECRET”设置AWS_REGION =“ us-east-1” (2认同)
  • 工作完美,不需要在脚本中进行任何硬编码:只需将process.env.AWS_SDK_LOAD_CONFIG = 1;在包括AWS之前 (2认同)

Waf*_*fle 11

您可以在创建dynamodb连接时指定区域(尚未尝试过s3,但这也应该有效).

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

  • new AWS.DynamoDB({'region': 'us-east-1'}) 不起作用,您需要调用 AWS.config.update({region:'your Region'}) (2认同)

小智 10

我已经检查了你的代码,在这里你在设置区域之前连接到 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';
Run Code Online (Sandbox Code Playgroud)


Jus*_*sti 10

令我印象深刻的是,这还没有发布在这里。

AWS.config.update()您可以使用而不是设置区域

const s3 = new AWS.S3({
  region: "eu-central-1",
});
Run Code Online (Sandbox Code Playgroud)

使其具体化。


Man*_*ddy 6

对我来说同样的错误:

经过大量的试验,
我已经解决了以下问题:

  1. 仅在本地系统中将AWS_REGION环境变量设置为us-east-1(示例)
  2. 现在,不需要为region设置任何lambda变量
  3. 此外,无需在代码中使用,例如:

    AWS.config.update(...)这不是必需的
    AWS.XYZ()这将没有任何问题,XYZ是任何aws服务,如S3或其他

[[在极少数情况下]]如果在代码中假设某些默认值并且您被迫发送区域,则使用{'region':process.env.AWS_REGION})


小智 6

var AWS = require('aws-sdk');
Run Code Online (Sandbox Code Playgroud)

//通过以下方式在此处分配AWS凭据:

AWS.config.update({
  accessKeyId: 'asdjsadkskdskskdk',
  secretAccessKey: 'sdsadsissdiidicdsi',
  region: 'us-east-1'
});

var dd = new AWS.DynamoDB();
var s3 = new AWS.S3();
Run Code Online (Sandbox Code Playgroud)


Ton*_*ony 5

这可能不是正确的方法,但我将所有配置都放在一个单独的 JSON 文件中。这确实为我解决了这个问题

要加载 AWS 配置,我这样做:

var awsConfig = config.aws;
AWS.config.region = awsConfig.region;
AWS.config.credentials = {
    accessKeyId: awsConfig.accessKeyId,
    secretAccessKey: awsConfig.secretAccessKey
}
Run Code Online (Sandbox Code Playgroud)

config.aws 只是一个 JSON 文件。