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

Google fournit un outil de création d'images puissant 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 propose également des solutions sans serveur pour les conteneurs avec Cloud Run, une plate-forme de calcul gérée qui fait évoluer automatiquement vos conteneurs sans état. Dans cet atelier de programmation, vous verrez à 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 en toute simplicité.

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

Prerequisites

  • Bonne connaissance des outils et du langage de programmation Java
  • Une bonne 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 en conteneur sur Cloud Run.

Ce dont vous avez besoin

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

Configuration de l'environnement au rythme de chacun

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

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 afin d'utiliser les ressources Google Cloud.

Le coût de cet atelier de programmation ne devrait pas vous coûter plus que quelques dollars, mais il pourrait être plus élevé si vous décidez d'utiliser davantage de ressources ou de les laisser s'exécuter.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai offert de 300$.

Cloud Shell

Vous pouvez utiliser Google Cloud à distance depuis votre ordinateur portable. Dans cet atelier de programmation, vous allez utiliser Cloud Shell, un environnement de ligne de commande fonctionnant dans Google Cloud.

Activer Cloud Shell

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell .

Si vous n'avez encore jamais démarré Cloud Shell, un écran intermédiaire s'affiche en dessous de la ligne de séparation pour décrire 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 :

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

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle intègre un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances 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`
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].
  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 que l'initialiseur ajoutera automatiquement la spring-boot-starter-web à vos dépendances dans la pom.xml de l'application de modèle.

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

  1. Vous devriez obtenir une réponse 404, car l'application n'a rien d'important pour l'instant. Arrêtez l'application avec Control+C.
  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. Compilez à nouveau l'application et exécutez-la.
$ ./mvnw spring-boot:run
  1. Vérifiez de nouveau l'application avec l'aperçu sur le Web. Cette fois, vous devriez voir le message "Kotlin app on Cloud Run, containerized by Jib!". Arrêtez l'application avec Control+C.

Avec Jib, vous pouvez conteneuriser votre application de façon 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 n'est nécessaire 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:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

Le message suivant s'affiche, indiquant que l'application est conteneurisée et transférée vers votre registre de conteneurs.

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

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

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

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

Cloud Run apporte les conteneurs sans serveur aux scalings de vos conteneurs sans état,

  1. Cliquez de nouveau sur le menu de navigation , puis sélectionnez Cloud Run.

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 Commencer à utiliser Cloud Run si le message s'affiche.

  1. Sur la page Cloud Run, cliquez sur Create Service (Créer un service).

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

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

  1. Plus que quelques clics avant de déployer l'application. Sous Deployment platform (Plate-forme de déploiement), choisissez 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 Allow unauthenticated invocations (Autoriser les appels non authentifiés), puis cliquez sur Create (Créer). Et voilà !

Une fois l'image entièrement déployée, la page Cloud Run affiche une URL permettant d'accéder à l'application. Découvrez-la !

À la fin de la procédure, le message attendu de l'application s'affiche.

Kotlin app on Cloud Run, containerized by Jib!

Et voilà ! À l'avenir, si vous avez besoin de déployer de nouvelles versions d'application, vous pouvez le faire en cliquant sur Déployer une nouvelle révision sur la page.

  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 souhaitée, puis cliquez sur Supprimer.

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

Félicitations ! Vous avez conteneurisé votre application Spring Boot Kotlin et la déployer sur Cloud Run.

À l'aide de Jib, vous avez créé une image de conteneur optimisé sans Docker installé ni écrit de Dockerfile et l'avez publiée dans Container Registry. Jib optimise la création d'images de sorte que toute personne ne connaissant pas le langage Docker peut conteneuriser les applications Java rapidement et efficacement. Ensuite, en quelques clics, vous avez déployé l'application sur Cloud Run pour commencer à diffuser des annonces en un rien de temps.

Learn more