Рубрики
Uncategorized

Настройте свое приложение с помощью магазина параметра SSM

Настройка приложения Rails через переменные среды работает хорошо, но иногда вы хотите иметь возможность … помеченные DevOps, Rails, AWS.

Настройка приложения Rails через переменные среды работает хорошо, но иногда вы хотите иметь возможность обновить вашу конфигурацию на лету. Вот способ обновить среду вашего приложения, используя Магазин параметров SSM Отказ

Почему вы хотите сделать это? Ну, скажем, вы развертываете приложение Rails в экземпляр EC2, который является частью группы AutoScaling. Чтобы получить самые быстрые времена загрузки, вам следует создать пользовательский AMI с вашим кодом уже на нем (A.k.a. Золотое изображение), что AutoScaling Group может использовать, когда пришло время загружать новый экземпляр. К сожалению, если вы храните свою конфигурацию на изображении (и используете что-то вроде Dotenv Чтобы загрузить его), вам нужно будет создать новый AMI каждый раз, когда у вас есть изменение конфигурации. Вы можете работать над этим, используя параметры параметров SSM Parameter, и пусть ваше приложение извлекает его конфигурацию при загрузке.

Установка данных в магазин параметра достаточно проста — вы можете использовать CLI или консоль AWS для редактирования переменных. Но как вы получаете данные обратно для вашего приложения для использования? Один из способов сделать это, чтобы получить эти параметры в вашу Env через инициализатор, например:

Aws::SSM::Client.new.get_parameters_by_path(path: "/honeybadger/#{Rails.env}/", recursive: true, with_decryption: true).parameters.each do |param|
  ENV[param["name"].split("/").last] = param["value"]
end

Предполагая, что у вас есть параметры, названные как HoneyBadger/Production/my_api_key Этот фрагмент приведет к Env ["my_api_key"] имея все, что вы поставляете для этого параметра.

Но что, если загрузка изменяемых значений окружающей среды в инициализатор слишком поздно в процессе загрузки рельсов? Что, если вам нужны настройки, такие как Database_URL, чтобы быть установлены в SSM и Вам необходимо использовать эти настройки перед нагрузками приложения? Для этого вы можете сохранить переменные до .env Файл и пусть dotenv справиться с этим Отказ Но сначала давайте настроим базу данных и храните нашу значение database_url.

Вот a террафом фрагмент, который создает экземпляр RDS и сохраняет соединение в магазине параметра SSM:

resource "aws_db_instance" "db" {
  allocated_storage      = 20
  storage_type           = "gp2"
  engine                 = "postgres"
  engine_version         = "11.4"
  password               = "${var.database_password}"
  name                   = "honeybadger"
  username               = "honeybadger"
}

resource "aws_ssm_parameter" "database_url" {
  name  = "/honeybadger/${var.environment}/DATABASE_URL"
  type  = "SecureString"
  value = "postgres://${aws_db_instance.db.username}:${var.database_password}@${aws_db_instance.db.endpoint}/${aws_db_instance.db.name}"
}

С помощью следующей команды Shell вы можете взять на себя все параметры (так же, как мы сделали с фрагментом Рубина) и получить их готовы к использованию в качестве переменных среды:

aws ssm get-parameters-by-path --path /honeybadger/production/ \
  --recursive --with-decryption --output text \
  --query "Parameters[].[Name,Value]" |
  sed -E 's#/honeybadger/production/([^[:space:]]*)[[:space:]]*#export \1=#' \
  > /home/honeybadger/shared/.env.production.local

Теперь у вас есть .env.production.local Файл, что dotenv может загрузить — предполагая, что это симличится в ваш Текущий Путь в развертывании времени, если вы используете Capistrano. В качестве бонуса вы также можете источнить, что файл env иметь переменные, такие как $ database_url, определенный для вас в любых сценариях оболочки, которые вы хотите запустить.

Мы поместим эту команду Shell в нашем скрипте развертывания (который запускается нашим CI/CD-трубопроводом), поэтому любой новый код, который идет к производству, примет любые изменения в наших параметрах в SSM. Теперь у нас есть наше золотое изображение и Нам не нужно создавать новую для каждой изменения конфигурации. 😎

Оригинал: «https://dev.to/honeybadger/configure-your-app-with-ssm-parameter-store-1hah»