Aloja en contenedores una app de Kotlin de Spring Boot y, luego, impleméntala en Cloud Run

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 muy poco tiempo sin Docker ni Dockerfile. Google Cloud también ofrece la tecnología sin servidores para contenedores con Cloud Run, una plataforma de procesamiento administrada que ajusta automáticamente la escala de tus contenedores sin estado. En este codelab, verás lo fácil que es alojar en contenedores tu app de Spring Boot Kotlin, publicarla en Container Registry y ejecutar la imagen en Google Cloud de manera fluida.

En este codelab, se explica cómo configurar una app simple en Kotlin, que muestra el uso de los servicios y las herramientas de Google Cloud, incluidos Jib, Container Registry y Cloud Run.

Requisitos previos

  • Tener conocimientos del lenguaje de programación y las herramientas de Java
  • Conocimiento de editores de texto estándares de Linux, como Vim, Emacs y nano

Actividades

  • Configura una app de Spring Boot Kotlin.
  • Compila una imagen de Docker optimizada.
  • 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

Configuración del entorno de autoaprendizaje

  1. Accede a Cloud Console y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de 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.

  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud.

Ejecutar este codelab debería costar solo unos pocos dólares, pero su costo podría aumentar 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 manera 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

  1. En la consola de Cloud, 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.

  1. 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, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].
  1. 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 spring-boot-starter-web a tus dependencias en pom.xml de la app de plantilla.

  1. Cambia al directorio de la app de plantilla.
$ cd kotlin-jib-cloud-run
  1. Compila y ejecuta la app con Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. Una vez que se inicie, la app comenzará a escuchar en el puerto 8080. Haz clic en Vista previa en la Web en la barra de herramientas de Cloud Shell y selecciona Vista previa en el puerto 8080 para acceder a la app.

  1. Deberías recibir una respuesta 404 porque la app aún no hace nada útil. Detén la app con Control+C.
  1. 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!"
  }
}
  1. Vuelve a compilar y ejecutar la app.
$ ./mvnw spring-boot:run
  1. Vuelve a verificar la app con la vista previa web . Esta vez, deberías ver el mensaje “Kotlin app on Cloud Run, containerized by Jib!”. Detén la app con Control+C.

Con Jib, puedes organizar tu app en contenedores de forma optimizada sin Docker y publicarla en cualquier registro de contenedores.

  1. Antes de continuar, debes activar la API de Container Registry. Solo es necesario hacer esto una vez por proyecto para que la API sea accesible.
$ gcloud services enable containerregistry.googleapis.com
  1. 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

Finalmente, verás el siguiente mensaje que indica que la app se organizó en contenedores y se envió a tu Container Registry.

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

Si ves un error, verifica si $GOOGLE_CLOUD_PROJECT está configurado correctamente en el ID de tu proyecto de Google Cloud (PROJECT_ID).

  1. Antes de continuar, verifica si la imagen se publicó correctamente. Regresa a la consola de Cloud, haz clic en Menú de navegación y selecciona Container Registry.

Verás que tu imagen se publicó correctamente.

Cloud Run lleva la tecnología sin servidores a los contenedores, ya que ajusta automáticamente la escala de tus contenedores sin estado.

  1. Vuelve a hacer clic en Menú de navegación y selecciona Cloud Run.

Si es la primera vez que accedes a Cloud Run, verás el siguiente diálogo para la configuración única. Haz clic en Comenzar a usar Cloud Run si aparece.

  1. En la página de Cloud Run, haz clic en Crear servicio.

  1. En la siguiente pantalla, haz clic en Seleccionar en Fuente. La fuente es la imagen que deseas ejecutar en Cloud Run.

  1. En el diálogo, se mostrará la imagen que compilaste anteriormente. Selecciona la imagen y haz clic en Continuar.

  1. Estás a solo un par de clics de implementar la app. En Deployment platform, elige Cloud Run (fully managed) para que el servicio se administre por completo en Google Cloud. Elige una región adecuada para tu ubicación, selecciona Permitir invocaciones no autenticadas y haz clic en Crear. Eso es todo.

Cuando la imagen esté completamente implementada, la página de Cloud Run mostrará una URL para acceder a la app. ¡Échale un vistazo!

Al final, verás el mensaje que esperas de la app.

Kotlin app on Cloud Run, containerized by Jib!

Eso es todo. En el futuro, si necesitas implementar versiones nuevas de la app, puedes hacer clic en Implementar nueva revisión en la página.

  1. 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.

  1. Del mismo modo, ve a la página de Container Registry y borra la imagen.

¡Felicitaciones! Alojaste correctamente tu app de Spring Boot Kotlin en un contenedor y la implementaste en Cloud Run.

Con Jib, compilaste una imagen de contenedor optimizada sin instalar Docker ni escribir un Dockerfile, y la publicaste en Container Registry. Jib optimiza la construcción de imágenes, por lo que cualquier persona sin conocimientos profundos de Docker puede crear contenedores de apps de Java de forma rápida y eficiente. Luego, con unos pocos clics, implementaste la app en Cloud Run para que comenzara a publicarse en poco tiempo.

Más información