1. 總覽
Google App Engine 應用程式不僅建立容易、維護簡單,而且可因應流量和資料儲存需求的變化輕鬆調整規模。有了 App Engine,就不需要維護伺服器。只要上傳應用程式即可開始使用。
在本程式碼研究室中,您將瞭解如何部署以 Flask 網路架構編寫的簡易 Python 網頁應用程式。雖然本範例使用 Flask,但您也可以使用其他網路架構,包括 Django、Pyramid、Bottle 和 web.py。
本教學課程取材自 https://cloud.google.com/appengine/docs/standard/python3/quickstart
課程內容
- 如何在 Google App Engine 上建立簡易的 Python 伺服器。
- 如何在不關閉伺服器的情況下更新程式碼。
軟硬體需求
- 熟悉使用 Python
- 熟悉標準的 Linux 文字編輯器 (例如 vim、emacs 或 nano)
問卷調查
您會如何使用這個教學課程?
您對 Python 的使用體驗有何評價?
針對使用 Google Cloud 服務的經驗,您會給予什麼評價?
2. 設定和需求
自修環境設定
- 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。
- 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。您可以隨時更新付款方式。
- 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為
PROJECT_ID
)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。 - 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行本程式碼研究室不會產生任何費用 (如果有的話)。如要關閉資源,以免產生本教學課程結束後產生的費用,您可以刪除自己建立的資源或刪除專案。新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
啟用 Cloud Shell
- 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示 。
如果您是第一次啟動 Cloud Shell,系統會顯示中繼畫面,說明這項服務的內容。如果系統顯示中繼畫面,請按一下「繼續」。
佈建並連線至 Cloud Shell 只需幾分鐘的時間。
這個虛擬機器已載入所有必要的開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可透過瀏覽器完成。
連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。
- 在 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`
- 在 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 編輯器」按鈕來編輯檔案:
如要使用 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 網頁應用程式!
瞭解詳情
- App Engine 說明文件:https://cloud.google.com/appengine
- 探索這個教學課程,瞭解如何在 App Engine 上編寫完備的 Python 應用程式:https://cloud.google.com/appengine/docs/standard/python3/building-app
授權
這項內容採用的是創用 CC 姓名標示 2.0 通用授權。