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

1. Avant de commencer

Faciles à créer et à gérer, les applications App Engine s'adaptent facilement à l'évolution 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 : elle est prête à être utilisée.

Les applications App Engine évoluent automatiquement en fonction du trafic entrant. L'équilibrage de charge, les microservices, l'autorisation, les bases de données SQL et NoSQL, la mise en cache de la 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 dans le comportement de leur application. Chaque environnement présente ses avantages. Pour en savoir plus, consultez la page Choisir un environnement App Engine.

Vous allez apprendre à déployer une application Spring Boot dans l'environnement standard App Engine. L'environnement standard effectue un scaling à la baisse jusqu'à zéro instance lorsque personne ne l'utilise et effectue un scaling automatique à la hausse.

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

  • 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 vous explique de quoi il s'agit. Si un écran intermédiaire 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 dans Google Cloud, ce qui améliore considérablement les performances du réseau et l'authentification. Une grande partie, voire la totalité, de votre travail dans cet atelier de programmation peut être effectué dans un navigateur.

Une fois connecté à Cloud Shell, vous êtes authentifié et le projet est défini sur 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 nouvelle 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 le fichier Maven pom.xml

Il existe deux façons de déployer une application de serveur Java : à l'aide du plug-in Maven App Engine ou Gradle App Engine, ou en déployant le répertoire de package war. Vous utiliserez 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 le contenu suivant:

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. Ajouter une manette

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 centrale 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. Déployez ensuite 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 exécutant 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 à créer votre première application Web App Engine.

En savoir plus