如果使用AWS_CONFIG_FILE,则配置中缺少凭据,请设置AWS_SDK_LOAD_CONFIG = 1

时间:2020-04-04 13:23:21

标签: node.js amazon-web-services aws-config

当我尝试在项目中使用AWS凭证时,出现错误,我面临着难以找到解决方案的问题,当我在同一文件中使用凭证时,它起作用了,但是当我尝试使用时。代码

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

6 个答案:

答案 0 :(得分:17)

默认情况下,SDK会检测您环境中设置的AWS凭证,并使用它们来签署对AWS的请求。这样一来,您无需在应用程序中管理凭据。

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"

您还可以添加$ export AWS_SESSION_TOKEN='your_token'(可选)

有关更多详细信息,请参见aws-sdk

或创建一个~/.aws/credentials文件并添加:

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

有关更多详细信息,请参见aws

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:3)

如果您已安装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

Windows

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

答案 3 :(得分:1)

安装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)
      })
  })

答案 4 :(得分:1)

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

答案 5 :(得分:1)

在我遵循 aws 指南中的 env vars 的确切名称之后工作

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)