将Spring Boot应用程序部署到Google App Engine

2023/05/11

一、概述

在本教程中,我们将展示如何 使用 Spring Boot 教程将应用程序从Bootstrap a Simple Application部署到Google Cloud Platform 上的App Engine 。

作为其中的一部分,我们将:

  • 配置谷歌云平台控制台和 SDK
  • 使用 Cloud SQL 创建 MySQL 实例
  • 为 Spring Cloud GCP 配置应用程序
  • 将应用程序部署到 App Engine 并进行测试

2.谷歌云平台配置

我们可以使用 GCP 控制台让我们的本地环境为 GCP 做好准备。我们可以在官网找到安装过程

让我们使用GCP 控制台在 GCP 上创建一个项目:

gcloud init

接下来,让我们配置项目名称:

gcloud config set project baeldung-spring-boot-bootstrap

然后我们将安装 App Engine 支持并创建一个 App Engine 实例:

gcloud components install app-engine-java
gcloud app create

我们的应用程序需要连接到 Cloud SQL 环境中的 MySQL 数据库。由于 Cloud SQL 不提供免费套餐,我们必须 在 GCP 帐户上启用计费。

我们可以轻松检查可用层:

gcloud sql tiers list

在继续之前,我们应该使用 GCP 网站启用Cloud SQL Admin API

现在我们可以使用 Cloud Console 或 SDK CLI在Cloud SQL中创建 MySQL 实例和数据库。在此过程中,我们将选择区域并提供实例名称和数据库名称。应用程序和数据库实例位于同一区域很重要。

由于我们要将应用程序部署到 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。为此,让我们使用一个名为cloud-gcp的 Maven 配置文件:

<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=baeldung-spring-boot-bootstrap

我们将为此部署使用名为gcp的 Spring 配置文件 ,我们需要配置数据库连接。因此我们创建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,Flexible环境只提供 JDK8 和
  • Flexible 环境是 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

七、总结

在本教程中,我们:

  • 配置了 Google Cloud Platform 和 App Engine
  • 使用 Cloud SQL 创建了一个 MySQL 实例
  • 配置 Spring Cloud GCP 以使用 MySQL
  • 部署我们配置的 Spring Boot 应用程序,以及
  • 测试并扩展了应用程序

我们始终可以参考 Google 的大量App Engine 文档 以获取更多详细信息。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章