Щоб досягти нашої мети, ми створимо повну референсну архітектуру.
1. Back-end:
Почнемо з бекенду, створивши API (Інтерфейс програмування додатків) REST за допомогою Java та фреймворку Spring Boot.
Spring Boot широко використовується у світі та на ринку через свою масштабованість, продуктивність та універсальність. Наприклад, Netflix використовує цей фреймворк для досягнення кращої доступності своїх мікросервісів по всьому світу:
Швидкий огляд цього кроку на бекенді
Я використаю spring data rest, data jpa та Postgre для створення реалізації CRUD, а також H2 для тестування та Lombok для абстракції всіх шаблонних кодів Java:
Я буду використовувати JIB для упакування моєї програми з фронтендом в один jar файл, створюючи профілі та використовуючи плагін Maven для створення Docker-образу:
2. Front-end:
Фронтенд використовуватиме концепцію SPA (Single Page Application) з React.js, JavaScript-фреймворком, створеним компанією Facebook, який багато компаній використовують у своїх проєктах з низки причин:
- Безкоштовна та з відкритим вихідним кодом бібліотека;
- Хороша продуктивність;
- Перевикористовуваність компонентів;
Приклад програми:
Отже, на цьому етапі наша програма складається з одного SPA React-додатка на фронтенді, REST API на Java Spring Boot, що працює на бекенді, отримує та обробляє запити, використовуючи базу даних Postgre.
Все це буде упаковано плагіном JIB Maven в один jar файл і створить образ на Docker Hub через Docker Compose.
3. Створення Docker-образу:
Плагін JIB побудує фронтенд та бекенд програми, упакує їх в один jar файл і відправить на Docker Hub.
4. AWS ElasticBeanstalk:
AWS EB (ElasticBeanstalk) є PaaS (Platform-as-a-Service), де можна керувати:
- AWS інстансами: служба EC2
- Групами безпеки
- Масштабуванням (AutoScale)
- Балансуванням навантаження (ELB)
- Деплоєм коду та політикою розгортання
- Версіонуванням артефактів: для зберігання використовується S3
- Конфігурацією під час деплою (та, що відрізняється між тестом, staging та продакшеном…)
Кожен із цих сервісів AWS зазвичай потребує певної експертної підготовки, але в EB цього не потрібно. Ось чому EB може бути особливо привабливим для команд і компаній, що мають нестачу людських ресурсів або для стартапів, де ви надаєте права EB для керування вашими EC2, S3, ELB, AutoScale, моніторингом, розгортанням від вашого імені.
Деякі інші опції:
- Heroku
- Azure Web Sites
- Google App Engine
Основним чином, PaaS зазвичай не дозволяє вам доступ до ОС (Операційної системи) та Middleware.
Різниця між IaaS-PaaS-SaaS:
Середовище підтримує наступні мови:
- Java
- .NET
- Go
- PHP
- Ruby
- node.js
- Python
- Docker
Ми обрали деплой за допомогою Docker.
5.
Розгортання програми в AWS ElasticBeanstalk:
Наступна модель представляє нашу програму, що працює в AWS ElasticBeanstalk з потужністю еластичності, яка визначає, скільки інстансів нашої програми потрібно створити для задоволення попиту.
Отже, в EB ми створюємо групу безпеки та визначаємо дозволи для роботи з програмою та її розгортання.
Далі, при реалізації з Docker-образом, ми вибираємо файл Docker Compose для завантаження всього образу в EB:
Сподіваюся, ця стаття допоможе вам у ваших дослідженнях або реальних програмах.
Ось приклад коду для ElasticBeanstalk:
https://github.com/deivisutp/igti-cicd-projeto-aplicado
Перекладено з: Deploying a scalable application with AWS ElasticBeanstalk and Docker