CodeGym /Cursos /Módulo 5. Spring /Lección 150: Despliegue de una aplicación Spring Boot en ...

Lección 150: Despliegue de una aplicación Spring Boot en servicios en la nube (AWS, GCP, Azure)

Módulo 5. Spring
Nivel 22 , Lección 9
Disponible

Los servicios en la nube son los MVP (Most Valuable Players) del IT moderno. Nos dan:

  • Facilidad para escalar. Si tus usuarios de repente deciden todos a la vez cargar tu sitio, no tienes que ponerte a buscar hardware; la nube lo escalará por ti.
  • Ahorro de tiempo y dinero. No necesitas mantener tu propia infraestructura ni pagar por la electricidad o la renovación de equipos.
  • Flexibilidad. Las nubes ofrecen un montón de servicios: desde bases de datos hasta machine learning. ¿Quieres una base de datos? ¡Pum! Ya está lista.
  • Tolerancia a fallos. ¿Se cae el servicio en la nube? Olvídate de las noches en vela: la nube te ayudará a recuperarlo.

Pero no lo olvides: la nube no es magia. Si despliegas código mal hecho, la nube solo lo "propagará" más rápido. El despliegue en la nube hay que hacerlo con cabeza.


Resumen de plataformas en la nube

Para desplegar aplicaciones Spring Boot puedes usar muchas plataformas. Hoy veremos tres de las más populares:

Plataforma Descripción
AWS Líder en el mercado de tecnologías cloud. Tiene montones de servicios para la containerización y el despliegue
GCP Integración sencilla con Kubernetes, muy cómoda para desarrolladores
Azure Plataforma cloud de Microsoft. Va muy bien para soluciones corporativas

Cada una de estas plataformas tiene sus ventajas y particularidades. Así que vamos a trabajar con cada una y a intentar desplegar nuestra aplicación.


Preparación para el despliegue

Antes de empezar necesitas hacer algunos pasos:

  1. Crea una cuenta en la plataforma cloud.
    • Registrarte en AWS, GCP o Azure es tu billete al mundo de la nube. Normalmente ofrecen periodos de prueba gratuitos.
  2. Instala el CLI para manejar la nube.
    • AWS CLI, Google Cloud SDK (gcloud) o Azure CLI — son las herramientas con las que automatizaremos el despliegue.
  3. Prepara la imagen Docker.
    • En las lecciones anteriores creamos la imagen Docker de nuestra aplicación. Recordemos cómo era tu 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"]
      
    • La imagen se puede construir con el comando:
      
      docker build -t my-spring-boot-app:1.0 .
      

Ahora vamos a "volar" un poco por las nubes.


Despliegue en AWS

Creando Elastic Container Registry (ECR)

AWS nos ofrece Elastic Container Registry para almacenar imágenes Docker.

  1. Login en AWS CLI:
    
    aws configure
    
    Introduce el Access Key, Secret Key y elige la región.
  2. Crear un repositorio:
    
    aws ecr create-repository --repository-name my-spring-boot-app
    
  3. Obtener el login para Docker:
    
    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <your_repo_url>
    
  4. PUSH de la imagen Docker al 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
    

Despliegue en Elastic Beanstalk

AWS Elastic Beanstalk simplifica mucho el despliegue de aplicaciones. Sigue estos pasos:

  1. Instala Elastic Beanstalk CLI.
  2. Inicializa el proyecto:
    
    eb init
    
    Selecciona Docker como plataforma.
  3. Arranca la aplicación:
    
    eb create spring-boot-env
    

AWS configurará la infraestructura, tirará de tu contenedor y arrancará la aplicación.


Despliegue en Google Cloud Platform (GCP)

Subida de la imagen Docker a Google Container Registry (GCR)

  1. Autentícate en GCP:
    
    gcloud auth login
    gcloud config set project <your_project_id>
    
  2. Sube la imagen Docker a 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
    

Despliegue en Google Kubernetes Engine (GKE)

  1. Crea un clúster de Kubernetes:
    
    gcloud container clusters create spring-boot-cluster \
      --num-nodes=1
    
  2. Configura kubectl:
    
    gcloud container clusters get-credentials spring-boot-cluster
    
  3. Crea el archivo 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. Aplica las configuraciones:
    
    kubectl apply -f deployment.yaml
    
  5. Comprueba que la aplicación funciona:
    
    kubectl get pods
    

Despliegue en Microsoft Azure

Subida de la imagen al Azure Container Registry (ACR)

  1. Crea un recurso en Azure para ACR:
    
    az acr create --resource-group myResourceGroup --name myRegistry --sku Basic
    
  2. Entra en ACR:
    
    az acr login --name myRegistry
    
  3. Sube la imagen 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
    

Despliegue en Azure App Service

  1. Crea el 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
    
  2. Configura la actualización automática del contenedor:
    
    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
    

Consejos útiles y errores típicos

  1. No te olvides de la configuración de red. Por ejemplo, en AWS o GCP puedes olvidar abrir los puertos en las reglas de seguridad.
  2. Cuida el versionado de las imágenes. No uses latest salvo que sea realmente necesario.
  3. Monitorea los logs. En la nube es muy cómodo hacerlo con los sistemas de monitorización integrados.

¡Ahora tu aplicación vive en la nube! Y no solo vive, está totalmente lista para las cargas de usuarios reales. P.D. Si tu servicio empieza a atascarse, recuerda: a veces incluso la nube entra en una "tormenta".

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION