Хмарні сервіси — це MVP (Most Valuable Players) сучасного IT. Вони дають нам:
- Легкість масштабування. Якщо твої користувачі раптом вирішать усім офісом завантажити твій сайт, тобі не потрібно стояти в черзі за залізом, щоб розширити сервер. Хмара зробить це за тебе.
- Економію часу і грошей. Нема потреби утримувати власну інфраструктуру, платити за електрику і модернізацію обладнання.
- Гнучкість. Хмари пропонують купу сервісів: від баз даних до машинного навчання. Хочеш базу даних? Бам! Вона готова.
- Відмовостійкість. Падіння сервісу в хмарі? Забудь про безсонні ночі — хмара все відновить за тебе.
Але не забувай: хмари — не чарівництво. Якщо ти деплоїш неправильний код, хмара тільки швидше його "розповсюдить". Розгортання в хмарі треба робити усвідомлено.
Огляд хмарних платформ
Для розгортання Spring Boot додатків можна використовувати багато платформ. Сьогодні ми розглянемо три найпопулярніші:
| Платформа | Опис |
|---|---|
| AWS | Лідер на ринку хмарних технологій. Має купу сервісів для контейнеризації і деплою |
| GCP | Проста інтеграція з Kubernetes, зручність для розробників |
| Azure | Хмарна платформа від Microsoft. Добре підходить для корпоративних рішень |
Кожна з цих платформ може похвалитися своїми перевагами й особливостями. Тож давай попрацюємо з кожною з них і спробуємо розгорнути наш додаток.
Підготовка до деплою
Перед початком роботи тобі потрібно виконати кілька кроків:
- Створи акаунт на хмарній платформі.
- Реєстрація на AWS, GCP або Azure — це твій квиток у світ хмар. Зазвичай вони пропонують безкоштовні пробні періоди.
- Встанови CLI для управління хмарою.
- AWS CLI, Google Cloud SDK (
gcloud) або Azure CLI — інструменти, через які ми будемо автоматизувати розгортання.
- AWS CLI, Google Cloud SDK (
- Підготуй Docker-образ.
- У попередніх лекціях ми створили Docker-образ нашого додатка. Нагадаю, як виглядав твій
Dockerfile:FROM openjdk:17-jdk-slim ARG JAR_FILE=target/my-spring-boot-app-1.0.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] - Образ можна зібрати командою:
docker build -t my-spring-boot-app:1.0 .
- У попередніх лекціях ми створили Docker-образ нашого додатка. Нагадаю, як виглядав твій
А тепер трохи "полетимо" по хмарах.
Деплой в AWS
Створення Elastic Container Registry (ECR)
AWS надає нам Elastic Container Registry для зберігання Docker-образів.
- Логін в AWS CLI:
Введи
aws configureAccess Key,Secret Keyта вибери регіон. - Створення репозиторію:
aws ecr create-repository --repository-name my-spring-boot-app - Отримання логіну для Docker:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <your_repo_url> - PUSH Docker-образу в ECR:
docker tag my-spring-boot-app:1.0 <your_repo_url>/my-spring-boot-app:1.0 docker push <your_repo_url>/my-spring-boot-app:1.0
Розгортання в Elastic Beanstalk
AWS Elastic Beanstalk спрощує деплой додатків. Виконай такі кроки:
- Встанови Elastic Beanstalk CLI.
- Ініціалізуй проект:
Вибери Docker як платформу.
eb init - Запусти додаток:
eb create spring-boot-env
AWS сам налаштує інфраструктуру, підтягне твій контейнер і запустить додаток.
Деплой в Google Cloud Platform (GCP)
Завантаження Docker-образу в Google Container Registry (GCR)
- Авторизуйся в GCP:
gcloud auth login gcloud config set project <your_project_id> - Завантаж Docker-образ в GCR:
docker tag my-spring-boot-app gcr.io/<your_project_id>/my-spring-boot-app:1.0 docker push gcr.io/<your_project_id>/my-spring-boot-app:1.0
Розгортання на Google Kubernetes Engine (GKE)
- Створи кластер Kubernetes:
gcloud container clusters create spring-boot-cluster \ --num-nodes=1 - Налаштуй
kubectl:gcloud container clusters get-credentials spring-boot-cluster - Створи файл
deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: spring-boot-app spec: replicas: 1 selector: matchLabels: app: spring-boot-app template: metadata: labels: app: spring-boot-app spec: containers: - name: spring-boot-app image: gcr.io/<your_project_id>/my-spring-boot-app:1.0 ports: - containerPort: 8080 - Застосуй конфігурації:
kubectl apply -f deployment.yaml - Переконайся, що додаток працює:
kubectl get pods
Деплой в Microsoft Azure
Завантаження образу в Azure Container Registry (ACR)
- Створи ресурс в Azure для ACR:
az acr create --resource-group myResourceGroup --name myRegistry --sku Basic - Увійди в ACR:
az acr login --name myRegistry - Завантаж Docker-образ:
docker tag my-spring-boot-app myregistry.azurecr.io/my-spring-boot-app:1.0 docker push myregistry.azurecr.io/my-spring-boot-app:1.0
Розгортання в Azure App Service
- Створи службу додатків:
az webapp create --resource-group myResourceGroup --plan myAppServicePlan \ --name my-spring-boot-app --deployment-container-image-name myregistry.azurecr.io/my-spring-boot-app:1.0 - Налаштуй автоматичне оновлення контейнера:
az webapp config container set --name my-spring-boot-app \ --resource-group myResourceGroup --docker-custom-image-name myregistry.azurecr.io/my-spring-boot-app:1.0
Корисні поради та типові помилки
- Не забувай про мережеві налаштування. Наприклад, на AWS або GCP ти можеш забути відкрити порти в правилах безпеки.
- Слідкуй за версіонуванням образів. Не використовуй
latestбез особливої потреби. - Моніторинг логів. У хмарах це дуже зручно робити через вбудовані системи моніторингу.
Тепер твій додаток живе в хмарі! І не просто живе, а повністю готовий до навантажень справжніх користувачів. P.S. Якщо твій сервіс починає підвисати, пам'ятай: іноді й у хмар буває "шторм".
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ