Рубрики
Uncategorized

Развертывание рельсов в Amazon ECS: часть 3 — Создание базы данных RDS, определение задачи и Балансировщик нагрузки

Это третья часть рельсов развертывания в посте Amazon ECS. Это часть более широкой серии называется … Помечено с AWS, Docker, Ruby, Devops.

Это третья часть Развертывать Рельсы в Amazon ECS Почта. Это часть более широкой серии называется Больше, чем «Hello World» в Docker Отказ Серия доставит вас от Здравствуйте, мир В докере, чтобы приложение развернуто в AWS.

  • Создание рельсов + веб-приложения Sidekiq в Docker
  • Развертывание рельсов в Amazon ECS
    • Концепции
    • Нажмите на изображение в ECR
    • Создайте базу данных RDS, определение задачи и балансировку нагрузки — мы здесь
    • Создайте кластер ECS и подключите его все вместе
    • Настроить Sidekiq.
  • Автоматизация развертываний с AWS CodeDey
    • Глубокое погружение на AWS CodeBuild
  • Расширенные концепции ECS:
    • Обзорное открытие и автоматическое масштабирование — скоро
    • Фаргут — скоро

В этом посте мы создадим три службы AWS, нам нужно запустить контейнерные приложения на AWS: базу данных, определение задачи и балансировку нагрузки.

Контейнеры Docker должны быть нестандартными: они могут быть выключены и включены, потому что они не удерживают никаких данных или Штаты (или, по крайней мере, не удерживайте состояния, которые не могут быть получены из другого источника). Базы данных, по определению, являются господство : Они содержат данные и считаются источником истины. Если данные исчезают из базы данных, нет другого доверенного источника, на котором мы можем рассчитывать, чтобы вернуть его. Поскольку контейнеры должны быть без гражданства, мы не должны размещать наши базы данных в контейнерах.

В оформлении Предыдущий пост мы используем Docker-Compose Чтобы настроить PostgreSQL Server в контейнере Docker. Это нормально для развития, поскольку данные там могут быть легко воспроизведены. Мы не можем сделать это в производственной базе данных, потому что если контейнер исчезает, данные идут с ним.

Сопотенцы базы данных в контейнерах Спорите, что вы должны использовать тома докера вместо этого, поэтому, когда контейнер умирает, данные не исчезают. Ну, вы можете , но это добавлена сложность, которую вы должны управлять. Лучше просто использовать управленную базу данных и не беспокоиться о инженерной надежности в решение, которое вы можете просто заплатить кому-то еще.

Для базы данных мы создадим базу данных PostgreSQL RDS.

(6.1) На вкладке «Услуги» ищите RDS и нажмите на нее. Затем нажмите «Создать базу данных».

(6.2) На следующей странице выберите PostgreSQL в качестве базы данных выбора и свободный уровень от шаблона. В плитке настроек добавьте идентификатор экземпляра DB Ruby-Docker-база данных и пароль по вашему выбору. Оставьте размер экземпляра БД как T2.Micro. Для подключения Оставьте VPC в качестве VPC по умолчанию (обратите внимание на идентификатор этого VPC для раздела 8).

Затем нажмите «Создать базу данных». Вы увидите, что ваша база данных создана на следующем экране:

(6.3) Когда база данных сделана созданием, нажмите на имя базы данных. На следующей странице обратите внимание на конечную точку. Мы будем использовать его для доступа к базе данных позже.

Для нас требуется определение задачи для запуска задачи в ECS. Определение задачи определяет ресурсы, доступные для задачи. Он также содержит информацию о контейнерах, которые являются частью задачи. В условиях ООП думать о определении задачи как класс и задача как Экземпляр класса : Чтобы создать задачу, вы должны получить информацию из определения задания.

(7.1) На вкладке «Услуги» ищите ECS и нажмите на нее. Затем нажмите «Создать новое определение задачи».

(7.2) Затем выберите совместимость типов запуска EC2 и нажмите Далее.

(7.3) Давайте назвать определение нашего задания как Docker-Rails-App Отказ Для размера задачи давайте дадим его 512 МБ памяти и 512 единиц ЦП. Устройства ЦП являются упрощенным способом количественной оценки вычислительной мощности. Это дает 512 МБ и 512 единицы процессоров за выполнение задач. Контейнеры внутри одной задачи поделитесь этим ресурсом.

(7.4) Прокрутите вниз и нажмите «Добавить контейнер». Определение задачи определяет одну задачу. Задача может содержать много контейнеров внутри него. Вы можете добавить столько контейнеров, сколько вам нравится, но я рекомендую просто иметь по одному за задачу.

(7.5) Далее добавьте URI изображения Docker, мы просто загружены в раздел 5.4 к Изображение поле и «сеть» в Имя поле. Кроме того, убедитесь, что добавьте хост-порт как 0 и контейнерный порт в 8080. Установка хоста порта в качестве ноль позволяет многим контейнерам наживать в одном экземпляре EC2.

Каждый контейнер внутри экземпляра хоста имеет свой собственный диапазон портов, а экземпляр хоста также имеет свой собственный диапазон портов. Самостоятельно, контейнер и диапазон его порта не могут быть доступен из-за пределов экземпляра. Настройка порта хоста как 0 и порт контейнера в 8080, мы обнаруживаем порт 8080 каждого контейнера в Любой, случайный Порт в экземпляре хоста. Так что представьте, если у нас были 3 контейнера в экземпляре хоста с IP 10.0.0.123 . Каждый экземпляр будет иметь свой собственный порт 8080, но они будут сопоставлены на другой порт на экземпляре хоста:

  • Container_One: 8080 — > 10.0.0.123:16217.
  • Container_two: 8080 -> 10.0.0.123:11394.
  • Container_Three: 8080 -> 10.0.0.123:2390

Эта функция называется Динамическое отображение порта Отказ Это делает каждый контейнер, доступный через уникальный ip_address: порт комбинация. Следовательно, мы можем зарегистрировать его в балансировщик нагрузки и иметь трафик, направленный на него. AWS обрабатывает все это на заднем плане для нас. Все, что нам нужно сделать, это поставить хост-порт как ноль.

В примере он добавляет 10.0.0.123:16217 , 10.0.0.123:11394 и 10.0.0.123:2390 на балансировщик нагрузки, поэтому трафик может быть направлен на каждый контейнер.

Балансировщик нагрузки выполняет проверки здоровья на каждом контейнере для проверки, если они все еще функционируют, как они должны. Если контейнер не удается определенное количество проверок здравоохранения, ререгистрами балансировщика нагрузки контейнер, поэтому трафик больше не будет течь. ECS убивает проблемный контейнер и начинает новый.

(7.6) Прокрутите вниз до секции окружающей среды. Для команды поставить PUMA, -C, CONFIG/DOCKER_PUMA.RB, -P, 8080 . Это команда, которую Docker будет работать при запуске контейнера. Команда запускает сервер приложений по умолчанию Rails, PUMA и маршруты трафика в порт 8080.

Добавьте следующие переменные среды:

  • Postgresql_host : << Конечная точка, которую вы приняли к сведению в 5.3 >>
  • Postgresql_user_name : почтовые
  • Postgresql_password : << Пароль, который вы ввели на 5,2 >>
  • Postgresql_db : RUBY_DOCKER_DATABASE.
  • Rails_env : постановка
  • Rails_Master_key : <<. Если вы клонировали мое репо, используйте E451D94494F606AFA27A4CAE3DEA3948. . Если вы сделали свой собственный, используйте значение в config/master.key >>
  • Rails_log_to_stdout — ВКЛЮЧИТЬ

PostgreSQL_ Добавленные переменные будут использоваться в базе данных .yml Мы сделали на шаге 4.1. Rails_env Переменная состоит в том, чтобы убедиться, что мы используем промежуточную среду. Rails_Master_key требуется для рельсов 5 для пробега.

(7.7) В разделе хранения и ведения журнала нажмите Автоконфигурирование CloudWatch Logs Отказ Это настроит журналы CloudWatch для сбора журналов приложений из рельсов, но журналы должны быть поступления из стандарта. Включение Rails_log_to_stdout В 7.6 выводит рельсы журналы на Стандарт OUT Отказ

(7.8) Затем нажмите «Добавить», чтобы закрыть окно определения контейнера. А затем нажмите «Создать». Вы должны увидеть что-то вроде этого:

Поскольку это первый раз, когда мы создали определение задачи, это будет первая версия. Если вы нажмете «Создать новый ревизию» на рисунке ниже, у вас будет возможность изменить любую из настроек, которые мы сделали ранее. Когда вы сохраняете свои изменения, он будет размещен на новой версии, версии 2.

Мы широко разговаривали о Динамическое отображение порта В разделе 7.5. По сути, каждый контейнер в экземпляре хоста будет назначен случайным портом на экземпляре хоста. Хозяин 10.0.0.123 Может содержать три контейнера, доступные через 10.0.0.123:1911 , 10.0.0.123:7421 , 10.0.0.123:5819 Отказ AWS ECS позаботится о регистрации этих комбинаций портов: портовых комбинаций на балансировщик нагрузки. После регистрации балансировщик нагрузки будет распространять входящий трафик к контейнерам, зарегистрированным для нее.

(8.1) На вкладке «Услуги» ищите EC2 и нажмите на нее. Затем нажмите Балансировщики нагрузки В меню левого бока и нажмите «Создать балансировщик нагрузки». На следующей странице нажмите Балансировщик нагрузки на приложение Отказ

(8.2) Давайте назвать наш балансировщик нагрузки, Rails-Docker-Alb Отказ Далее выберите VPC, который мы выбрали в 6.2 и выберите все его подсети. Затем нажмите Следующий Отказ Пропустить «Шаг 2: Настройте параметры безопасности», нажав Следующий Отказ

(8.3) Давайте создадим группу безопасности на следующей странице с именем Rails-Docker-Alb-SG Отказ Эта группа безопасности определяет, какой трафик может войти в наш балансировщик нагрузки.

Убедитесь, что порт 80 открыт для 0,0.0.0/0 (все). Это удостоверится, что наше приложение будет доступно для открытого Интернета. Затем нажмите Следующий Отказ

(8.4) Создать новую целевую группу под названием Целью по умолчанию Отказ Затем нажмите Далее. Пропустить «Шаг 5: Регистрация целей», нажав на Следующий Отказ

(8.5) Просмотрите свой балансировщик нагрузки, затем нажмите Создать Отказ

Вот и все! Вы создали базу данных, определение задачи и балансировку нагрузки.

На следующем посте вы создадите кластер ECS, и мы будем развернуть наше приложение Rails там. Мы, наконец, сможем увидеть наши Rails приложение развернуто!

Оригинал: «https://dev.to/raphael_jambalos/deploy-rails-in-amazon-ecs-part-3-create-the-rds-database-task-definition-and-load-balancer-1ffe»