Déployer une application Spring Boot dans l'environnement standard App Engine

1. Avant de commencer

Les applications App Engine sont faciles à créer et à gérer. Grâce à leur caractère évolutif, elles s'adaptent en fonction de vos besoins en termes de trafic et de stockage des données. Avec App Engine, vous n'avez aucun serveur à gérer. Il vous suffit d'importer votre application : vous êtes alors prêt à démarrer.

Les applications App Engine s'adaptent automatiquement au trafic entrant. L'équilibrage de charge, les microservices, les autorisations, les bases de données SQL et NoSQL, la mise en cache en mémoire, la répartition du trafic, la journalisation, la recherche, la gestion des versions, les déploiements et les rollbacks, ainsi que les analyses de sécurité sont tous compatibles de manière native et hautement personnalisables.

L'environnement standard App Engine et l'environnement flexible App Engine sont compatibles avec de nombreux langages de programmation, dont Java, Python, PHP, NodeJS et Go. Ces deux environnements offrent aux développeurs une flexibilité maximale quant au comportement de leur application. Chaque environnement présente certains avantages. Pour en savoir plus, consultez Choisir un environnement App Engine.

Vous apprendrez à déployer une application Spring Boot dans l'environnement standard App Engine. L'environnement standard effectue un scaling à la baisse jusqu'à zéro instance quand vous ne vous en servez pas et un scaling à la hausse automatiquement.

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

  • Créer une application Java Spring Boot sur App Engine

Prérequis

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google 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.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. 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

Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud.

Activer Cloud Shell

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell 853e55310c205094.png.

55efc1aaa7a4d3ad.png

Si vous démarrez Cloud Shell pour la première fois, un écran intermédiaire s'affiche pour vous expliquer de quoi il s'agit. Si cet écran s'est affiché, cliquez sur Continuer.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

Cette machine virtuelle contient tous les outils de développement nécessaires. 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 de programmation dans un navigateur.

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. Créer une application Web Spring Boot

Après le lancement de Cloud Shell, vous pouvez utiliser la ligne de commande pour générer une application Spring Boot avec Spring Initializr.

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web \
  -d type=maven-project \
  -d baseDir=gae-standard-example | tar -xzvf -
$ cd gae-standard-example

4. Mettre à jour Maven pom.xml

Il existe deux façons de déployer une application serveur Java : en utilisant le plug-in Maven App Engine ou le plug-in Gradle App Engine, ou en déployant le répertoire de packages war. Vous allez utiliser le plug-in Maven App Engine pour déployer l'application.

Ajouter le plug-in Maven App Engine

Mettez à jour pom.xml pour inclure un plug-in Google Cloud qui simplifie le processus de déploiement. Vous pouvez utiliser Vim, nano ou Emacs pour modifier le fichier.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.4</version>
        <configuration>
          <version>1</version>
          <projectId>GCLOUD_CONFIG</projectId>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
</project>

5. Ajouter un descripteur App Engine

  1. Pour déployer l'application dans l'environnement standard App Engine, vous devez créer un fichier descripteur src/main/appengine/app.yaml.
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. Modifiez le fichier src/main/appengine/app.yaml et ajoutez-y le contenu suivant :

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. Ajouter un contrôleur

Ajoutez un contrôleur qui renvoie "hello world!" dans DemoApplication.java.

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

// Add imports
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

// Add the controller.
@RestController
class HelloWorldController {
  @GetMapping("/")
  public String hello() {
    return "hello world!";
  }
}

7. Exécuter l'application en local

  1. Assurez-vous que JAVA_HOME est défini sur la bonne version du JDK :
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. Vous pouvez démarrer l'application Spring Boot avec le plug-in Spring Boot :
$ ./mvnw -DskipTests spring-boot:run
  1. Une fois l'application démarrée, cliquez sur Aperçu sur le Web1a94d5bd10bfc072.png dans la barre d'outils Cloud Shell, puis sélectionnez Prévisualiser sur le port 8080.

3aca52f76c6c22a3.png

Un onglet s'ouvre dans votre navigateur et se connecte au serveur que vous avez démarré.

7b0d8494f647822a.png

8. Déployer l'application sur App Engine

  1. Commencez par initialiser le projet pour pouvoir exécuter des applications App Engine. Initialisez également le projet pour qu'il s'exécute dans la région du centre des États-Unis.
$ gcloud app create --region us-central
You are creating an app for project [...].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations
  1. Ensuite, déployez votre application dans l'environnement standard App Engine en exécutant mvn appengine:deploy.
$ ./mvnw -DskipTests package appengine:deploy
... first time deploy may take a couple of minutes
  1. Une fois l'application déployée, vous pouvez y accéder en ouvrant http://<project-id>.appspot.com dans votre navigateur Web ou en utilisant la commande suivante dans Cloud Shell :
$ gcloud app browse
... [It may print out the URL for your app]

9. Nettoyage

Vous ne pouvez pas supprimer une application App Engine, mais vous pouvez la désactiver.

Accédez à App Engine et Settings dans la console Google Cloud, puis sélectionnez Disable Application :

8052c1e4ad73d70e.png

Vous pouvez également supprimer l'intégralité du projet :

$ gcloud projects delete YOUR-PROJECT-ID

10. Félicitations

Vous avez appris à écrire votre première application Web App Engine.

En savoir plus