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

sin*_*ngh 41 amazon-web-services node.js 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)
      })
  })
Run Code Online (Sandbox Code Playgroud)

Gwe*_*enM 35

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

Unix:

$ export AWS_ACCESS_KEY_ID="your_key_id"
$ export AWS_SECRET_ACCESS_KEY="your_secret_key"
Run Code Online (Sandbox Code Playgroud)

视窗:

> set AWS_ACCESS_KEY_ID="your_key_id"
> set AWS_SECRET_ACCESS_KEY="your_secret_key"
Run Code Online (Sandbox Code Playgroud)

您还可以添加$ 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>
Run Code Online (Sandbox Code Playgroud)

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

  • 即使我们设置了“~/.aws/credentials”,也会发生这种情况 (17认同)

小智 15

我注意到您将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"
}

Run Code Online (Sandbox Code Playgroud)

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


小智 12

安装dotenv

npm install dotenv --save
Run Code Online (Sandbox Code Playgroud)

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

AWS_ACCESS_KEY=1234567890
AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

在您的项目中加载 dotenv

require('dotenv').config();
Run Code Online (Sandbox Code Playgroud)

完整代码

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)
      })
  })
Run Code Online (Sandbox Code Playgroud)


jen*_*nja 9

我能够通过指定一个来解决这个问题apiVersion

AWS.config.update({
  region: 'MY_REGION',
  apiVersion: 'latest',
  credentials: {
    accessKeyId: 'MY_ACCESS_KEY',
    secretAccessKey: 'MY_SECRET_KEY'
  }
})
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您安装了 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
Run Code Online (Sandbox Code Playgroud)

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

Linux / Mac

export AWS_PROFILE=testuser
Run Code Online (Sandbox Code Playgroud)

视窗

setx AWS_PROFILE testuser
Run Code Online (Sandbox Code Playgroud)

之后,您应该能够运行您的程序,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


小智 5

在我按照 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)  
Run Code Online (Sandbox Code Playgroud)