Розгортання Docker та Go на AWS Beanstalk

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

Нижче я розпишу процес, від початку до кінця, як вивести простий Go-додаток на Elastic Beanstalk за допомогою Docker.

Необхідні умови

Перш ніж почати, є кілька речей, які потрібно налаштувати/встановити:

І починаємо!

Ініціалізація директорії та Beanstalk

Якщо всі необхідні умови налаштовано, можемо почати зі створення нової папки для нашого додатку.

Я зазвичай починаю з команди eb init — це ініціалізує конфігурацію Beanstalk для нас.

Далі з'являться кілька запитань:

  • Виберіть регіон, в якому буде працювати цей додаток
  • Назва вашого додатку
  • Платформа — вибирайте Docker, оскільки ми розгортаємо за допомогою Docker
  • Версія Docker — я вибрав версію за замовчуванням, яка на той момент була 18.06.01-ce
  • Налаштування SSH — я цього не вмикав, але ви можете

Після виконання eb init у вашій директорії з'являться два приховані файли:

  • .gitignore — стандартний файл для git
  • .elasticbeanstalk — ця папка міститиме конфігураційні файли для Beanstalk

Go-додаток

Це буде простий HTTP додаток — я буду використовувати gorilla mux для маршрутизації. У кореневій директорії створіть файл main.go, який виглядатиме так:

Для цього проєкту я використовую Go-модулі для керування залежностями, щоб налаштувати Go mod, виконайте наступні команди:

➜ go mode init eb-go  
➜ go mod tidy

Якщо ви хочете протестувати додаток, можна виконати команду go build і перевірити, що localhost:8081/hello виводить hello world

Dockerизація додатку

Тепер, коли у нас є Go-додаток, час написати наш Dockerfile. Вам потрібно створити файл з назвою Dockerfile у кореневій директорії проєкту.

Цей Dockerfile є дуже простим і прямолінійним підходом до контейнеризації нашого Go-додатку.

  • Створіть робочу директорію всередині контейнера
  • Скопіюйте всю папку з додатком в контейнер
  • Побудуйте Go-бінарник і назвіть його eb-go-app
  • Відкрийте порт 8081, на якому наш Go-додаток приймає з'єднання
  • Вкажіть Docker, що робити після запуску контейнера

Наступне, що я рекомендую зробити, це написати файл .dockerignore. Це запобігає тому, щоб Docker копіював непотрібні файли під час процесу копіювання.

Якщо ви хочете протестувати Docker контейнер, можете виконати наступні команди у кореневій директорії:

➜ docker build -t eb-go .   
➜ docker run --rm -p8081:8081 eb-go

Після виконання команди docker run контейнер має запуститися на localhost:8081, і ви зможете перейти на наш /hello endpoint і побачити "hello world".

Деяка додаткова інформація: якщо ви виконаєте команду docker ps в новому вікні терміналу, поки працює docker run, ви зможете побачити інформацію про запущений eb-go.

Розгортання на Beanstalk

Тепер, коли ми підготували все, що потрібно для розгортання нашого коду на Beanstalk, директорія проєкту має виглядати наступним чином:

- .elasticbeanstalk  
 - config.yml  
- .dockerignore  
- .gitignore  
- Dockerfile  
- go.mod  
- go.sum  
- main.go

Далі нам потрібно створити середовище Beanstalk.
Коли ми спочатку виконали команду eb init, це лише налаштувало конфігураційний файл, який буде потрібен під час процесу створення середовища.

Команда eb create налаштує ваше середовище Beanstalk, а також здійснить початкове розгортання вашого додатку (зверніть увагу, що це може зайняти кілька хвилин).

➜ eb create eb-go-app

І ось, ваш додаток розгорнуто! Тепер є два способи перевірити статус і загальну інформацію про ваш додаток.

Один із способів — через консоль AWS Elastic Beanstalk, як показано нижче.

pic

Інший спосіб — через командний рядок eb. Якщо ви виконаєте команду eb status, буде виведена така інформація:

➜ eb status  
Environment details for: eb-go-app  
 Application name: eb-go-app  
 Region: us-east-1  
 Deployed Version: app-181009_204155  
 Environment ID: e-iwpmhptanp  
 Platform: arn:aws:elasticbeanstalk:us-east-1::platform/Docker running on 64bit Amazon Linux/2.12.3  
 Tier: WebServer-Standard-1.0  
 CNAME: eb-go-app.qfubmc6zxv.us-east-1.elasticbeanstalk.com  
 Updated: 2018-10-10 00:45:16.725000+00:00  
 Status: Ready  
 Health: Green

Розгортання оновлень

Тепер давайте оновимо наш додаток, додавши новий endpoint /goodbye — у файлі main.go додаємо:

Тепер, щоб розгорнути наші нові зміни, потрібно просто виконати команду eb deploy.

Примітка щодо використання git і Beanstalk. Якщо ваш проєкт використовує git, Beanstalk буде розгортати тільки останній коміт. Тому, якщо у вас є незакомічений код, він не буде розгорнутий. Це пов'язано з тим, що eb cli створює архів із останнього коміту git і використовує його під час процесу розгортання.

Ось і все

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

Весь вихідний код можна знайти на https://github.com/ddymko/Go-Beanstalk

Перекладено з: Deploying Docker & Go to AWS Beanstalk

Leave a Reply

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