Я использую безсерверный фреймворк в моем nodejs проекте. В проекте у меня есть в ямле определение сервисов. Я хочу создать базу данных RDS и передать пароль и имя администратора. Я использую AWS System Manager (Paramter Store) для хранения этих учетных данных. Во время развертывания я загружаю эти учетные данные из хранилища параметров, чтобы создать rds с помощью сценария, который я написал в nodejs
Определение экземпляра rds:
Resources:
DatabaseCluster:
Type: AWS::RDS::DBCluster
Properties:
DatabaseName: ${file(resources/rdsName.js)}
Engine: aurora
MasterUsername: ${file(resources/rdsUsername.js)}
MasterUserPassword: ${file(resources/rdsPassword.js)}
Port: "3306"
Пример сценария для получения пароля базы данных из Хранилище параметров:
const aws = require('aws-sdk');
const getrdsPassword = async stage => {
const ssm = new aws.SSM();
const params = {
Name: `RDSPassword-${stage}`,
WithDecryption: true,
};
const password = await ssm.getParameter(params).promise();
return password.Parameter.Value;
};
module.exports = serverless => {
const {
service: {
provider: { stage },
},
} = serverless;
return getrdsPassword('dev')
};
Проблема заключается в том, что при первом развертывании, то есть при создании всего стека, мне необходимо создать параметры пароля и имя пользователя базы данных в хранилище параметров. Я хотел бы автоматизировать, чтобы при развертывании, если указанные параметры c не были созданы, они создавались и сохранялись в хранилище параметров. (Я хочу иметь возможность получить эти данные позже, чтобы подключить программу к базе данных и просмотреть данные, отладка)
Я думал, что напишу скрипт и с помощью serverless-scriptable-plugin
перед развертыванием Я бы запустил скрипт, который проверяет, есть ли данные в контроллере параметров, которые мне понадобятся для развертывания, если их там нет, он их создаст. Но, просматривая https://gist.github.com/HyperBrain/50d38027a8f57778d5b0f135d80ea406#file -lifecycle-cheat-sheet-md Я хотел подключиться к событию before: package: cleanup:
и проверить его там, но, к сожалению, перед запуском сценария при развертывании бессерверной инфраструктуры выдает ошибку:
Parameter Not Found ------------------------------------
ParameterNotFound: null
Часть файла serverless.yml, в которой я использую скрипт:
custom:
stage: ${opt:stage, self:provider.stage}
service: ${opt:service, self:service}
scriptHooks:
before:package:cleanup:
- scripts/bootstrappingParameterStore.js
Вопрос в том, есть ли более раннее событие, которое я могу подключить с помощью этого плагина и начать проверку хранилища параметров и использовать его, если он не находит нужные мне данные?
В качестве альтернативы, есть ли другой более простой способ автоматизации первого развертывания, создания RDS с паролем и получения этих данных вручную где-то позже?