開始使用 App Engine (Python 3)

1. 總覽

befa7a877ccdd35d.png

Google App Engine 應用程式易於建立、維護及擴充,可因應流量和資料儲存空間需求變化。使用 App Engine 就不需要維護伺服器。只要上傳應用程式,就能開始使用。

在本程式碼研究室中,您將瞭解如何部署以 Flask 網路架構編寫的簡易 Python 網頁應用程式。雖然本範例使用 Flask,但您也可以使用其他網路架構,包括 DjangoPyramidBottleweb.py

本教學課程改編自 https://cloud.google.com/appengine/docs/standard/python3/quickstart

課程內容

  • 瞭解如何在 Google App Engine 上建立簡單的 Python 伺服器。
  • 如何在不關閉伺服器的情況下更新程式碼。

軟硬體需求

  • 熟悉 Python
  • 熟悉標準 Linux 文字編輯器,例如 vim、emacs 或 nano

問卷調查

您會如何使用本教學課程?

僅閱讀 閱讀並完成練習

你對 Python 的使用體驗如何?

新手 中級 熟練

你對 Google Cloud 服務的體驗滿意嗎?

新手 中級 熟練

2. 設定和需求條件

自修實驗室環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常標示為 PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試使用自己的名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間會維持不變。
  • 請注意,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件
  1. 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成這個程式碼研究室的費用不高,甚至可能完全免費。如要關閉資源,避免在本教學課程結束後繼續產生費用,請刪除您建立的資源或專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。

啟動 Cloud Shell

雖然您可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Cloud Shell,這是 Cloud 中執行的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台,點選「啟用 Cloud Shell」 圖示 853e55310c205094.png

3c1dabeca90e44e5.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. 編寫網頁應用程式

啟動 Cloud Shell 後,您可以透過指令列叫用 Cloud SDK gcloud 指令,或叫用虛擬機器執行個體提供的其他工具。您可以使用永久磁碟儲存空間中的 $HOME 目錄,儲存各專案和 Cloud Shell 工作階段的檔案。只有您能使用自己的 $HOME 目錄,其他使用者均無法存取。

首先,請在應用程式的 $HOME 目錄中建立新資料夾:

mkdir ~/helloworld
cd ~/helloworld

建立名為 main.py 的檔案:

touch main.py

使用偏好的指令列編輯器 (nano、vim 或 emacs) 編輯檔案,或點按 Cloud Shell 編輯器按鈕:

10af7b1a6240e9f4.gif

如要使用 Cloud Shell 編輯器直接編輯檔案,請使用下列指令:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. 定義依附元件

如要指定網頁應用程式的依附元件,請返回終端機,在專案的根目錄中建立 requirements.txt 檔案,並指定要使用的 Flask 確切版本:

touch requirements.txt

如要使用 Cloud Shell 編輯器編輯檔案,請使用下列指令:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. 設定部署作業

如要將網頁應用程式部署至 App Engine,您需要 app.yaml 檔案。這個設定檔會定義網路應用程式的 App Engine 設定。

在終端機中,於專案的根目錄建立並編輯 app.yaml 檔案:

touch app.yaml

如要使用 Cloud Shell 編輯器編輯檔案,請使用下列指令:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. 部署網頁應用程式

從終端機檢查目錄內容:

ls

您應該會有下列 3 個檔案:

app.yaml  main.py  requirements.txt

使用下列指令部署網頁應用程式:

gcloud app deploy

首次使用時,您需要選擇部署區域:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

確認要啟動部署作業:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

部署應用程式:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

您的網頁應用程式現在已準備好回應 https://PROJECT_ID.REGION_ID.r.appspot.com 上的 HTTP 要求。

7. 測試網頁應用程式

您的網路應用程式已準備好回應 https://PROJECT_ID.REGION_ID.r.appspot.com 的 HTTP 要求。

首先,使用 gcloud app describe 指令擷取網頁應用程式主機名稱:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

使用這個簡單的 HTTP GET 要求測試網路應用程式:

curl https://$APPENGINE_HOSTNAME

您應該會收到下列答案:

Hello World!

摘要

在先前的步驟中,您設定了簡單的 Python 網頁應用程式,並在 App Engine 上執行及部署該應用程式。

8. 更新網頁應用程式

main.py 檔案中變更 hello() 函式主體,即可修改網路應用程式。

如要使用 Cloud Shell 編輯器編輯檔案,請使用下列指令:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

從終端機重新部署,更新 Web 應用程式:

gcloud app deploy --quiet

應用程式新版本部署完成:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

以先前的方式測試新版網頁應用程式:

curl https://$APPENGINE_HOSTNAME

您應該會得到相同的答案:

Hello World!

使用選用參數進行測試:

curl https://$APPENGINE_HOSTNAME?who=Universe

您應該會收到下列答案:

Hello Universe!

摘要

在這個步驟中,您更新並重新部署了網路應用程式,服務完全沒有中斷。

9. 恭喜!

您已學會使用 Python 編寫第一個 App Engine 網頁應用程式!

瞭解詳情

授權

這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。