Автоматизация хранения параметров высева при первом развертывании - PullRequest
1 голос
/ 28 февраля 2020

Я использую безсерверный фреймворк в моем 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 с паролем и получения этих данных вручную где-то позже?

...