Это первая часть Развертывать Рельсы в Amazon ECS Почта. Это часть более широкой серии называется Больше, чем «Hello World» в Docker Отказ Серия доставит вас от Здравствуйте, мир В докере, чтобы приложение развернуто в AWS.
- Создание рельсов + веб-приложения Sidekiq в Docker
- Развертывание рельсов в Amazon ECS
- Концепции — мы здесь
- Нажмите на изображение в ECR
- Создайте базу данных RDS, определение задачи и балансировку нагрузки
- Создайте кластер ECS и подключите его все вместе
- Настроить Sidekiq.
- Автоматизация развертываний с AWS CodeDey
- Глубокое погружение на AWS CodeBuild
- Расширенные концепции ECS:
- Обзорное открытие и автоматическое масштабирование — скоро
- Фаргут — скоро
Нет нехватки учебных пособий о том, как начать работу на Docker. Однако, когда вы начинаете его начать настроить для производства, нет много учебных пособий, которые углубляются на вещах, которые вы должны сделать, чтобы получить приложение от отображения Здравствуйте, мир готовить его к потере трафика в производстве. Эта серия является глубоким погружением в разработку и развертывание докеренных приложений к AWS.
В Последнее сообщение Мы сделали простые рельсы 5 приложений, которое проходит сверху Docker и Docker Compose. Мы будем использовать это приложение здесь. Если вы решили пропустить последний пост, вот копия Исходный код чтобы начать. Если вы начинаете на Docker, я высоко рекомендую начать с предыдущего поста. Он содержит базовые концепции Core Docker, которые являются фундаментальными для понимания концепций в этой серии.
Для этого поста мы узнаем о концепциях, необходимых для начала работы ECS.
0 | Что такое ECS и зачем его использовать?
AWS Упругая контейнерная служба (ECS) Это высокопроизводительная служба оркестографии контейнера, которая поддерживает Docker. Это позволяет вам запустить контейнерные приложения на AWS. Это также домашний конкурент AWS для Kubernetes Google. AWS интегрировал ECS с большим количеством своих других услуг, что делает его очевидным выбором, когда вы используете большую часть ваших рабочих нагрузок на AWS.
Почему нам нужна служба оркестровки?
Простые контейнерные приложения легко обрабатываться. Если у вас был один контейнер для вашего приложения — вот все, что вам нужно управлять.
Тем не менее, производственные нагрузки не такие. Базовая емкость для умеренно занятой рабочей нагрузки часто является не менее 5 контейнеров. Вы должны убедиться, что 5 контейнеров бегут в любое время. Иногда эти контейнеры не в том же экземпляре — но распространяются через 2-3 экземпляра. В этой установке развертывания становятся болью. Вы должны перейти к нескольким экземплярам, запустить X копии новой версии, тестируйте его вручную, а затем выключите новые.
Вам также нужно управлять тем, как у вас есть несколько контейнеров в одном случае. Для традиционных развертываний у вас есть сервер приложений в экземпляре, то вы указываете, что в порт 80, то вуаля Ты закончил! Теперь он доступен через http. Но что, если у вас есть два контейнера во многих случаях? Вы не можете напрямую указать 2 контейнера в одном порту 80. Таким образом, вы, вероятно, используете 1 сервер для загрузки баланса трафика между контейнерами в разные экземпляры. Даже тогда вам придется вручную зарегистрироваться и резать каждый контейнер на этот сервер.
Сделано таким образом, работа по техническому обслуживанию требуется только для того, чтобы запустить инфраструктуру не оправдывает движущихся докера. Я бы всерьез сделал традиционное развертывание.
Большая часть этой стоимости, хотя, забрана с ECS в качестве оркестраторной службы:
- Это положения для вас экземпляров. Инстанции, которые он развертывается, готовы к использованию. Вы просто говорите, сколько случаев вы хотели бы иметь и какого рода.
- ECS обрабатывает, как развернуть контейнеры через свой флот экземпляров EC2.
- Он интегрируется с Служба балансировки нагрузки AWS, поэтому вам не нужно управлять своим собственным балансировщиком нагрузки. Он также обрабатывает регистрацию здоровых экземпляров на балансировщик нагрузки, поэтому трафик может быть направлен в контейнер. И наоборот, он обрабатывает произнесение нездоровых нездоровых экземпляров, поэтому трафик не будет направлен на неисправные контейнеры.
- Он обрабатывает развертывание для вас, используя проверки здоровья, чтобы убедиться, что ваша новая версия проходит какой-то тест, прежде чем трафик будет направлен на него. В противном случае он не будет маршрутизировать трафик в эти новые экземпляры.
- ECS бесплатен! Вы просто платите за ресурсы, использующие ваше приложение.
Docker Registry
Первое, что вам нужно сделать, это подтолкнуть свое изображение Docker в реестр Docker. Реестр Docker очень похож на GitHub, но для документов докеров. Вы можете тянуть, нажать и течь изображения. Теги — это имена, которые мы даем разные версии изображения. Вы можете подтолкнуть столько версий ваших изображений, как вам нравится в репозитории изображения, если они имеют разные теги (I.E. v0.0.1 и v0.0.2). Если у них есть тот же тег (оба помечены как v0.0.1), более поздняя версия переопределяет более раннюю версию.
Самый выдающийся реестр есть Docker Hub , содержащий большую часть Базовые изображения Мы используем для создания наших изображений. Docker Hub предлагает неограниченные бесплатные публики, но сборы за хранение частных изображений. У AWS есть свой собственный реестр: Эластичный реестр контейнера (ECR) Отказ В настоящее время это планирует $ 0,1/ГБ/месяц. Это также расходы на трафик, выходящие из ECR и в ваши экземпляры (I.e, когда ваш контейнер вытягивает изображение из ECR). Мы будем использовать ECR для этого руководства.
Определение задачи
Определение задачи — это файл json, который определяет задачу и контейнеры внутри нее. Задачи Логические группировки контейнеров (то есть задача обработки изображения »может иметь 1 контейнер Sidekiq, 1 веб-контейнер и 1 контейнер Redis). Контейнеры в задаче Должен Будьте беги вместе. При примере обработки изображений масштабирование веб-контейнера требует также масштабировать контейнеры Sidekiq и Redis.
Я считаю, что она лучше всего на практике, чтобы иметь только один контейнер на задачу — поэтому вы можете масштабировать различные части вашего приложения самостоятельно.
Определение задачи содержит информацию, такую как:
- Сколько процессора и памяти должны иметь задание?
- Определите контейнеры внутри задачи:
- Сколько процессора и памяти потребляют контейнер? Он не должен превышать процессор процессора и распределения памяти. Если есть несколько контейнеров в задаче, сумма их процессора и потреблений памяти не должна превышать, которые выделяются на задачу.
- Как вы управляете журналами между контейнерами?
- Какое изображение Docker будет использоваться контейнер?
- Какие переменные среды должны быть видны для контейнера?
- Какую команду мы будем использовать, чтобы начать контейнер? (для рельсов, это
Rails S
включить сервер приложений)
Поскольку эта конфигурация изменяется в течение срока службы приложения, определения задач могут содержать несколько версий, называемых A ревизия Отказ
ECS Service.
Услуги гарантии, у вас всегда есть x количество задач, работающих в любое время. Когда контейнер умирает, он будет выпустить только для вас. Сервис также несет ответственность за решение, в какой экземпляре, среди вашего флота экземпляров EC2 для развертывания.
Когда он порождает контейнер, он убедится, что контейнер будет зарегистрирован в приложении упругих балансировщиков нагрузки (ALB) (если есть). Альби перенаправляет трафик во многих контейнерах, которые у вас есть. Как только контейнер зарегистрирован в ALB, трафик может поступать к нему.
Существует два типа услуг: ECS-EC2 и ECS-Fargate.
ECS-EC2 Услуги управляют контейнером в верхней части экземпляров EC2, к которым у вас есть доступ. ECS-Fargate Услуги управляют контейнерами на вершине экземпляров EC2, которые являются Управляется AWS Отказ У вас нет доступа к этим экземплярам EC2. Мы будем использовать ECS-EC2 для этого поста.
Кластер ECS
Кластер — это коллекция услуг и задач. При запуске служб ECS-EC2 кластер также является коллекцией экземпляров EC2. Вы устанавливаете номер и тип экземпляров EC2, которые вы хотите обеспечить. Сумма блоков памяти и блоков ЦП каждого из этих экземпляров EC2 определяет, сколько контейнеров вы можете обеспечить внутри вашего кластера.
Например, мы сделали кластер для нашего приложения для обработки изображений. У него есть 2 службы ECS-EC2: A Веб Сервис, который делает сайт и Обработка изображений Сервис, который размещает изображение. Кластер также имеет 3 экземпляра C5.Large, каждый из которых имеет 2VCPU (2,048 единицы процессора) и 4GIB памяти. Это дает нам общую мощность 6 144 единиц процессоров и 12GIB памяти. Эта емкость совместно используется между всеми услугами ECS-EC2 в кластере.
Предположим, наш веб-сервис нуждается в 1024 единицах процессора и 2 ГБ ОЗУ на задачу, и наша служба обработки изображений требуется 2,048 единиц процессоров и 4 ГБ ОЗУ на задачу. Мы можем соответствовать 2 задачам обработки изображений и 2 задач веб-сервисов в этих экземплярах C5.LARGE. Если мы решим добавить еще 1 задачу веб-службы, мы больше не сможем, потому что все 8 экземпляров C5.Large имеют свои ресурсы, посвященные 4 другим задачам.
В следующем посте мы создадим нашу учетную запись AWS и нажимайте изображение в реестр AWS Registry, эластичный реестр контейнера (ECR).
Оригинал: «https://dev.to/raphael_jambalos/deploy-rails-in-amazon-ecs-part-1-concepts-26nl»