Перейти к основному содержимому

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

· 4 мин. чтения

1. Обзор

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

В рамках этого мы:

  • Настройка консоли Google Cloud Platform и SDK
  • Используйте Cloud SQL для создания экземпляра MySQL
  • Настройте приложение для Spring Cloud GCP
  • Разверните приложение в App Engine и протестируйте его.

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

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

Давайте создадим проект на GCP с помощью консоли GCP :

gcloud init

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

gcloud config set project foreach-spring-boot-bootstrap

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

gcloud components install app-engine-java
gcloud app create

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

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

gcloud sql tiers list

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

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

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

# create instance
gcloud sql instances create \
foreach-spring-boot-bootstrap-db \
--tier=db-f1-micro \
--region=europe-west2
# create database
gcloud sql databases create \
foreach_bootstrap_db \
--instance=foreach-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>
</dependencies>

Затем мы добавляем плагин 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=foreach-spring-boot-bootstrap

Мы будем использовать профиль Spring с именем gcp для этого развертывания, и нам нужно будет настроить подключение к базе данных. Поэтому мы создаем src/main/resources/application-gcp.properties :

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

5. Развертывание

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

  • стандартная среда предоставляет Jetty и JDK8, а гибкая среда предоставляет только 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://foreach-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 с помощью Cloud SQL
  • Настроил Spring Cloud GCP для использования MySQL
  • Развернул наше настроенное приложение Spring Boot и
  • Протестировано и масштабировано приложение

Мы всегда можем обратиться к обширной документации Google App Engine для получения дополнительной информации.

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