AWS Secrets Manager Integration with Node.js: Fetch and Store Secrets in .env File
fetch-secrets.jsJavaScript
fetch-secrets.js
import {
SecretsManagerClient,
GetSecretValueCommand,
} from "@aws-sdk/client-secrets-manager";
import fs from "fs";
// Initialize AWS Secrets Manager client
const client = new SecretsManagerClient({
region: "your-region-here", // Replace with your AWS region
});
// Function to fetch secret value from AWS Secrets Manager
const getSecretValue = async (secretName) => {
try {
const response = await client.send(
new GetSecretValueCommand({
SecretId: secretName, // Replace with your secret name
VersionStage: "AWSCURRENT", // Uses the current version of the secret by default
})
);
if (response.SecretString) {
return JSON.parse(response.SecretString); // Parse and return the secret as JSON
}
throw new Error("Secret is not a string");
} catch (err) {
console.error("Error fetching secret:", err);
throw err;
}
};
// Function to write the fetched secrets into a .env file
const writeEnvFile = (secrets) => {
const envContent = Object.entries(secrets)
.map(([key, value]) => `${key}=${value}`)
.join("\n");
// Write the secrets to a .env file
fs.writeFileSync(".env", envContent, "utf8");
console.log(".env file created/updated");
};
(async () => {
try {
const secrets = await getSecretValue("your-secret-name-here"); // Replace with your secret name
// Set secrets as environment variables in the process
Object.entries(secrets).forEach(([key, value]) => {
process.env[key] = value;
});
// Write secrets to the .env file
writeEnvFile(secrets);
console.log("Secrets loaded:", Object.keys(secrets)); // Logs the keys of the loaded secrets
} catch (err) {
console.error("Error loading secrets:", err);
}
})();
Updated: 9/30/2024