1. 概览
Google App Engine 应用程序易于创建和维护,并且易于根据流量和数据存储需求的变化进行扩展。使用 App Engine 时,无需维护任何服务器。您只需上传应用,即可开始使用。
在此 Codelab 中,您将学习如何部署一个使用 Flask Web 框架编写的简单 Python Web 应用。虽然此示例使用的是 Flask,但您也可以使用其他 Web 框架,包括 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 服务方面的经验水平?
<ph type="x-smartling-placeholder">2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID
标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
启动 Cloud Shell
虽然 Google Cloud 可以通过笔记本电脑远程操作,但在此 Codelab 中,您将使用 Cloud Shell,这是一个在云端运行的命令行环境。
激活 Cloud Shell
- 在 Cloud Console 中,点击激活 Cloud Shell。
如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续。
预配和连接到 Cloud Shell 只需花几分钟时间。
这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的大部分(即使不是全部)工作都可以通过浏览器完成。
在连接到 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. 编写 Web 应用
Cloud Shell 启动后,您可以使用命令行调用 Cloud SDK gcloud
命令或该虚拟机实例提供的其他工具。您可以使用永久性磁盘存储空间中的 $HOME
目录跨项目以及 Cloud Shell 会话之间的文件存储文件。您的 $HOME
目录只有您自己可以看到,其他用户无法访问。
首先,在 $HOME
目录中为应用创建一个新文件夹:
mkdir ~/helloworld cd ~/helloworld
创建一个名为 main.py
的文件:
touch main.py
使用您偏好的命令行编辑器(nano、vim 或 emacs)修改文件,或点击 Cloud Shell Editor 按钮:
如需使用 Cloud Shell Editor 直接修改文件,请使用以下命令:
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. 定义依赖项
如需指定 Web 应用的依赖项,请返回终端并在项目的根目录中创建一个 requirements.txt
文件,其中包含要使用的 Flask 的确切版本:
touch requirements.txt
如需使用 Cloud Shell Editor 修改该文件,请使用以下命令:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5. 配置部署
如需将 Web 应用部署到 App Engine,您需要一个 app.yaml
文件。此配置文件定义了 App Engine 的 Web 应用设置。
从终端在项目的根目录下创建和修改 app.yaml
文件:
touch app.yaml
如需使用 Cloud Shell Editor 修改该文件,请使用以下命令:
cloudshell edit app.yaml
app.yaml
runtime: python312
6. 部署 Web 应用
在终端中,检查目录内容:
ls
您应该拥有以下 3 个文件:
app.yaml main.py requirements.txt
使用以下命令部署您的 Web 应用:
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]
现在,您的 Web 应用已准备好响应 https://PROJECT_ID.REGION_ID.r.appspot.com
上的 HTTP 请求。
7. 测试 Web 应用
您的 Web 应用已准备好响应 https://PROJECT_ID.REGION_ID.r.appspot.com
上的 HTTP 请求。
首先,使用 gcloud app describe
命令检索 Web 应用主机名:
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
使用下面这个简单的 HTTP GET 请求测试您的 Web 应用:
curl https://$APPENGINE_HOSTNAME
您应该会得到以下答案:
Hello World!
摘要
在前面的步骤中,您设置了一个简单的 Python Web 应用,运行该应用并在 App Engine 上部署了该应用。
8. 更新 Web 应用
通过更改 main.py
文件中的 hello()
函数正文来修改 Web 应用。
如需使用 Cloud Shell Editor 修改该文件,请使用以下命令:
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]
像之前一样测试您的新版 Web 应用:
curl https://$APPENGINE_HOSTNAME
您应该会得到相同的答案:
Hello World!
使用可选参数对其进行测试:
curl https://$APPENGINE_HOSTNAME?who=Universe
您应该会得到以下答案:
Hello Universe!
摘要
在此步骤中,您在未出现任何服务中断的情况下更新并重新部署您的 Web 应用。
9. 恭喜!
您已学会如何使用 Python 编写您的第一个 App Engine Web 应用!
了解详情
- App Engine 文档:https://cloud.google.com/appengine
- 学习本教程,了解如何在 App Engine 上编写成熟的 Python 应用:https://cloud.google.com/appengine/docs/standard/python3/building-app
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。