До того как ожидание на высшем уровне станет чем-то особенным, загрузка секретов асинхронно из AWS Secrets Manager при запуске - это небольшая боль. Мне интересно, есть ли у кого-нибудь лучшее решение, чем у меня сейчас.
После запуска сервера Node.JS я загружаю все секреты из менеджера секретов AWS и устанавливаю их в конфигурационные файлы, где у меня естьсмесь жестко закодированных переменных и секретов. Вот пример:
В aws.js
import AWS from 'aws-sdk';
const region = "eu-north-1";
AWS.config.setPromisesDependency();
const client = new AWS.SecretsManager({
region
});
export const getSecret = async(secretName) => {
const data = await client.getSecretValue({SecretId: secretName}).promise();
return data.SecretString;
}
Затем в sendgridConfig.js
import { getSecret } from "./aws";
export default async() => {
const secret = JSON.parse(await getSecret("sendgridSecret"));
return {
APIKey: secret.sendgridKey,
fromEmail: "some@email.com",
toEmail: "some@email.com"
}
}
Затем в каком-то файле, где используется конфигурация:
import { sendgridConfig } from "./sendgridConfig";
const myFunc = () => {
const sendgridConf = await sendgridConfig();
... do stuff with config ...
}
Это работает нормально в асинхронных функциях, но что если я хотел бы использовать ту же настройку в неасинхронных функциях, где я использую свои жестко закодированные переменные? Тогда секреты еще не получены, и я не могу их использовать. Также я должен всегда ждать секретов. IMO хорошим решением в будущем может быть ожидание на высшем уровне, когда после загрузки сервера сервер будет ожидать секреты от AWS, прежде чем продолжить. Я думаю, я мог бы найти способ заблокировать основной поток и установить секреты, но это выглядит как хакерство.
У кого-нибудь есть лучшее решение?