在 App Engine 彈性環境中使用 Java 的快速入門導覽課程

本快速入門導覽課程說明如何建立小型 App Engine 應用程式,讓畫面顯示簡短訊息。

事前準備

本快速入門導覽課程假設您已安裝 Java SE 8 Development Kit (JDK)

在執行及部署本課程的應用程式範例前,請先安裝 Cloud SDK 並設定 App Engine 的 GCP 專案:

  1. 下載並安裝 Cloud SDK:

    下載 SDK

    注意:如果您已安裝 Cloud SDK,請執行下列指令進行更新:

    gcloud components update
    
  2. 建立新專案:

    gcloud projects create [YOUR_PROJECT_ID] --set-as-default
    

    請確認專案已成功建立:

    gcloud projects describe [YOUR_PROJECT_ID]
    

    畫面上會顯示專案資訊,請參考以下的範例:

    createTime: year-month-hour
    lifecycleState: ACTIVE
    name: project-name
    parent:
    id: '433637338589'
    type: organization
    projectId: project-name-id
    projectNumber: 499227785679
    
  3. 使用您的專案將 App Engine 應用程式初始化,然後選擇地區:

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    收到系統提示時,選取 App Engine 應用程式的存放地區

  4. 請確認您已啟用專案的計費功能。您必須將帳單帳戶連結至專案,才能將應用程式部署至 App Engine。

    啟用計費功能

    彈性環境部署作業處於有效狀態時會產生相關費用。 因此,完成後請清除專案,以免持續產生費用。

  5. 安裝下列必要項目:

App Engine 位置

App Engine 具有「地區性」,這表示執行應用程式的基礎架構位於特定地區,且由 Google 代管,可為該地區內的所有區域提供備援功能。

選擇應用程式的執行地區時,請將您在延遲時間、可用性和耐用性方面的要求,做為主要考量。一般而言,您可以選擇距離您應用程式使用者最近的地區,但也應該考慮應用程式使用的其他 GCP 產品和服務所處的位置。如果跨多個位置使用服務,可能會影響應用程式的延遲時間和定價

App Engine 可在下列地區使用:

  • northamerica-northeast1 (蒙特婁)
  • us-central (愛荷華州)
  • us-west2 (洛杉磯)
  • us-east1 (南卡羅來納州)
  • us-east4 (北維吉尼亞州)
  • southamerica-east1 (聖保羅)
  • europe-west (比利時)
  • europe-west2 (倫敦)
  • europe-west3 (法蘭克福)
  • europe-west6 (蘇黎世)
  • asia-northeast1 (東京)
  • asia-northeast2 (大阪)
  • asia-east2 (香港)
  • asia-south1 (孟買)
  • australia-southeast1 (雪梨)

應用程式的地區設定完成後即無法更改。

如果您已建立 App Engine 應用程式,即可透過執行 gcloud app describe 指令,或開啟 GCP Console 中的 App Engine「Dashboard」(資訊主頁) 來查看地區。App Engine 應用程式的地區會列於 http://[YOUR_PROJECT_ID].appspot.com 底下。

下載 Hello World 應用程式

我們建立了 Java 適用的簡易 Hello World 應用程式,方便您快速瞭解如何在 Google Cloud Platform 中部署應用程式。

  1. 將 Hello World 範例應用程式存放區複製到本機電腦。

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples
    

    您也可以下載 zip 格式的範例檔案,之後再將檔案解壓縮。

  2. 切換到含有範例程式碼的目錄。

    cd java-docs-samples/flexible/helloworld
    

在本機電腦上執行 Hello World

  1. 使用 Spring Boot Maven 外掛程式啟動本機 Tomcat 網路伺服器:

    mvn spring-boot:run
    
  2. 在網路瀏覽器中,輸入下列網址:

    http://localhost:8080

此時頁面會顯示來自範例應用程式的「Hello World」訊息。請在終端機視窗中,按下 Ctrl+C 鍵來關閉網路伺服器。

在 App Engine 上部署並執行 Hello World

如要將您的應用程式部署到 App Engine 彈性環境:

  1. helloworld 目錄執行下列指令,部署 Hello World 應用程式:

    gcloud config set project YOUR_PROJECT_ID
    mvn appengine:deploy
  2. 執行下列指令來啟動瀏覽器,並前往 http://YOUR_PROJECT_ID.appspot.com 查看應用程式:

    gcloud app browse
    其中 YOUR_PROJECT_ID 是您的 GCP 專案 ID。

此時,顯示 Hello World 訊息的頁面是由在 App Engine 執行個體上運作的網路伺服器所提供。

恭喜! 您已成功在 App Engine 彈性環境中部署第一個 Java 應用程式!

請參閱下列各節來瞭解清除作業的資訊,並取得相關後續步驟的連結。

清除所用資源

如要避免支付費用,您可以刪除 GCP 專案,這樣系統就會停止對該專案使用的所有資源收取費用。

  1. 前往 GCP Console 中的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源) 頁面

  2. 在專案清單中選取您要刪除的專案,然後按一下「Delete」(刪除) 圖示
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟

瞭解整個平台

現在您已瞭解開發及部署 App Engine 應用程式的相關程序,接下來建議您探索 GCP 的其餘部分。您已安裝的 Cloud SDK 可提供相關工具,讓您與 Cloud SQL、Cloud Storage 和 Cloud Firestore 等產品搭配使用。

如欲瞭解應如何建立使用整個平台 (而非僅使用 App Engine) 的應用程式,請參考建立 Bookshelf 應用程式的快速入門導覽課程,以取得逐步操作說明。

瞭解 App Engine 彈性環境

以下是一些可協助您瞭解 App Engine 的主題。

Hello World 程式碼審查

Hello World 是再簡單不過的 App Engine 應用程式,只包含一項服務、只有一種版本,且所有程式碼都位於應用程式的根目錄中。本節將詳細說明每個應用程式檔案。

HelloServlet.java

HelloServlet.java 檔案會指定網址模式來描述應用程式聽取要求的位置,並且使用「Hello World」訊息來回應任何要求。

@SuppressWarnings("serial")
@WebServlet(name = "helloworld", value = "/")
public class HelloServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    PrintWriter out = resp.getWriter();
    out.println("Hello, world - Flex Servlet");
  }
}

app.yaml

app.yaml 檔案說明應用程式的部署設定:

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

runtime_config:  # Optional
  jdk: openjdk8
  server: jetty9

manual_scaling:
  instances: 1

在此,app.yaml 檔案指定了該應用程式使用的執行階段,並設定 env: flex 來指定該應用程式使用彈性環境

pom.xml

Hello World 也具有 pom.xml 檔案,其中包含專案的依附元件和建置目標等資訊。

<project>                               <!-- REQUIRED -->

  <modelVersion>4.0.0</modelVersion>    <!-- REQUIRED -->
  <packaging>war</packaging>            <!-- REQUIRED -->

  <groupId>com.example.flex.helloworld</groupId>
  <artifactId>helloworld-servlet</artifactId> <!-- Name of your project -->
  <version>1.0-SNAPSHOT</version>       <!-- xx.xx.xx -SNAPSHOT means development -->

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source> <!-- REQUIRED -->
    <maven.compiler.target>1.8</maven.compiler.target> <!-- REQUIRED -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- REQUIRED -->
    <appengine.maven.plugin>1.3.2</appengine.maven.plugin>
    <jetty.maven.plugin>9.4.3.v20170317</jetty.maven.plugin>
  </properties>

  <parent>                              <!-- Get parameters and allow bulk testing -->
    <artifactId>getting-started-java</artifactId>
    <groupId>com.example</groupId>
    <version>1.0.0</version>
    <relativePath>..</relativePath>
  </parent>

  <dependencies>
    <dependency>                        <!-- REQUIRED -->
      <groupId>javax.servlet</groupId>  <!-- Java Servlet API -->
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>           <!-- Provided by the Jetty Servlet Container -->
    </dependency>
  </dependencies>

  <build>
    <!-- For hot reload of the web application when using an IDE Eclipse / IDEA -->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>

    <plugins>

      <plugin>                          <!-- Used for local debugging -->
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty.maven.plugin}</version>
      </plugin>

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>${appengine.maven.plugin}</version>
        <configuration>
          <!-- deploy configuration -->
<!--
          <deploy.promote>true</deploy.promote>                           <!~~ DEFAULT value ~~>
          <deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>   <!~~ DEFAULT value ~~>
 -->
        </configuration>
      </plugin>

    </plugins>
  </build>
</project>
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 適用的 App Engine 彈性環境文件