Conteneuriser une application Kotlin Spring Boot et la déployer sur Cloud Run

1. Avant de commencer

Google fournit un outil de compilation d'images puissant qui vous permet de compiler et de publier facilement une image de conteneur Docker optimisée pour les applications Java en un rien de temps, sans Docker ni Dockerfile. Google Cloud propose également une solution sans serveur pour les conteneurs avec Cloud Run, une plate-forme de calcul gérée qui effectue un scaling automatique de vos conteneurs sans état. Dans cet atelier de programmation, vous allez découvrir à quel point il est facile de conteneuriser votre application Spring Boot Kotlin, de la publier dans Container Registry et d'exécuter l'image sur Google Cloud de manière fluide.

Cet atelier de programmation vous guide dans la configuration d'une application simple en Kotlin, qui montre comment utiliser les services et outils Google Cloud, y compris Jib, Container Registry et Cloud Run.

Prérequis

  • Connaissances du langage et des outils de programmation Java
  • Connaissance des éditeurs de texte Linux standards tels que Vim, Emacs et nano

Objectifs de l'atelier

  • Configurez une application Spring Boot Kotlin.
  • Créez une image Docker optimisée.
  • Publiez l'image dans Container Registry.
  • Exécutez l'application conteneurisée sur Cloud Run.

Prérequis

  • Un projet Google Cloud
  • Un navigateur, tel que Google Chrome

2. Configuration

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.

  1. Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.

L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans Google Cloud.

Activer Cloud Shell

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Si vous n'avez jamais démarré Cloud Shell auparavant, un écran intermédiaire s'affiche en dessous de la ligne de flottaison, décrivant de quoi il s'agit. Si tel est le cas, cliquez sur Continuer. Cet écran ne s'affiche qu'une seule fois. Voici à quoi il ressemble :

70f315d7b402b476.png

Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.

fbe3a0674c982259.png

Cette machine virtuelle contient tous les outils de développement dont vous avez besoin. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier dans un simple navigateur ou sur votre Chromebook.

Une fois connecté à Cloud Shell, vous êtes en principe authentifié et le projet est défini avec votre ID de projet.

  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list

Résultat de la commande

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet :
gcloud config list project

Résultat de la commande

[core]
project = <PROJECT_ID>

Si vous obtenez un résultat différent, exécutez cette commande :

gcloud config set project <PROJECT_ID>

Résultat de la commande

Updated property [core/project].

3. Initialiser une application Spring Boot

  1. Générez une application Spring Boot avec Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

Notez que Initializr ajoutera automatiquement spring-boot-starter-web à vos dépendances dans le pom.xml de l'application modèle.

  1. Accédez au répertoire de l'application de modèle.
$ cd kotlin-jib-cloud-run
  1. Créez et exécutez l'application à l'aide de Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. Une fois démarrée, l'application commence à écouter sur le port 8080. Cliquez sur Aperçu sur le Web396bfd51f55afb5d.png dans la barre d'outils Cloud Shell, puis sélectionnez Prévisualiser sur le port 8080 pour accéder à l'application.

4172e1e141daf0c1.png

  1. Vous devriez obtenir une réponse 404, car l'application ne fait encore rien d'utile. Arrêtez l'application avec Control+C.

4. Ajouter un contrôleur Web

  1. Créez la classe Controller suivante dans le package de démonstration :
$ 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. Recompilez et exécutez l'application.
$ ./mvnw spring-boot:run
  1. Vérifiez à nouveau l'application à l'aide de l'aperçu sur le Web a6cfcaa1d2119c52.png. Cette fois, le message "Kotlin app on Cloud Run, containerized by Jib!" devrait s'afficher. Arrêtez l'application avec Control+C.

5. Conteneuriser votre application et la publier dans Container Registry

Avec Jib, vous pouvez conteneuriser votre application de manière optimisée sans Docker et la publier dans n'importe quel registre de conteneurs.

  1. Avant de continuer, vous devez activer l'API Container Registry. Cette opération ne doit être effectuée qu'une seule fois par projet pour rendre l'API accessible.
$ gcloud services enable containerregistry.googleapis.com
  1. Exécutez Jib pour créer une image Docker et la publier dans Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

Vous finirez par voir le message suivant indiquant que l'application est conteneurisée et envoyée vers votre Container Registry.

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

Si une erreur s'affiche, vérifiez que $GOOGLE_CLOUD_PROJECT est correctement défini sur l'ID de votre projet Google Cloud (PROJECT_ID).

  1. Avant de continuer, vérifiez que l'image a bien été publiée. Revenez à la console Cloud, cliquez sur le menu de navigationc8b4ea3c68f4c1e3.png, puis sélectionnez Container Registry.

6421550ba806beab.png

38ae0ca573c3dcd.png

Vous verrez que votre image a bien été publiée.

c9086605411691c3.png

6. Exécuter l'application conteneurisée sur Cloud Run

Cloud Run applique le sans serveur aux conteneurs, en effectuant un scaling automatique de vos conteneurs sans état.

  1. Cliquez à nouveau sur le menu de navigationc8b4ea3c68f4c1e3.png, puis sélectionnez Cloud Run.

812c7c87527ebe4a.png

Si vous accédez à Cloud Run pour la première fois, la boîte de dialogue suivante s'affiche pour la configuration unique. Si l'option Commencer à utiliser Cloud Run s'affiche, cliquez dessus.

1b2bf05712f6150a.png

  1. Sur la page Cloud Run, cliquez sur Créer un service.

c0b4b980662f7807.png

  1. Sur l'écran suivant, cliquez sur Sélectionner sous Source. La source est l'image que vous souhaitez exécuter sur Cloud Run.

2049621ae97d62ee.png

  1. La boîte de dialogue affiche l'image que vous avez créée précédemment. Sélectionnez l'image, puis cliquez sur Continuer.

564367bc65caefbf.png

  1. Il ne vous reste plus qu'à déployer l'application en quelques clics. Sous Deployment platform (Plate-forme de déploiement), choisissez Cloud Run (fully managed) (Cloud Run (entièrement géré)) pour que le service soit entièrement géré sur Google Cloud. Choisissez une région adaptée à votre emplacement, sélectionnez Autoriser les appels non authentifiés, puis cliquez sur Créer. Et voilà !

3eb0f51d15326cac.png

Une fois l'image entièrement déployée, la page Cloud Run affiche une URL permettant d'accéder à l'application. N'hésitez pas à la consulter.

8bf800dd6e2f44f2.png

À la fin, le message attendu de l'application s'affichera.

Kotlin app on Cloud Run, containerized by Jib!

Et voilà ! Si vous devez déployer de nouvelles versions de l'application, vous pourrez le faire en cliquant sur Déployer la nouvelle révision sur la page.

7. Effectuer un nettoyage

  1. Pour nettoyer votre environnement, vous devez supprimer l'application déployée sur Cloud Run et l'image publiée sur Container Registry. Accédez à Cloud Run, sélectionnez l'application, puis cliquez sur Supprimer.

1dfc2f51c1b5f6e.png

  1. De même, accédez à la page Container Registry et supprimez l'image.

1b724136c1655935.png

8. Félicitations

Félicitations ! Vous avez réussi à conteneuriser votre application Spring Boot Kotlin et à la déployer sur Cloud Run.

À l'aide de Jib, vous avez créé une image de conteneur optimisée sans installer Docker ni écrire de fichier Dockerfile, puis vous l'avez publiée dans Container Registry. Jib optimise la création d'images, ce qui permet à toute personne ne possédant pas de connaissances approfondies sur Docker de mettre en conteneur des applications Java rapidement et efficacement. Ensuite, en quelques clics, vous avez déployé l'application sur Cloud Run pour commencer à la diffuser en un rien de temps.

En savoir plus