Organizar una app de Spring Boot Kotlin y, luego, implementarla en Cloud Run
Acerca de este codelab
1. Antes de comenzar
Google proporciona una potente herramienta de compilación de imágenes con la que puedes compilar y publicar fácilmente una imagen de contenedor de Docker optimizada para apps de Java en cuestión de segundos sin Docker ni Dockerfile. Google Cloud también lleva sin servidores a los contenedores mediante Cloud Run, una plataforma de procesamiento administrada con ajuste de escala automático para los contenedores sin estado. En este codelab, verás lo fácil que es organizar tu app de Spring Boot Kotlin en contenedores, publicar en Container Registry y ejecutar la imagen en Google Cloud de manera fluida.
En este codelab, se explica cómo configurar una app en Kotlin, que demuestra el uso de los servicios y las herramientas de Google Cloud, incluidos Jib, Container Registry y Cloud Run.
Prerequisites
- Estar familiarizado con el lenguaje y las herramientas de programación de Java
- Conocimientos de editores de texto estándares de Linux, como Vim, Emacs y nano
Actividades
- Configura una app de Kotlin para Spring Boot.
- Compilar una imagen optimizada de Docker
- Publica la imagen en Container Registry.
- Ejecuta la app alojada en contenedores en Cloud Run.
Requisitos
- Un proyecto de Google Cloud
- Un navegador, como Google Chrome
2. Cómo prepararte
Configuración del entorno a su propio ritmo
- Accede a Cloud Console y crea un proyecto nuevo o reutiliza uno existente. (Si no tienes una cuenta de Gmail o G Suite, debes crear una).
Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID
.
- A continuación, debes habilitar la facturación en Cloud Console para usar los recursos de Google Cloud.
Ejecutar este codelab no debería costar más que unos pocos dólares, pero podría ser más si decides usar más recursos o si los dejas en ejecución.
Los usuarios nuevos de Google Cloud son aptos para obtener una prueba gratuita de USD 300.
Cloud Shell
Si bien Google Cloud se puede operar de forma remota desde tu laptop, en este codelab usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud.
Activar Cloud Shell
- En Cloud Console, haz clic en Activar Cloud Shell
.
Si nunca ha iniciado Cloud Shell, aparecerá una pantalla intermedia (debajo de la mitad inferior de la página) que describe qué es. Si ese es el caso, haz clic en Continuar (y no volverás a verlo). Así es como se ve la pantalla única:
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer simplemente con un navegador o tu Chromebook.
Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.
- En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
gcloud auth list
Resultado del comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
De lo contrario, puede configurarlo con este comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. Inicializa una app de Spring Boot
- Genera una nueva app de Spring Boot con Spring Initializr.
$ curl https://start.spring.io/starter.tgz \ -d language=kotlin \ -d dependencies=web \ -d baseDir=kotlin-jib-cloud-run | tar -xzvf -
Ten en cuenta que Initializr agregará automáticamente el spring-boot-starter-web
a tus dependencias en el pom.xml
de la app de plantilla.
- Cambia al directorio de la app de plantillas.
$ cd kotlin-jib-cloud-run
- Compila y ejecuta la app con Maven.
$ ./mvnw -DskipTests spring-boot:run
- Una vez iniciada, la app comenzará a escuchar en el puerto 8080. Haga clic en Vista previa en la Web
en la barra de herramientas de Cloud Shell y seleccione Vista previa en el puerto 8080 para acceder a la aplicación.
- Deberías recibir una respuesta 404 porque la app aún no hace nada útil. Detén la app con
Control+C
.
4. Agregar un controlador web
- Crea la siguiente clase
Controller
en el paquete de demostración:
$ vi src/main/kotlin/com/example/demo/Controller.kt or $ nano src/main/kotlin/com/example/demo/Controller.kt
src/main/kotlin/com/example/demo/Controller.kt
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class Controller {
@GetMapping("/")
fun saySomething(): String {
return "Kotlin app on Cloud Run, containerized by Jib!"
}
}
- Vuelve a compilar y ejecutar la app.
$ ./mvnw spring-boot:run
- Vuelve a verificar la app con la Vista previa en la Web
. Esta vez, deberías ver el mensaje "
Kotlin app on Cloud Run, containerized by Jib!
". Detén la app conControl+C
.
5. Organizar su aplicación en contenedores y publicarla en Container Registry
Con Jib, puede organizar su aplicación en contenedores de forma optimizada sin Docker y publicarla en cualquier Container Registry.
- Antes de continuar, debe activar la API de Container Registry. Esto solo se debe hacer una vez por proyecto para que la API sea accesible.
$ gcloud services enable containerregistry.googleapis.com
- Ejecuta Jib para compilar una imagen de Docker y publicarla en Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
Al final, verá el siguiente mensaje: "La aplicación se aloja en un contenedor y se envía a Container Registry".
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
Si ves un error, vuelve a verificar si $GOOGLE_CLOUD_PROJECT
se configuró correctamente en el ID de tu proyecto de Google Cloud (PROJECT_ID
).
- Antes de continuar, comprueba si la imagen se publicó correctamente. Regrese a Cloud Console, haga clic en Menú de navegación
y seleccione Container Registry.
Verá que su imagen se publicó correctamente.
6. Ejecuta la app alojada en contenedores en Cloud Run
Cloud Run lleva sin servidores a los contenedores y escala de forma automática tus contenedores sin estado.
- Vuelva a hacer clic en Menú de navegación
y seleccione Cloud Run.
Si es la primera vez que accedes a Cloud Run, verás el siguiente diálogo para la configuración única. Haga clic en Comenzar a usar Cloud Run si aparece.
- En la página de Cloud Run, haga clic en Crear servicio.
- En la siguiente pantalla, haz clic en Seleccionar en Fuente. La fuente es la imagen que deseas ejecutar en Cloud Run.
- El diálogo mostrará la imagen que creaste anteriormente. Seleccione la imagen y haga clic en Continuar.
- Estás a solo unos clics de implementar la app ahora. En Deployment platform, elige Cloud Run (full managed) para tener el servicio completamente administrado en Google Cloud. Elige una región adecuada para tu ubicación, selecciona Permitir invocaciones sin autenticar y haz clic en Crear. Listo.
Cuando la imagen se haya implementado por completo, la página de Cloud Run mostrará una URL para acceder a la aplicación. Consúltela.
Al final, verás el mensaje que esperas en la app.
Kotlin app on Cloud Run, containerized by Jib!
Listo. En el futuro, si necesitas implementar versiones de la app nuevas, puedes hacer clic en Implementar revisión nueva en la página.
7. Realiza una limpieza
- Para limpiar tu entorno, debes borrar la app implementada en Cloud Run y la imagen publicada en Container Registry. Ve a Cloud Run, selecciona la app y haz clic en Borrar.
- Del mismo modo, ve a la página de Container Registry y borra la imagen.
8. Felicitaciones
¡Felicitaciones! Organizaste correctamente tu app de Kotlin en Spring Boot y la implementaste en Cloud Run.
Con Jib, compiló una imagen de contenedor optimizada sin Docker instalado o escribiendo un Dockerfile y lo publicó en Container Registry. Jib optimiza la construcción de imágenes para que cualquier persona que no tenga conocimientos profundos de Docker pueda organizar las apps de Java en contenedores de forma rápida y eficiente. Luego, con unos pocos clics, implementó la aplicación en Cloud Run para comenzar a publicar anuncios de inmediato.
Más información
- Implementa una app de Java en Kubernetes en Google Kubernetes Engine
- Documentación de Cloud Run
- Descripción general de Cloud Run
- Presentación de Jib: Crea mejores imágenes de Docker para Java
- Compila contenedores más rápido con Jib, una herramienta de compilación de imágenes de Google para apps de Java.
- Jib: Aloja tu app en Java
- Canal de Jib Gitter
- Lista de distribución de usuarios de Jib