JavaRush /Курсы /Модуль 5. Spring /Лекция 150: Деплой Spring Boot приложения в облачные серв...

Лекция 150: Деплой Spring Boot приложения в облачные сервисы (AWS, GCP, Azure)

Модуль 5. Spring
15 уровень , 9 лекция
Открыта

Облачные сервисы — это MVP (Most Valuable Players) современного IT. Они дают нам:

  • Лёгкость масштабирования. Если ваши пользователи вдруг решили всем офисом загрузить ваш сайт, вам не нужно выстраиваться в очередь с железками, чтобы расширить сервер. Облако это сделает за вас.
  • Экономию времени и денег. Нет необходимости содержать свою инфраструктуру, платить за электрику и модернизацию оборудования.
  • Гибкость. Облака предлагают множество сервисов: от баз данных до машинного обучения. Хочешь базу данных? Бам! Она готова.
  • Отказоустойчивость. Падение сервиса в облаке? Забудьте о бессонных ночах — облако все восстановит за вас.

Но не забывайте: облака не волшебство. Если вы деплоите неправильный код, облако только быстрее его "распространит". Развертывание в облаке нужно делать осознанно.


Обзор облачных платформ

Для развертывания Spring Boot приложений можно использовать множество платформ. Сегодня мы рассмотрим три самых популярных:

Платформа Описание
AWS Лидер на рынке облачных технологий. Обладает множеством сервисов для контейнеризации и деплоя
GCP Простая интеграция с Kubernetes, удобство для разработчиков
Azure Облачная платформа от Microsoft. Хорошо подходит для корпоративных решений

Каждая из этих платформ может хвастаться своими преимуществами и особенностями. Поэтому давайте поработаем с каждой из них и попробуем развернуть наше приложение.


Подготовка к деплою

Перед началом работы вам необходимо выполнить несколько шагов:

  1. Создайте аккаунт на облачной платформе.
    • Регистрация на AWS, GCP или Azure — это ваш билет в мир облаков. Обычно они предлагают бесплатные пробные периоды.
  2. Установите CLI для управления облаком.
    • AWS CLI, Google Cloud SDK (gcloud) или Azure CLI — инструменты, через которые мы будем автоматизировать развертывание.
  3. Подготовьте 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 .
      

Теперь давайте немного "полетим" по облакам.


Деплой в AWS

Создание Elastic Container Registry (ECR)

AWS предоставляет нам Elastic Container Registry для хранения Docker-образов.

  1. Логин в AWS CLI:
    
    aws configure
    
    Введите Access Key, Secret Key и выберите регион.
  2. Создание репозитория:
    
    aws ecr create-repository --repository-name my-spring-boot-app
    
  3. Получение логина для Docker:
    
    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <your_repo_url>
    
  4. 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 упрощает деплой приложений. Выполните следующие шаги:

  1. Установите Elastic Beanstalk CLI.
  2. Инициализируйте проект:
    
    eb init
    
    Выберите Docker в качестве платформы.
  3. Запустите приложение:
    
    eb create spring-boot-env
    

AWS сам настроит инфраструктуру, подтянет ваш контейнер и запустит приложение.


Деплой в Google Cloud Platform (GCP)

Загрузка Docker-образа в Google Container Registry (GCR)

  1. Авторизуйтесь в GCP:
    
    gcloud auth login
    gcloud config set project <your_project_id>
    
  2. Загрузите 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)

  1. Создайте кластер Kubernetes:
    
    gcloud container clusters create spring-boot-cluster \
      --num-nodes=1
    
  2. Настройте kubectl:
    
    gcloud container clusters get-credentials spring-boot-cluster
    
  3. Создайте файл 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
    
  4. Примените конфигурации:
    
    kubectl apply -f deployment.yaml
    
  5. Убедитесь, что приложение работает:
    
    kubectl get pods
    

Деплой в Microsoft Azure

Загрузка образа в Azure Container Registry (ACR)

  1. Создайте ресурс в Azure для ACR:
    
    az acr create --resource-group myResourceGroup --name myRegistry --sku Basic
    
  2. Войдите в ACR:
    
    az acr login --name myRegistry
    
  3. Загрузите 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

  1. Создайте службу приложений:
    
    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
    
  2. Настройте автоматическое обновление контейнера:
    
    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
    

Полезные советы и типичные ошибки

  1. Не забывайте про сетевые настройки. Например, на AWS или GCP вы можете забыть открыть порты безопасности.
  2. Следите за версионированием образов. Не используйте latest без особой необходимости.
  3. Мониторьте логи. В облаках это сделать очень удобно через встроенные системы мониторинга.

Теперь ваше приложение живёт в облаке! И не просто живёт, а полностью готово к нагрузкам настоящих пользователей. P.S. Если ваш сервис начинает подвисать, помните: иногда и облака попадают в "шторм".

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ