RU | EN | DE

1. Деплой Spring Boot в AWS

Вариант 1: AWS Elastic Beanstalk Проще всего → берёт твой jar/war и разворачивает.📌 Команда:

eb init -p java-17 demo-app
eb create demo-env
eb deploy

Вариант 2: AWS ECS (контейнеры)

  1. Собираем Docker-образ.
  2. Загружаем в Amazon Elastic Container Registry (ECR):
aws ecr create-repository --repository-name demo-app
docker tag demo-app:latest <aws-account-id>.dkr.ecr.region.amazonaws.com/demo-app:latest
docker push <aws-account-id>.dkr.ecr.region.amazonaws.com/demo-app:latest
  1. Запускаем в ECS (Fargate).

Вариант 3: AWS EKS (Kubernetes)

  • Поднимаем кластер EKS.
  • Деплоим как обычный Kubernetes-манифест (см. блок DevOps).

2. Деплой Spring Boot в GCP

Вариант 1: Google App Engine 📌 app.yaml:

runtime: java17
instance_class: F1

Загрузка:

gcloud app deploy

Вариант 2: Google Cloud Run (Serverless Containers)

  • Берёт Docker-образ.
  • Скейлит от 0 до N (zero-cost, пока нет трафика).
gcloud run deploy demo-app --image gcr.io/PROJECT-ID/demo-app --platform managed

Вариант 3: GKE (Google Kubernetes Engine)

  • Деплой как обычный K8s + Helm.

3. Деплой Spring Boot в Azure

Вариант 1: Azure App Service

  • Загружаешь jar/Docker-образ.
  • Azure сама запускает.

Вариант 2: Azure AKS (Kubernetes)

  • Аналог GKE/EKS.
  • Helm charts работают из коробки.

Вариант 3: Azure Functions (Serverless)

  • Если приложение можно порезать на функции → Spring Cloud Function.

4. Kubernetes Helm Charts

📌 Helm = менеджер пакетов для Kubernetes.

📄 Chart.yaml:

apiVersion: v2
name: demo-app
version: 0.1.0

📄 values.yaml:

replicaCount: 2
image:
  repository: demo-app
  tag: latest
service:
  type: LoadBalancer
  port: 80

📌 Установка: helm install demo ./charts/demo-app

5. Spring Cloud Config

📌 Для централизованной конфигурации (одна конфигурация для множества сервисов).

Config Server 📄 Зависимость:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>

📄 Запуск:

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

📄 application.yml:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/my-org/config-repo

Клиент 📄 Зависимость:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

📄 bootstrap.yml:

spring:
  application:
    name: demo-app
  cloud:
    config:
      uri: http://localhost:8888

Теперь настройки берутся из git**-репозитория конфигов**.

6. Serverless + Spring

📌 Через Spring Cloud Function можно писать лямбды.

Пример AWS Lambda:

@Bean
public Function<String, String> uppercase() {
    return value -> value.toUpperCase();
}

📌 Деплой в AWS Lambda через адаптер spring-cloud-function-adapter-aws.

7. CI/CD в облаке

  • AWS → CodePipeline / CodeBuild.
  • GCP → Cloud Build.
  • Azure → DevOps Pipelines.
  • Везде можно использовать GitHub Actions (самый популярный вариант).

8. Best Practices

  • ✅ Для MVP → Heroku, App Engine, Cloud Run (быстро и просто).
  • ✅ Для enterprise → Kubernetes (EKS/GKE/AKS) + Helm + Spring Cloud Config.
  • ✅ Храни секреты в Vault / Secret Manager / Kubernetes Secrets.
  • ✅ Разделяй окружения (dev/test/prod) и конфиги.
  • ✅ Используй observability стек (Prometheus + Grafana + Loki/ELK).
  • ✅ Делай blue-green или canary deploys → безопасные обновления.