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。
小智 15
我注意到您将accessKeyId和secretAccessKey设置为相同的环境变量。
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)
我能够通过指定一个来解决这个问题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 指南中的环境变量的确切名称进行操作后,就开始工作了
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN (Optional)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69862 次 |
| 最近记录: |