Розгортання та моніторинг Docker контейнерів за допомогою AWS Elastic Beanstalk за 3 кроки

pic

AWS Elastic Beanstalk — це одна з найпоширеніших служб AWS, яка дозволяє розробникам розгортати додатки без необхідності налаштовувати інфраструктуру, зберігаючи при цьому високу доступність вашого додатку.

У цьому пості я проведу вас через процес використання Elastic Beanstalk для розгортання Docker контейнерів з нуля. Потім ми автоматизуємо процес розгортання за допомогою конвеєра безперервної інтеграції (CI/CD), а також розглянемо такі складніші питання, як налагодження та моніторинг ваших додатків в EB.

pic

Конвеєр CI/CD з Elastic Beanstalk

Крок #1: Налаштування середовища

Для початку використаємо командний інтерфейс AWS (CLI), щоб створити новий додаток Elastic Beanstalk за допомогою такої команди:

  • Далі створимо нове середовище під назвою staging:

  • У консолі AWS ви побачите нове середовище, створене в розділі Elastic Beanstalk:

pic

  • Перейдіть у браузері за URL цього середовища, і буде відображено тестовий Docker додаток:

pic

  • Тепер давайте розгорнемо наш додаток. Я написав невеликий веб-додаток на Go, який повертає список Месників Marvel — бачу тебе, Танос!

  • Далі створимо Dockerfile для створення Docker образу.

  • Оскільки Go — це компільована мова, ми можемо використати функціональність багатокрокових (multi-stage) Docker образів для створення легкого Docker образу:

  • Далі створимо Dockerrun.aws.json, який описує, як контейнер буде розгорнутий в Elastic Beanstalk:

  • Тепер, коли додаток визначено, створимо пакет додатка, зібравши ZIP-архів:

  • За допомогою AWS CLI створимо S3 бакет для зберігання різних версій наших пакетів додатків:

  • Далі виконаємо таку команду для копіювання додатка у бакет:

  • Потім створимо нову версію додатка з пакету додатка:

pic

  • Нарешті, розгорнемо версію в середовище staging:

  • Потрібно кілька секунд для розгортання нової версії:

pic

  • Тепер перейдіть в браузері за URL середовища — буде повернуто список Месників у форматі JSON, як показано нижче:

pic

  • Тепер, коли наш Docker додаток розгорнуто, давайте автоматизуємо цей процес, налаштувавши конвеєр CI/CD!

Крок #2: Конвеєр CI/CD

Для CI/CD конвеєра я рекомендую використовувати CircleCI — ці самі кроки можна застосувати до будь-якого сервера CI, з яким ви звикли працювати.

Наш CI/CD конвеєр буде виконувати наступне:

  1. встановлювати AWS CLI та налаштовувати середовище
  2. запускати юніт-тести
  3. створювати Docker образ і завантажувати його в DockerHub
  4. створювати новий пакет додатка
  5. розгортати пакет в Elastic Beanstalk

Давайте почнемо, створивши файл circle.yml з наступним вмістом:

  • Для того щоб надати Circle CI права на виконання операцій AWS, потрібно створити нового IAM користувача з таким IAM політикою:

  • Створіть ключі доступу AWS (AWS access & secret keys)

  • Далі поверніться до Circle CI і натискайте налаштування проекту, і вставте облікові дані:

pic

  • Далі кожен раз, коли ви надсилаєте зміни в репозиторій, буде запускатися збірка

pic

  • І нова версія буде автоматично розгорнута в Elastic Beanstalk:

pic

Крок #3: Моніторинг

Моніторинг ваших розгорнутих додатків є дуже важливим.
Оскільки AWS CloudWatch не надає метрики, такі як використання пам'яті вашими додатками в Elastic Beanstalk, ми вирішимо це питання, створивши власні метрики.

У цьому розділі ми встановимо агент збору даних на інстанс. Агент буде збирати метрики та надсилати їх до бази даних часового ряду.

Для встановлення агента ми використаємо папку .ebextensions для створення наступних трьох конфігураційних файлів для збору метрик:

  • 01-install-telegraf.config: встановлення Telegraf на інстанс

  • 02-config-file.config: створення конфігураційного файлу Telegraf для збору метрик використання системи та Docker контейнерів.

  • 03-start-telegraf.config: запуск агента Telegraf.

  • Після того як версія додатка буде розгорнута в Elastic Beanstalk, метрики будуть надіслані до вашої бази даних часового ряду.

  • У цьому прикладі я використав InfluxDB як сховище даних і створив кілька динамічних інформаційних панелей (Dashboards) в Grafana для візуалізації метрик у реальному часі:

Метрики контейнерів:

pic

Метрики хостів:

pic

Для детального пояснення того, як налаштувати Telegraf, InfluxDB і Grafana, обов'язково прочитайте мою попередню статтю, в якій описано процес створення інтерактивної, реальної та динамічної інформаційної панелі.

Сподіваюся, що кроки в цьому блозі заощадять вам час і зусилля, автоматично розгортаючи ваш додаток за допомогою Docker контейнерів і Elastic Beanstalk — без необхідності налаштовувати інфраструктуру.

Повний код можна знайти на моєму GitHub. Буду радий вашим коментарям, відгукам або пропозиціям нижче — або зв'яжіться зі мною безпосередньо через Twitter @mlabouardy.

[pic

Перекладено з: Deploy and monitor Docker containers using AWS Elastic Beanstalk in 3 steps

Leave a Reply

Your email address will not be published. Required fields are marked *