App Engine 使用入门 (Python 3)

1. 概览

befa7a877ccdd35d.png

Google App Engine 应用程序易于创建和维护,并且易于根据流量和数据存储需求的变化进行扩展。使用 App Engine 时,无需维护任何服务器。您只需上传应用,即可开始使用。

在此 Codelab 中,您将学习如何部署一个使用 Flask Web 框架编写的简单 Python Web 应用。虽然此示例使用的是 Flask,但您也可以使用其他 Web 框架,包括 DjangoPyramidBottleweb.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"></ph> 新手 中级 熟练

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然 Google Cloud 可以通过笔记本电脑远程操作,但在此 Codelab 中,您将使用 Cloud Shell,这是一个在云端运行的命令行环境。

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shell853e55310c205094

3c1dabeca90e44e5

如果这是您第一次启动 Cloud Shell,系统会显示一个中间屏幕,说明它是什么。如果您看到中间屏幕,请点击继续

9c92662c6a846a5c

预配和连接到 Cloud Shell 只需花几分钟时间。

9f0e51b578fecce5

这个虚拟机装有所需的所有开发工具。它提供了一个持久的 5 GB 主目录,并在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的大部分(即使不是全部)工作都可以通过浏览器完成。

在连接到 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. 编写 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 按钮:

10af7b1a6240e9f4.gif

如需使用 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 应用!

了解详情

许可

此作品已获得 Creative Commons Attribution 2.0 通用许可授权。