配置错误:配置中缺少区域(AWS)

10
当我运行我的节点应用程序时,我遇到了配置错误。错误信息如下:
{ ConfigError: Missing region in config
at Request.VALIDATE_REGION (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:12027:47)
at Request.callListeners (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:11804:22)
at callNextListener (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:11794:14)
at C:\Users\chris\Documents\AWS API TEST\myapp\node_modules\aws-
sdk\dist\aws-sdk-react-native.js:12021:11
at finish (C:\Users\chris\Documents\AWS API TEST\myapp\node_modules\aws-
sdk\dist\aws-sdk-react-native.js:10842:9)
at Config.getCredentials (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:10887:9)
at Request.VALIDATE_CREDENTIALS (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:12016:28)
at Request.callListeners (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:11800:20)
at Request.emit (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:11776:12)
at Request.emit (C:\Users\chris\Documents\AWS API 
TEST\myapp\node_modules\aws-sdk\dist\aws-sdk-react-native.js:13792:16)
message: 'Missing region in config',
code: 'ConfigError',

我拥有的代码是:

//Authenticate AWS:
var myCredentials = new AWS.CognitoIdentityCredentials({IdentityPoolId:'us-west-2a:"Identity Pool ID"'});
var myConfig = new AWS.Config({
          credentials: myCredentials, region: 'us-west-2a'
});

这是在使用ejs和node的express服务器上运行。我正在使用Amazon JavaScript SDK。
我尝试了这里的解决方案:

AWSCognito缺少配置错误中的区域

但这并没有帮助。
编辑1:
如下所请求,我附上了完整的代码:
var express = require('express');
var AWS = require('aws-sdk');
var EC2 = require('aws-ec2')('access key', 'secret');
var scale = require('aws-scale');
var router = express.Router();

//Authenticate AWS:
var myCredentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId:'us-west-2:b0efe3c7-e4c9-420f-836b-6d776e2a9271'
}); 

var myConfig = new AWS.Config({
  credentials: myCredentials, region: 'us-west-2'
});

AWS.config = myConfig

var minInst = 1;
var maxInst = 3;

var ec2 = new AWS.EC2();
//Set up parameters for EC2 Instances:
var params = {
  ImageId: 'ami-6e1a0117',
  MaxCount: minInst,
  MinCount: maxInst, 
  InstanceInitiatedShutdownBehavior: 'terminate',
  InstanceType: 't2.micro',
  Monitoring: {
    Enabled: true 
  },
  NetworkInterfaces: [{
    AssociatePublicIpAddress: true,
    DeleteOnTermination: true,
  }],
  Placement: {
    AvailabilityZone: 'us-west-2',
  },
  SecurityGroupIds: [
    'sg-b0307ccd',
  ],
  SecurityGroups: [
    'CAB432Assignment2SG',
  ],

};
ec2.runInstances(params, function(err, data) {
  if (err){
    console.log(err, err.stack); //An error occurred
  }
  else{
    console.log(data); //Successful Response
  }
});

4个回答

11
在您的配置中添加区域,就像这样:

AWS.config.update({
    region: "REGION" //Here add you region
});
请将其添加在最顶层(位于var ec2 = new AWS.EC2();这一行之上)。

当我添加这个时,它给了我一个凭据错误,我该如何添加凭据? - Christopher Littlewood
这是在哪里!? 配置,有很多配置文件,CLI有配置,项目有配置,节点模块有配置。 没有一行代码是"var ec2 = new AWS.EC2();" - TheArchitecta

8
Oregon地区的正确代码是us-west-2。你在两个地方将其设置为us-west-2a
在提及身份池id时,请按以下方式更正代码并尝试:
AWS.config.update({region:'us-west-2'});
var myCredentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId:'us-west-2:"Identity Pool ID"'
});

如果您在API CognitoIdentityCredentials中没有传递region,则它将从AWS.config中提取数据。
此外,在初始化AWS.CONFIG时,您在region名称上使用了us-west-2a。如果您要使用它而不是AWS.config.update,请进行更正。
var myConfig = new AWS.Config({
    credentials: myCredentials, region: 'us-west-2'
});

更新

我发现了另一个问题。问题在于,您使用var myConfig = new AWS.Config()初始化AWS.config,但您没有将AWS.config类更新为它。缺少的代码是:AWS.config = myConfig

由于您没有更新它,并且您也没有使用AWS.config.update({region:'us-west-2'});更新现有的默认类,因此会抛出Missing region in config错误。

正确的代码片段

var AWS = require('aws-sdk');
var myCredentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId:'us-west-2:identity-pool-id'
}); 
var myConfig = new AWS.Config({
    credentials: myCredentials, region: 'us-west-2'
});
AWS.config = myConfig

我已经更正了,但仍然出现相同的错误。 - Christopher Littlewood
@ChristopherLittlewood 我已经更新了答案部分。 - Madhukar Mohanraju
我现在遇到了错误:missing credentials in config。当我向下滚动时,它显示message: 'XMLHttpRequest is not defined'。我已经将您的更正解决方案复制到我的代码中。我改变的唯一一件事是我的身份池ID。 - Christopher Littlewood
当我注释掉启动EC2机器的请求时,似乎不会出现这个错误。 - Christopher Littlewood
哇,这真是令人惊讶!!我能够成功请求新的EC2实例。config initializationec2.runInstances() 代码块都在同一个 .js 脚本中,对吧?你能附上你整个的代码吗? - Madhukar Mohanraju
显示剩余3条评论

4
以上回答是正确的。 然而,对于 aws-sdk-js-v3,您不能全局设置 AWS.config。 因此解决方法如下:
process.env.AWS_REGION = 'us-west-2'

如果在CI构建过程中遇到无法访问的错误提示:"169.254.169.254:80/latest/meta-data/iam/security-credentials/",您可以通过以下方式设置假凭证来解决:

process.env.AWS_REGION = 'us-west-2'
process.env.AWS_ACCESS_KEY_ID = 'test-key'
process.env.AWS_SECRET_ACCESS_KEY = 'test-secret'

0
在你的情况下,这是执行顺序(这就是为什么副作用是不好的)。
错误:
var myCredentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId:'us-west-2:b0efe3c7-e4c9-420f-836b-6d776e2a9271'
}); 

var myConfig = new AWS.Config({
  credentials: myCredentials, region: 'us-west-2'
});

正确:

// update the config
var myConfig = new AWS.Config({
  credentials: myCredentials, region: 'us-west-2'
});

// then create the instance
var myCredentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId:'us-west-2:b0efe3c7-e4c9-420f-836b-6d776e2a9271'
}); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接