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 .