Облачные сервисы — это 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. Если ваш сервис начинает подвисать, помните: иногда и облака попадают в "шторм".
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ