【问题标题】:Cant set AWS credentials in nodejs无法在 nodejs 中设置 AWS 凭证
【发布时间】:2016-09-02 23:07:55
【问题描述】:

我正在使用 NodeJS 开发一个云项目。 我必须运行 EC2 实例,所以已经完成了 npm install aws-sdk

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

我无法使用 aws 文件夹,因此我创建了一个文件夹并将凭据添加到 credentials.txt 文件中。

C:\Users\jessig\aws

我不断收到此错误:

{ [TimeoutError: Missing credentials in config]
  message: 'Missing credentials in config',
  code: 'CredentialsError',

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

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

有人可以帮忙吗?

【问题讨论】:

  • 您可以添加一些您尝试过的示例代码吗?

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


【解决方案1】:

正如 Frederick 提到的,硬编码不是 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
});

【讨论】:

  • 谢谢。我认为与在 AWS 文档中找到不需要 5 个其他先决条件设置的单个工作示例相比,我更有机会猜测语法。
  • 请注意,现在不推荐使用 AWS.config.accessKeyId=AWS.config.secretAccessKey=
  • 很高兴知道替代方法是什么。
  • 这太不直观了。我坚持使用已弃用的方法。
【解决方案2】:

我使用了以下编程方式,结合流行的 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"
       }
   }

【讨论】:

    【解决方案3】:

    multiple ways配置sdk与node 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
    

    【讨论】:

    • 如果我使用 codestar 会怎样?我无法使用磁盘上的文件
    • @Frederic,我在 Mac 上。 ~/.aws/imgur.com/j4FlAin没有文件夹
    • @bibscy 表示你还没有配置 aws cli 工具
    • @FredericHenri (base) bogdanmac:~ iliebogdanbarbulescu$ brew install awscli Warning: awscli 2.0.46 is already installed and up-to-date To reinstall 2.0.46, run `brew reinstall awscli` (base) bogdanmac:~ iliebogdanbarbulescu$,但仍然没有~/.aws/目录
    • @bibscy 不是安装而是配置,检查docs.aws.amazon.com/cli/latest/userguide/…
    【解决方案4】:

    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

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2019-05-09
      相关资源
      最近更新 更多