当我尝试在项目中使用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)
})
})
答案 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 的确切名称之后工作
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN (Optional)