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

1. Avant de commencer

Google fournit un outil puissant de création d'images avec lequel vous pouvez facilement créer et publier une image de conteneur Docker optimisée pour les applications Java en un rien de temps sans Docker ni Dockerfile. Google Cloud apporte également des solutions sans serveur aux 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 verrez à quel point il est facile de conteneuriser votre application Kotlin Spring Boot, de la publier dans Container Registry et d'exécuter l'image sur Google Cloud en toute simplicité.

Cet atelier de programmation vous explique comment configurer une application simple en Kotlin, ce qui illustre l'utilisation des services et outils Google Cloud, y compris Jib, Container Registry et Cloud Run.

Prérequis

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

Objectifs de l'atelier

  • Configurez une application Kotlin Spring Boot.
  • Créer une image Docker optimisée
  • Publiez l'image dans Container Registry.
  • Exécuter 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 gratuite. 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, vous allez utiliser Cloud Shell dans 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 (en dessous de la ligne de flottaison) vous explique de quoi il s'agit. Dans ce cas, cliquez sur Continuer (elle ne s'affichera plus). 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érer une nouvelle 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 qu'Initializr ajoute automatiquement spring-boot-starter-web à vos dépendances dans le pom.xml du modèle d'application.

  1. Accédez au répertoire du modèle d'application.
$ 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 lancée, l'application commencera à é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 recevoir une réponse 404, car l'application n'a 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!" doit 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

Le message suivant s'affiche ensuite, indiquant que l'application est conteneurisée et transférée vers 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 si 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 intègre des solutions 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 une configuration unique. Cliquez sur Start Using Cloud Run (Commencer à utiliser Cloud Run) si le service s'affiche.

1b2bf05712f6150a.png

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

c0b4b980662f7807.png

  1. Sur l'écran suivant, cliquez sur Select (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 que quelques clics à déployer l'application. Sous Plate-forme de déploiement, sélectionnez 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. En savoir plus

8bf800dd6e2f44f2.png

À la fin, le message que vous attendez de l'application s'affiche.

Kotlin app on Cloud Run, containerized by Jib!

Et voilà ! À l'avenir, si vous devez déployer de nouvelles versions de votre 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 dans Container Registry. Accédez à Cloud Run, sélectionnez l'application, puis cliquez sur Delete (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 conteneurisé votre application Kotlin Spring Boot et l'avez déployée dans Cloud Run.

À l'aide de Jib, vous avez créé une image de conteneur optimisée sans avoir installé Docker ou écrit un Dockerfile, puis vous l'avez publié dans Container Registry. Jib optimise la construction d'images afin que toute personne ne disposant pas de connaissances approfondies sur Docker puisse conteneuriser 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