將 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 未使用的字元字串。您可以隨時更新付款方式。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。
  • 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行本程式碼研究室不會產生任何費用 (如果有的話)。如要關閉資源,以免產生本教學課程結束後產生的費用,您可以刪除自己建立的資源或刪除專案。新使用者符合 $300 美元免費試用計畫的資格。

Cloud Shell

您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示 853e55310c205094.png

55efc1aaa7a4d3ad.png

如果您是第一次啟動 Cloud Shell,系統會顯示中繼畫面,說明這項服務的內容。如果系統顯示中繼畫面,請按一下「繼續」

9c92662c6a846a5c.png

佈建並連線至 Cloud Shell 只需幾分鐘的時間。

9f0e51b578fecce5.png

這個虛擬機器已載入所有必要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可透過瀏覽器完成。

連線至 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 網頁應用程式

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.png,然後選取「透過以下通訊埠預覽:8080」

3aca52f76c6c22a3.png

瀏覽器會開啟一個分頁,並連線至您啟動的伺服器。

7b0d8494f647822a.png

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 Engine」和「Settings」,然後選取「Disable Application」:

8052c1e4ad73d70e.png

或者,您也可以刪除整個專案:

$ gcloud projects delete YOUR-PROJECT-ID

10. 恭喜

您已瞭解如何編寫第一個 App Engine 網頁應用程式!

瞭解詳情