Stellen Sie eine Spring Boot-Anwendung für Google App Engine bereit

1. Überblick

In diesem Lernprogramm zeigen wir Ihnen, wie Sie eine Anwendung aus unserem Bootstrap einer einfachen Anwendung mit Spring Boot -Tutorial unter https://cloud.google.com bereitstellen/appengine/[App Engine]in der Google Cloud-Plattform.

Als Teil davon werden wir:

  • Konfigurieren Sie die Google Cloud Platform Console und das SDK

  • Verwenden Sie Cloud SQL, um eine MySQL-Instanz zu erstellen

  • Konfigurieren Sie die Anwendung für Spring Cloud GCP

  • Stellen Sie die Anwendung auf App Engine bereit und testen Sie sie

2. Konfiguration der Google Cloud-Plattform

Wir können die GCP-Konsole verwenden, um unsere lokale Umgebung für GCP vorzubereiten.

Den Installationsprozess finden Sie auf der offiziellen Website.

Lassen Sie uns ein Projekt auf GCP mit der GCP Console erstellen :

gcloud init

Als Nächstes konfigurieren wir den Projektnamen:

gcloud config set project baeldung-spring-boot-bootstrap

Dann installieren wir die App Engine-Unterstützung und erstellen eine App Engine-Instanz:

gcloud components install app-engine-java
gcloud app create

Unsere Anwendung muss eine Verbindung zu einer MySQL-Datenbank in der Cloud SQL-Umgebung herstellen. Da Cloud SQL keine kostenlose Stufe bietet, müssen Sie billing im GCP-Konto aktivieren.

Wir können die verfügbaren Stufen leicht überprüfen:

gcloud sql tiers list

Bevor Sie fortfahren, sollten Sie die GCP-Website verwenden, um die https://console.cloud.google.com/flows/enableapi?apiid=sqladmin [Cloud SQL Admin API zu aktivieren.

Jetzt können wir eine MySQL-Instanz und -Datenbank in Cloud SQL mithilfe der Cloud Console oder der SDK-CLI erstellen. Während dieses Vorgangs wählen wir die Region aus und geben einen Instanznamen und einen Datenbanknamen an. Es ist wichtig, dass sich die App und die Datenbankinstanz in derselben Region befinden.

Da wir die App für europe-west2 bereitstellen, machen wir dasselbe für die Instanz:

# create instance
gcloud sql instances create \
  baeldung-spring-boot-bootstrap-db \
    --tier=db-f1-micro \
    --region=europe-west2
# create database
gcloud sql databases create \
  baeldung__bootstrap__db \
    --instance=baeldung-spring-boot-bootstrap-db

3. Spring Cloud GCP-Abhängigkeiten

Unsere Anwendung benötigt Abhängigkeiten vom Spring Cloud GCP -Projekt für die Cloud-native APIs. Verwenden wir dazu ein Maven-Profil mit dem Namen cloud-gcp :

<profile>
  <id>cloud-gcp</id>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-gcp-starter</artifactId>
      <version>1.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      <version>1.0.0.RELEASE</version>
    </dependency>

Dann fügen wir das App Engine Maven Plugin hinzu:

    <build>
      <plugins>
        <plugin>
          <groupId>com.google.cloud.tools</groupId>
          <artifactId>appengine-maven-plugin</artifactId>
          <version>1.3.2</version>
        </plugin>
      </plugins>
    </build>
</profile>

4. Anwendungskonfiguration

Definieren Sie nun die Konfiguration, mit der die Anwendung die Cloud-Ressourcen wie die Datenbank verwenden kann.

Spring Cloud GCP verwendet spring-cloud-bootstrap.properties , um den Namen der Anwendung zu ermitteln:

spring.cloud.appId=baeldung-spring-boot-bootstrap

Wir verwenden für diese Bereitstellung ein Spring-Profil namens gcp und müssen die Datenbankverbindung konfigurieren. Deshalb erstellen wir src/main/resources/application-gcp.properties :

spring.cloud.gcp.sql.instance-connection-name=\
    baeldung-spring-boot-bootstrap:europe-west2:baeldung-spring-boot-bootstrap-db
spring.cloud.gcp.sql.database-name=baeldung__bootstrap__db

5. Einsatz

Google App Engine bietet zwei Java-Umgebungen:

  • die Standard -Umgebung enthält Jetty und JDK8 und die Flexible

Umgebung bietet nur JDK8 und ** Die flexible Umgebung ist die beste Option für Spring Boot

Anwendungen.

Wir benötigen die Spring-Profile gcp und mysql , um aktiv zu sein. Daher stellen wir der Anwendung die Umgebungsvariable SPRING PROFILES ACTIVE zur Verfügung, indem wir sie der Implementierungskonfiguration in src/main/appengine/app.yaml hinzufügen:

runtime: java
env: flex
runtime__config:
  jdk: openjdk8
env__variables:
  SPRING__PROFILES__ACTIVE: "gcp,mysql"
handlers:
- url:/.**
  script: this field is required, but ignored
manual__scaling:
  instances: 1

Lassen Sie uns jetzt die Anwendung mit dem appengine maven-Plugin ** erstellen und implementieren:

mvn clean package appengine:deploy -P cloud-gcp

Nach der Bereitstellung können wir Protokolldateien anzeigen oder abschließen:

# view
gcloud app logs read

# tail
gcloud app logs tail

Nun , überprüfen wir, ob unsere Anwendung funktioniert, indem Sie ein Buch hinzufügen :

http POST https://baeldung-spring-boot-bootstrap.appspot.com/api/books \
        title="The Player of Games" author="Iain M. Banks"

Erwartet die folgende Ausgabe:

HTTP/1.1 201
{
    "author": "Iain M. Banks",
    "id": 1,
    "title": "The Player of Games"
}

6. Anwendung skalieren

  • Die Standardskalierung in App Engine ist automatisch. **

Es ist möglicherweise besser, mit der manuellen Skalierung zu beginnen, bis wir das Laufzeitverhalten und die damit verbundenen Budgets und Kosten verstanden haben. Wir können der Anwendung Ressourcen zuweisen und die automatische Skalierung in app.yaml konfigurieren:

# Application Resources
resources:
  cpu: 2
  memory__gb: 2
  disk__size__gb: 10
  volumes:
  - name: ramdisk1
    volume__type: tmpfs
    size__gb: 0.5
# Automatic Scaling
automatic__scaling:
  min__num__instances: 1
  max__num__instances: 4
  cool__down__period__sec: 180
  cpu__utilization:
    target__utilization: 0.6

7. Fazit

In diesem Tutorial werden wir:

  • Konfigurierte Google Cloud-Plattform und App Engine

  • Erstellt eine MySQL-Instanz mit Cloud SQL

  • Konfigurierte Spring Cloud GCP für die Verwendung von MySQL

  • Bereitstellung unserer konfigurierten Spring Boot-Anwendung und

  • Die Anwendung wurde getestet und skaliert

Weitere Informationen finden Sie in der umfangreichen Dokumentation von App Engine von Google.

Der vollständige Quellcode unserer Beispiele hier ist wie immer https://github.com/eugenp/tutorials/tree/master/spring-boot-bootstrap [über GitHub.