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:
- 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.
- 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.
- AWS CLI, Google Cloud SDK (
- 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 .
- En las lecciones anteriores creamos la imagen Docker de nuestra aplicación. Recordemos cómo era tu
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.
- Login en AWS CLI:
Introduce el
aws configureAccess Key,Secret Keyy elige la región. - Crear un repositorio:
aws ecr create-repository --repository-name my-spring-boot-app - Obtener el login para Docker:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <your_repo_url> - 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:
- Instala Elastic Beanstalk CLI.
- Inicializa el proyecto:
Selecciona Docker como plataforma.
eb init - 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)
- Autentícate en GCP:
gcloud auth login gcloud config set project <your_project_id> - 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)
- Crea un clúster de Kubernetes:
gcloud container clusters create spring-boot-cluster \ --num-nodes=1 - Configura
kubectl:gcloud container clusters get-credentials spring-boot-cluster - 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 - Aplica las configuraciones:
kubectl apply -f deployment.yaml - Comprueba que la aplicación funciona:
kubectl get pods
Despliegue en Microsoft Azure
Subida de la imagen al Azure Container Registry (ACR)
- Crea un recurso en Azure para ACR:
az acr create --resource-group myResourceGroup --name myRegistry --sku Basic - Entra en ACR:
az acr login --name myRegistry - 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
- 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 - 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
- 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.
- Cuida el versionado de las imágenes. No uses
latestsalvo que sea realmente necesario. - 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".
GO TO FULL VERSION