59

当我尝试在我的项目中加载 AWS 凭证时,它会返回一个错误。

在纯文本中使用凭据时,一切正常,但是当我尝试使用环境变量时,它不起作用。

错误信息。:

Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1

这是我尝试过的代码:

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


const SESConfig = {
    apiVersion: "2010-12-01",
    accessKeyId: process.env.AWS_SECRET_KEY,
    accessSecretKey: process.env.AWS_SECRET_KEY,
    region: "us-east-1"
}
AWS.config.update(SESConfig);
var sns = new AWS.SNS()
var sns = new AWS.SNS();

function sendSMS(to_number, message, cb) {

    sns.publish({
        Message: message,
        Subject: 'Admin',
        PhoneNumber:to_number
    }, cb);
  
  }
  
  // Example
  const PhoneNumberArray = ['any mobile number']
  PhoneNumberArray.forEach(number => {
    sendSMS(number, "Lorem Ipsum is simply dummy text of the printing and typesetting industry.", (err, result)=>{
        console.log("RESULTS: ",err,result)
      })
  })
 
4

10 回答 10

49

By default, the SDK detects AWS credentials set in your environment and uses them to sign requests to AWS. That way you don’t need to manage credentials in your applications.

Unix:

$ export AWS_ACCESS_KEY_ID="your_key_id"
$ export AWS_SECRET_ACCESS_KEY="your_secret_key"

Windows:

> set AWS_ACCESS_KEY_ID="your_key_id"
> set AWS_SECRET_ACCESS_KEY="your_secret_key"

you can also add $ export AWS_SESSION_TOKEN='your_token' (optional)

See aws-sdk for more details.

or create a ~/.aws/credentials file and add:

[default]
aws_access_key_id = <YOUR_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>

See aws for more details.

于 2020-06-03T09:14:47.793 回答
18

我注意到您将accessKeyIdsecretAccessKey设置为相同的环境变量。

const SESConfig = {
    apiVersion: "2010-12-01",
    accessKeyId: process.env.AWS_SECRET_KEY,      // should be:  process.env.AWS_ACCESS_ID
    secretAccessKey: process.env.AWS_SECRET_KEY,  
    region: "us-east-1"
}

这些由 aws 作为单独的值提供,应由两个单独的环境变量表示。也许这是你的问题?

于 2020-05-25T07:18:32.213 回答
9

如果您安装了 AWS CLI,您可以尝试使用凭证创建 AWS_PROFILE。

$ aws configure --profile testuser
  AWS Access Key ID [None]: 1234
  AWS Secret Access Key [None]: 1234
  Default region name [None]: us-east-1
  Default output format [None]: text

之后,您可以将 AWS_PROFILE 设置为环境变量。

Linux / Mac

export AWS_PROFILE=testuser

视窗

setx AWS_PROFILE testuser

之后,您应该能够运行您的程序,AWS 将从您的配置文件中获取凭证。这样您就不必将凭据保存在 .ENV 中。如果这样做,请记住将其添加到 .gitignore 中。

https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

于 2020-04-07T09:40:14.707 回答
5

安装 dotenv

npm install dotenv --save

创建一个 .env 文件并添加您的变量

AWS_ACCESS_KEY=1234567890
AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXX

在你的项目中加载 dotenv

require('dotenv').config();

完整代码

require('dotenv').config();
const AWS = require('aws-sdk');
const SESConfig = {
    apiVersion: "2010-12-01",
    accessKeyId: process.env.AWS_ACCESS_KEY,
    accessSecretKey: process.env.AWS_SECRET_KEY,
    region: "us-east-1"
}
AWS.config.update(SESConfig);
var sns = new AWS.SNS();

function sendSMS(to_number, message, cb) {

    sns.publish({
        Message: message,
        Subject: 'Admin',
        PhoneNumber:to_number
    }, cb);

  }

  const PhoneNumberArray = ['any mobile number']
  PhoneNumberArray.forEach(number => {
    sendSMS(number, "Lorem Ipsum is simply dummy text of the printing and typesetting industry.", (err, result)=>{
        console.log("RESULTS: ",err,result)
      })
  })
于 2020-04-05T15:16:11.363 回答
3

我能够通过指定一个apiVersion

AWS.config.update({
  region: 'MY_REGION',
  apiVersion: 'latest',
  credentials: {
    accessKeyId: 'MY_ACCESS_KEY',
    secretAccessKey: 'MY_SECRET_KEY'
  }
})
于 2021-10-12T21:03:15.937 回答
3

在我遵循环境变量的 aws 指南中的确切名称后工作

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

AWS_ACCESS_KEY_ID  
AWS_SECRET_ACCESS_KEY  
AWS_SESSION_TOKEN (Optional)  
于 2021-04-11T14:14:21.613 回答
1

请注意,~/.aws/credentials 中的变量名称区分大小写。这就是导致我的问题的原因

于 2021-03-08T14:18:08.523 回答
0

我已将所有凭据存储在我的配置文件本身中。对于 Windows,我通过在我的 nodejs 应用程序中添加一个环境变量来解决它.env.local

AWS_SDK_LOAD_CONFIG=1
于 2022-01-17T08:57:09.723 回答
0

您可以简单地通过专用config.json文件加载凭据。

{
    "accessKeyId": "<YOUR_ACCESS_KEY_ID>", 
    "secretAccessKey": "<YOUR_SECRET_ACCESS_KEY>", 
    "region": "eu-west-3"
}

然后使用 AWS 加载命令

AWS.config.loadFromPath('./config.json');

在这种情况下,您不需要更新 AWS 配置AWS.config.update(...);,因为它是直接从壁虎完成的。

注意:

浏览器脚本不支持从 JSON 文档加载凭据。

于 2021-08-18T01:53:24.133 回答
0

我遇到了类似的问题,所以我观看了一些视频并阅读了一堆文档,在 dotenv 文件中尝试创建您希望授予访问该帐户权限的 IAM 用户,AWS_PROFILE="exampleProfile"这应该是您获得访问密钥的同一用户和秘密,然后要求,所以它应该看起来像这样。

const SESConfig = {
   apiVersion: "2010-12-01",
   profile:process.env.AWS_PROFILE,
   accessKeyId: process.env.AWS_ACCESS_KEY,
   accessSecretKey: process.env.AWS_SECRET_KEY,
   region: "us-east-1"
}
于 2021-10-27T09:26:49.647 回答