Containerizza un'app Kotlin di Spring Boot ed eseguine il deployment in Cloud Run

Google fornisce un potente strumento di creazione di immagini con cui puoi creare e pubblicare facilmente un'immagine di container Docker ottimizzata per le app Java in un attimo senza Docker o Dockerfile. Google Cloud porta anche il serverless ai container con Cloud Run, una piattaforma di calcolo gestita che scala automaticamente i tuoi container stateless. In questo codelab vedrai quanto è facile inserire in un container la tua app Spring Boot Kotlin, pubblicarla in Container Registry ed eseguire l'immagine su Google Cloud in modo semplice.

Questo codelab ti guida nella configurazione di una semplice app in Kotlin, che mostra l'utilizzo di servizi e strumenti Google Cloud, tra cui Jib, Container Registry e Cloud Run.

Prerequisiti

  • Familiarità con il linguaggio di programmazione Java e gli strumenti
  • Conoscenza degli editor di testo standard di Linux, ad esempio Vim, Emacs e nano

In questo lab proverai a:

  • Configura un'app Spring Boot Kotlin.
  • Crea un'immagine Docker ottimizzata.
  • Pubblica l'immagine in Container Registry.
  • Esegui l'app containerizzata su Cloud Run.

Che cosa ti serve

  • Un progetto Google Cloud
  • Un browser, ad esempio Google Chrome

Configurazione dell'ambiente autonoma

  1. Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai già un account Gmail o G Suite, devi crearne uno.

Ricorda l'ID progetto, un nome univoco per tutti i progetti Google Cloud (il nome riportato sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID.

  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.

L'esecuzione di questo codelab non dovrebbe costarti più di qualche dollaro, ma potrebbe essere più cara se decidi di utilizzare più risorse o se le lasci in esecuzione.

I nuovi utenti di Google Cloud possono beneficiare di una prova senza costi di 300$.

Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.

Attiva Cloud Shell

  1. Nella console Google Cloud, fai clic su Attiva Cloud Shell .

Se non hai mai avviato Cloud Shell, vedrai una schermata intermedia (sotto la piega) che ne descrive le funzionalità. In questo caso, fai clic su Continua (e non la vedrai mai più). Ecco come si presenta la schermata una tantum:

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, il lavoro in questo codelab può essere svolto semplicemente con un browser o con Chromebook.

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.

  1. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list

Output 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

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].
  1. Genera una nuova app 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 -

Tieni presente che Initializr aggiungerà automaticamente spring-boot-starter-web alle dipendenze in pom.xml dell'app modello.

  1. Passa alla directory dell'app modello.
$ cd kotlin-jib-cloud-run
  1. Crea ed esegui l'app utilizzando Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. Una volta avviata, l'app inizierà ad ascoltare sulla porta 8080. Fai clic su Anteprima web nella barra degli strumenti di Cloud Shell e seleziona Anteprima sulla porta 8080 per accedere all'app.

  1. Dovresti ricevere una risposta 404 perché l'app non fa ancora nulla di utile. Interrompi l'app con Control+C.
  1. Crea la seguente classe Controller nel pacchetto demo:
$ 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. Ricrea ed esegui l'app.
$ ./mvnw spring-boot:run
  1. Controlla di nuovo l'app utilizzando Anteprima web . Questa volta dovresti vedere il messaggio "Kotlin app on Cloud Run, containerized by Jib!". Interrompi l'app con Control+C.

Con Jib, puoi containerizzare la tua app in modo ottimizzato senza Docker e pubblicarla in qualsiasi registro dei container.

  1. Prima di procedere, devi attivare l'API Container Registry. Questa operazione deve essere eseguita una sola volta per progetto per rendere accessibile l'API.
$ gcloud services enable containerregistry.googleapis.com
  1. Esegui Jib per creare un'immagine Docker e pubblicarla in Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

Alla fine, vedrai il seguente messaggio che indica che l'app è containerizzata e inviata a Container Registry.

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

Se visualizzi un errore, controlla che $GOOGLE_CLOUD_PROJECT sia impostato correttamente sull'ID progetto Google Cloud (PROJECT_ID).

  1. Prima di procedere, verifica che l'immagine sia stata pubblicata correttamente. Torna alla console Cloud, fai clic su menu di navigazione e seleziona Container Registry.

Vedrai che l'immagine è stata pubblicata.

Cloud Run porta il serverless nei container, scalando automaticamente i tuoi container stateless.

  1. Fai di nuovo clic su Menu di navigazione e seleziona Cloud Run.

Se è la prima volta che accedi a Cloud Run, visualizzerai la seguente finestra di dialogo per la configurazione una tantum. Se viene visualizzato, fai clic su Inizia a utilizzare Cloud Run.

  1. Nella pagina Cloud Run, fai clic su Crea servizio.

  1. Nella schermata successiva, fai clic su Seleziona in Origine. L'origine è l'immagine che vuoi eseguire su Cloud Run.

  1. Nella finestra di dialogo verrà visualizzata l'immagine creata in precedenza. Seleziona l'immagine e fai clic su Continua.

  1. Bastano pochi clic per eseguire il deployment dell'app. In Piattaforma di deployment, scegli Cloud Run (completamente gestito) per avere il servizio completamente gestito su Google Cloud. Scegli una regione adatta alla tua posizione, seleziona Consenti chiamate non autenticate e fai clic su Crea. È tutto.

Quando l'immagine è completamente sottoposta a deployment, la pagina Cloud Run visualizza un URL per accedere all'app. Dai un'occhiata.

Alla fine, vedrai il messaggio che ti aspetti dall'app.

Kotlin app on Cloud Run, containerized by Jib!

È tutto. In futuro, se devi eseguire il deployment di nuove versioni dell'app, puoi farlo facendo clic su Esegui il deployment di una nuova revisione nella pagina.

  1. Per pulire l'ambiente, devi eliminare l'app di cui è stato eseguito il deployment su Cloud Run e l'immagine pubblicata su Container Registry. Vai a Cloud Run, seleziona l'app e fai clic su Elimina.

  1. Allo stesso modo, vai alla pagina Container Registry ed elimina l'immagine.

Complimenti! Hai containerizzato correttamente la tua app Spring Boot Kotlin e ne hai eseguito il deployment su Cloud Run.

Utilizzando Jib, hai creato un'immagine container ottimizzata senza installare Docker o scrivere un Dockerfile e l'hai pubblicata in Container Registry. Jib ottimizza la creazione delle immagini, in modo che chiunque, anche senza una conoscenza approfondita di Docker, possa containerizzare le app Java in modo rapido ed efficiente. Poi, con pochi clic, hai eseguito il deployment dell'app in Cloud Run per iniziare a pubblicarla in pochissimo tempo.

Scopri di più