将 Spring Boot 应用部署到 App Engine 标准环境

1. 准备工作

App Engine 应用易于创建、易于维护,并可根据流量和数据存储需求的变化轻松扩缩。使用 App Engine 时,无需维护任何服务器。您只需上传应用,就可以使用了。

App Engine 应用会根据传入的流量自动扩缩。负载均衡、微服务、授权、SQL 和 NoSQL 数据库、内存缓存、流量分配、日志记录、搜索、版本控制、发布和回滚以及安全扫描都是原生支持的,并且高度可自定义。

App Engine 标准环境App Engine 柔性环境支持大量编程语言,包括 Java、Python、PHP、NodeJS 和 Go。这两种环境为开发者提供了最大的应用行为灵活性。每种环境都有一定的优势。如需了解详情,请参阅选择 App Engine 环境

您将学习如何将 Spring Boot 应用部署到 App Engine 标准环境。标准环境会在没有人使用它时纵向缩容到零个实例,并且会自动纵向扩容!

前提条件

  • 熟悉 Java 编程语言和工具
  • 了解标准的 Linux 文本编辑器,例如 Vim、Emacs 和 nano

您将执行的操作

  • 如何在 App Engine 上创建 Spring Boot Java 应用

所需条件

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

Cloud Shell

您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境。

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shell853e55310c205094

55efc1aaa7a4d3ad.png

如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续

9c92662c6a846a5c

预配和连接到 Cloud Shell 只需花几分钟时间。

9f0e51b578fecce5

这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的大部分(即使不是全部)工作都可以通过浏览器完成。

在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设为您的项目 ID。

  1. 在 Cloud Shell 中运行以下命令以确认您已通过身份验证:
gcloud auth list

命令输出

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目:
gcloud config list project

命令输出

[core]
project = <PROJECT_ID>

如果不是上述结果,您可以使用以下命令进行设置:

gcloud config set project <PROJECT_ID>

命令输出

Updated property [core/project].

3. 创建新的 Spring Boot Web 应用

启动 Cloud Shell 后,您可以通过 Spring Initializr 使用命令行生成新的 Spring Boot 应用。

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web \
  -d type=maven-project \
  -d baseDir=gae-standard-example | tar -xzvf -
$ cd gae-standard-example

4. 更新 Maven pom.xml

可以用两种方法来部署 Java 服务器应用:使用 Maven App Engine 插件或 Gradle App Engine 插件,或者部署 war 软件包目录。您将使用 Maven App Engine 插件来部署应用。

添加 Maven App Engine 插件

更新 pom.xml,使其包含可简化部署过程的 Google Cloud 插件。您可以使用 Vim、nano 或 Emacs 来编辑文件。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.4</version>
        <configuration>
          <version>1</version>
          <projectId>GCLOUD_CONFIG</projectId>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
</project>

5. 添加 App Engine 描述符

  1. 如需将应用部署到 App Engine 标准环境,您必须创建新的 src/main/appengine/app.yaml 描述符文件。
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. 修改 src/main/appengine/app.yaml 文件并添加以下内容:

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. 添加控制器

添加一个在 DemoApplication.java 中返回 "hello world!" 的新控制器。

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

// Add imports
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

// Add the controller.
@RestController
class HelloWorldController {
  @GetMapping("/")
  public String hello() {
    return "hello world!";
  }
}

7. 在本地运行应用

  1. 确保 JAVA_HOME 设置为正确的 JDK 版本:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. 您可以使用 Spring Boot 插件启动 Spring Boot 应用:
$ ./mvnw -DskipTests spring-boot:run
  1. 在应用启动后,点击 Cloud Shell 工具栏中的网页预览1a94d5bd10bfc072,然后选择在端口 8080 上预览

3aca52f76c6c22a3

浏览器会打开一个标签页,并连接到您启动的服务器。

7b0d8494f647822a

8. 将应用部署到 App Engine

  1. 首先,初始化该项目,以便能够运行 App Engine 应用。此外,将项目初始化为在美国的中心地区运行。
$ gcloud app create --region us-central
You are creating an app for project [...].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations
  1. 然后,运行 mvn appengine:deploy 将应用部署到 App Engine 标准环境。
$ ./mvnw -DskipTests package appengine:deploy
... first time deploy may take a couple of minutes
  1. 部署应用后,您可以在网络浏览器中打开 http://<project-id>.appspot.com,或者在 Cloud Shell 中使用以下命令来访问该应用:
$ gcloud app browse
... [It may print out the URL for your app]

9. 清理

您无法删除 App Engine 应用,但可以将其停用。

在 Google Cloud 控制台中前往 App EngineSettings,然后选择 Disable Application

8052c1e4ad73d70e

或者,您也可以删除整个项目:

$ gcloud projects delete YOUR-PROJECT-ID

10. 恭喜

您学习了如何编写您的第一个 App Engine Web 应用!

了解详情