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

在終端機中重新部署,以更新網頁應用程式:

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 網頁應用程式!

瞭解詳情

授權

這項內容採用的是創用 CC 姓名標示 2.0 通用授權。