Развернуть приложение Spring Boot в Google App Engine

1. Обзор

В этом руководстве мы покажем, как развернуть приложение из нашего учебника Bootstrap Простое приложение с использованием Spring Boot на App Engine в облачной платформе Google.

В рамках этого мы будем:

  • Настройка консоли Google Cloud Platform и SDK

  • Используйте Cloud SQL для создания экземпляра MySQL

  • Настройка приложения для Spring Cloud GCP

  • Разверните приложение в App Engine и протестируйте его

2. Конфигурация облачной платформы Google

Мы можем использовать консоль GCP, чтобы подготовить нашу локальную среду к GCP.

Мы можем найти installation на официальном сайте.

Давайте создадим проект на GCP, используя GCP Console :

gcloud init

Далее давайте настроим имя проекта:

gcloud config set project baeldung-spring-boot-bootstrap

Затем мы установим поддержку App Engine и создадим экземпляр App Engine:

gcloud components install app-engine-java
gcloud app create

Наше приложение должно будет подключиться к базе данных MySQL в среде Cloud SQL. Поскольку облачный SQL не предоставляет бесплатный уровень, нам нужно включить billing в учетной записи GCP.

Мы можем легко проверить доступные уровни:

gcloud sql tiers list

Прежде чем продолжить, мы должны использовать веб-сайт GCP, чтобы включить Cloud SQL Admin API .

Теперь мы можем создать экземпляр MySQL и базу данных в Cloud SQL , используя Cloud Console или SDK CLI. В ходе этого процесса мы выберем регион и предоставим имя экземпляра и имя базы данных. Важно, чтобы приложение и экземпляр базы данных находились в одном регионе.

Поскольку мы собираемся развернуть приложение на europe-west2 , давайте сделаем то же самое для экземпляра:

# 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

Наше приложение будет нуждаться в зависимостях от проекта Spring Cloud GCP для облачных API-интерфейсов. Для этого давайте использовать профиль Maven с именем 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>

Затем мы добавляем плагин App Engine Maven:

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

4. Конфигурация приложения

Теперь давайте определим конфигурацию, которая позволяет приложению использовать облачные ресурсы, такие как база данных.

Spring Cloud GCP использует spring-cloud-bootstrap.properties для определения имени приложения:

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

Для этого развертывания мы будем использовать Spring Profile с именем gcp , и нам нужно будет настроить соединение с базой данных. Поэтому мы создаем 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. Развертывание

Google App Engine предоставляет две среды Java:

  • Standard среда предоставляет Jetty и JDK8 и F flex

среда обеспечивает только JDK8 и ** Гибкая среда - лучший вариант для Spring Boot

Приложения.

Мы требуем, чтобы профили gcp и mysql Spring были активными, поэтому мы предоставляем переменную среды SPRING PROFILES ACTIVE приложению, добавляя ее в конфигурацию развертывания в src/main/appengine/app.yaml :

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

Теперь давайте создадим и развернем приложение с помощью плагина appengine maven ** :

mvn clean package appengine:deploy -P cloud-gcp

После развертывания мы можем просмотреть или добавить файлы журнала:

# view
gcloud app logs read

# tail
gcloud app logs tail

Теперь давайте проверим, что наше приложение работает, добавив книгу :

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

Ожидается следующий вывод:

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

6. Масштабирование приложения

  • Масштабирование по умолчанию в App Engine - автоматическое. **

Возможно, лучше начать с ручного масштабирования, пока мы не поймем поведение среды выполнения, а также связанные с этим бюджеты и связанные с этим расходы. Мы можем назначить ресурсы приложению и настроить автоматическое масштабирование в app.yaml :

# 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. Заключение

В этом уроке мы:

  • Настроил Google Cloud Platform и App Engine

  • Создан экземпляр MySQL с облачным SQL

  • Настроен Spring Cloud GCP для использования MySQL

  • Развернули наше настроенное приложение Spring Boot и

  • Протестировано и масштабировано приложение

Мы всегда можем обратиться к обширной https://cloud.google.com/appengine/docs/f Flexible/java/[App Engine документации], чтобы узнать подробности

Полный исходный код наших примеров здесь, как всегда, over на GitHub .