Нещодавно я мав можливість розгорнути 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, як показано нижче.
Інший спосіб — через командний рядок 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