JavaRush /Курси /Модуль 5. Spring /Лекція 150: Деплой Spring Boot додатка в хмарні сервіси (...

Лекція 150: Деплой Spring Boot додатка в хмарні сервіси (AWS, GCP, Azure)

Модуль 5. Spring
Рівень 22 , Лекція 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. Якщо твій сервіс починає підвисати, пам'ятай: іноді й у хмар буває "шторм".

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ