无法在nodejs中设置AWS凭据

时间:2016-05-08 05:55:30

标签: node.js amazon-web-services amazon-ec2

我正在使用nodejs处理云项目。 我必须运行EC2实例,所以已经完成了npm install aws-sdk。

我认为我们必须在运行应用程序之前添加我们的凭据吗?

我无法访问文件夹,因此我创建了一个文件夹并在credentials.txt文件中添加了凭据..

C:\用户\ jessig \ AWS

我一直收到这个错误: {[TimeoutError:配置中缺少凭据]   消息:'缺少配置中的凭据',   代码:' CredentialsError',

我尝试在环境变量中设置Access密钥和密钥但仍然得到相同的错误..

我不知道为什么我找不到.aws \ credentials(Windows)文件夹..

有人可以帮忙吗?

非常感谢 杰施

4 个答案:

答案 0 :(得分:15)

正如弗雷德里克所说,硬编码不是AWS推荐的标准,这不是你想要在生产环境中做的事情。但是,出于测试目的和学习目的,它可能是最简单的方法。

由于您的请求特定于AWS EC2,因此这里有一个小例子可以帮助您入门。

要获取Node.js可用的所有方法的列表,请参考此 AWS documentation

var AWS = require('aws-sdk'); 

AWS.config = new AWS.Config();
AWS.config.accessKeyId = "accessKey";
AWS.config.secretAccessKey = "secretKey";
AWS.config.region = "us-east-1";

var ec2 = new AWS.EC2();

var params = {
  InstanceIds: [ /* required */
    'i-4387dgkms3',
    /* more items */
  ],
  Force: true
};
ec2.stopInstances(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

答案 1 :(得分:9)

我使用以下编程方式,结合流行的npm配置模块(允许开发与生产等不同的配置文件):

const config = require('config');
const AWS = require('aws-sdk');

const accessKeyId = config.get('AWS.accessKeyId');
const secretAccessKey = config.get('AWS.secretAccessKey');
const region = config.get('AWS.region');
AWS.config.update(
    {
        accessKeyId,
        secretAccessKey,
        region
    }
);

和json配置文件,例如development.json,看起来像:

   {
       "AWS": {
           "accessKeyId": "TODO",
           "secretAccessKey": "TODO",
           "region": "TODO"
       }
   }

答案 2 :(得分:3)

multiple ways配置sdk以使用节点js

  

有几种方法可以加载凭据。这是他们的顺序   建议:

     
      
  • 从Amazon EC2的IAM角色(如果在EC2上运行)加载,
  •   
  • 从共享凭证文件(〜/ .aws / credentials)
  • 加载   
  • 从环境变量中加载
  •   
  • 从磁盘上的JSON文件加载
  •   
  • 在您的应用程序中硬编码
  •   

虽然不建议硬编码。

如果要使用共享凭据文件,则在Windows上将是

C:\Users\jessig\.aws\credentials

(注意aws之前的.)。你的文件应该是

[default]
aws_access_key_id = your_access_key
aws_secret_access_key = your_secret_key

答案 3 :(得分:0)

AWS 凭证可以在运行的容器中设置为 ENVIRONMENT VAR。 您可以直接添加以下两个 ENVIRONMENT VAR:

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

或在 NODE 中以编程方式将这些 ENVIRONMENT VAR 设置为

var AWS = require('aws-sdk')
AWS.config = new AWS.Config();
process.env.AWS_ACCESS_KEY_ID = "AKIA************L55A"
process.env.AWS_SECRET_ACCESS_KEY = "Ef*******+C5LrtOroSj**********yNE"
AWS.config.region = "us-east-2"

https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html