Cuando intento cargar las credenciales de AWS en mi proyecto, me devuelve un error.
Cuando uso credenciales en texto sin formato, todo funciona bien, pero cuando intento usar variables de entorno, no funciona.
Mensaje de error. :
Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1Aquí está mi código probado:
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) }) })Instalar dotenv
npm install dotenv --saveCree un archivo .env y agregue sus Variables
AWS_ACCESS_KEY=1234567890 AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXXCarga dotenv en tu proyecto
require('dotenv').config();Código completo
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) }) })Puede intentar crear un AWS_PROFILE con las credenciales si tiene instalada la CLI de AWS.
$ 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]: textDespués de eso, puede configurar AWS_PROFILE como variable de entorno.
linux / mac
export AWS_PROFILE=testuserventanas
setx AWS_PROFILE testuserDespués de eso, debería poder ejecutar su programa y AWS obtendrá las credenciales de su perfil. De esta manera, no tiene que guardar sus credenciales en .ENV. Si lo hace, recuerde agregarlo en .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
Noté que está configurando su accessKeyId y secretAccessKey en la misma variable de entorno.
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" }Estos se proporcionan como valores separados por aws y deben estar representados por dos variables de entorno separadas. ¿Quizás este es tu problema?
De forma predeterminada, el SDK detecta las credenciales de AWS establecidas en su entorno y las utiliza para firmar solicitudes a AWS. De esa manera, no necesita administrar las credenciales en sus aplicaciones.
Unix:
$ export AWS_ACCESS_KEY_ID="your_key_id" $ export AWS_SECRET_ACCESS_KEY="your_secret_key"Ventanas:
> set AWS_ACCESS_KEY_ID="your_key_id" > set AWS_SECRET_ACCESS_KEY="your_secret_key" también puede agregar $ export AWS_SESSION_TOKEN='your_token' (opcional)
Consulte aws-sdk para obtener más detalles.
o cree un archivo ~/.aws/credentials y agregue:
[default] aws_access_key_id = <YOUR_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>Consulte aws para obtener más detalles.
Tenga en cuenta que los nombres de las variables en ~/.aws/credentials distinguen entre mayúsculas y minúsculas. eso fue lo que causo mi problema
funcionó después de que seguí los nombres exactos de la guía aws para los env vars
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN (Optional)Simplemente puede cargar las credenciales a través de un archivo config.json dedicado.
{ "accessKeyId": "<YOUR_ACCESS_KEY_ID>", "secretAccessKey": "<YOUR_SECRET_ACCESS_KEY>", "region": "eu-west-3" }Luego use el comando de carga de AWS
AWS.config.loadFromPath('./config.json'); En este caso, no necesitaría actualizar la configuración de AWS AWS.config.update(...); como se hace directamente desde el gecko.
Tenga en cuenta que:
No se admite la carga de credenciales desde un documento JSON en las secuencias de comandos del navegador.
Pude solucionar este problema especificando una apiVersion
AWS.config.update({ region: 'MY_REGION', apiVersion: 'latest', credentials: { accessKeyId: 'MY_ACCESS_KEY', secretAccessKey: 'MY_SECRET_KEY' } })Encontré un problema similar, así que vi algunos videos y leí un montón de documentación. En el archivo dotenv, intente crear el usuario de IAM al que desea otorgar permiso para acceder a la cuenta AWS_PROFILE="exampleProfile" , este debería ser el mismo usuario que de donde obtuvo su clave de acceso y secreto, luego requiere que se vea así.
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" }He almacenado todas las credenciales en mi propio archivo de configuración. Para Windows, lo resolví agregando una variable de entorno a mi aplicación nodejs en .env.local
AWS_SDK_LOAD_CONFIG=1