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 .