快速入门:在 App Engine 柔性环境中使用 Python

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域指定的代码。在 App Engine 网址中包含 REGION_ID.r 对于现有应用是可选的,这将很快成为对所有新应用的要求。

为了确保顺利过渡,我们正在逐步更新 App Engine 以使用区域 ID。如果我们尚未更新您的 Google Cloud 项目,则您不会看到应用的区域 ID。由于该 ID 对于现有应用是可选的,因此您在现有应用可以使用区域 ID 后无需更新网址或进行其他更改。

详细了解区域 ID

本快速入门介绍了如何创建一个显示简短消息的 App Engine 小应用。

准备工作

在运行和部署本快速入门之前,请安装 Cloud SDK,然后为 App Engine 设置 Cloud 项目:

  1. 下载并安装 Cloud SDK:

    下载 SDK

    注意:如果您已安装 Cloud SDK,请运行以下命令进行更新:

    gcloud components update
    
  2. 创建新项目:

    gcloud projects create [YOUR_PROJECT_ID] --set-as-default
    

    [YOUR_PROJECT_ID] 替换成唯一标识您的项目的字符串。例如 my-project-24

    验证该项目已经创建:

    gcloud projects describe [YOUR_PROJECT_ID]
    

    您会看到可能如下所示的项目详细信息:

    createTime: year-month-hour
    lifecycleState: ACTIVE
    name: project-name
    parent:
    id: '433637338589'
    type: organization
    projectId: project-name-id
    projectNumber: 499227785679
    
  3. 初始化您的项目的 App Engine 应用并选择应用的区域:

    gcloud app create --project=[YOUR_PROJECT_ID]
    

    系统提示时,选择您希望自己的 App Engine 应用所在的区域

  4. 确保您的项目已启用结算功能。如需将应用部署到 App Engine,需要先将结算帐号关联到您的项目。

    启用结算功能

    柔性环境部署作业在处于活跃状态时会产生相关费用。因此,完成本快速入门后,请清理您的项目以免持续产生费用。

  5. 安装以下必备组件:

    • 运行以下命令,安装包含 App Engine Python 扩展程序的 gcloud 组件

      gcloud components install app-engine-python
      

  6. 准备 Python 开发环境。建议您在自己的系统中安装最新版本的 Python、pip 和其他相关工具。有关说明,请参阅 Python 开发环境设置指南

App Engine 位置

App Engine 具有区域性,意味着运行您的应用的基础架构位于特定区域中并由 Google 托管,在该区域内的所有地区以冗余方式提供。

选择要在哪个区域运行应用时,首先要考虑该区域是否能满足您的延迟时间、可用性或耐用性要求。通常,您可以选择距离应用的用户群体最近的区域,但也要考虑应用使用的其他 Google Cloud 产品和服务的位置。跨多个位置使用服务可能会影响应用的延迟时间和价格

目前下列区域可使用 App Engine:

  • northamerica-northeast1(蒙特利尔)
  • us-central(爱荷华)
  • us-west2(洛杉矶)
  • us-west3(盐湖城)
  • us-west4(拉斯维加斯)
  • us-east1(南卡罗来纳)
  • us-east4(北弗吉尼亚)
  • southamerica-east1(圣保罗)
  • europe-west(比利时)
  • europe-west2(伦敦)
  • europe-west3(法兰克福)
  • europe-west6(苏黎世)
  • asia-northeast1(东京)
  • asia-northeast2(大阪)
  • asia-northeast3(首尔)
  • asia-east2(香港)
  • asia-south1(孟买)
  • australia-southeast1(悉尼)

应用的区域一经设置,便无法更改。

如果您已创建 App Engine 应用,则可以按以下某一方法查看相应的区域:

  • 运行 gcloud app describe 命令。

  • 在 Cloud Console 中打开 App Engine 信息中心。该区域会显示在页面顶部附近。

此快速入门演示了一个使用 Flask Web 框架编写的简单 Python 应用,该应用可以部署到 App Engine。虽然此示例使用 Flask,但您可以使用满足上述要求的任何 Web 框架。 可供选用的框架包括 DjangoPyramidBottleweb.py

下载 Hello World 应用

我们创建了一个简单的 Python 版 Hello World 应用,以便您可以快速了解如何将应用部署到 Google Cloud。

  1. 将 Hello World 示例应用代码库克隆到本地机器。

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 切换到包含示例代码的目录。

    cd python-docs-samples/appengine/flexible/hello_world
    

在本地机器上运行 Hello World

如需在本地计算机上运行 Hello World 应用,请执行以下操作:

Mac OS/Linux

  1. 在项目以外的目录中创建一个独立的 Python 环境并将其激活:
    python3 -m venv env
    source env/bin/activate
  2. 导航到项目目录并安装依赖项:
    cd YOUR_PROJECT
    pip install  -r requirements.txt
  3. 运行应用:
    python main.py
  4. 在网络浏览器中,输入以下地址:
    http://localhost:8080

Windows

使用 Powershell 运行 Python 包。

  1. 找到已安装的 Powershell
  2. 右键点击 Powershell 的快捷方式,并以管理员身份启动。
  3. 在项目以外的目录中创建一个独立的 Python 环境并将其激活:
    python -m venv env
    env\Scripts\activate
  4. 导航到项目目录并安装依赖项:
    cd YOUR_PROJECT
    pip install -r requirements.txt
  5. 运行应用:
    python main.py
  6. 在网络浏览器中,输入以下地址:
    http://localhost:8080

页面中随即会显示来自示例应用的 Hello World 消息。在终端窗口中,按 Ctrl+C 退出 Web 服务器。

在 App Engine 上部署并运行 Hello World

要将应用部署到 App Engine 柔性环境,请执行以下操作:

  1. hello_world 目录运行以下命令来部署 Hello World 应用:

    gcloud app deploy

    了解可选标志

    常见的 gcloud 命令标志

    • 添加 --version 标志,以指定用来唯一标识应用版本的 ID,否则系统会为您生成一个 ID。示例:--version [YOUR_VERSION_ID]
    • 添加 --project 标志,为您在 gcloud 工具中初始化为默认值的 Cloud 项目 ID 指定一个替代 Cloud 项目 ID。示例:--project [YOUR_PROJECT_ID]

    例如:

    gcloud app deploy --version pre-prod-5 --project my-sample-app

    如需详细了解如何从命令行部署应用,请参阅测试和部署应用。如需查看所有命令标志的列表,请参阅 gcloud app deploy 参考。

  2. 启动浏览器,然后访问 https://PROJECT_ID.REGION_ID.r.appspot.com 以查看此应用

    gcloud app browse
    其中 PROJECT_ID 表示您的 Google Cloud 项目 ID。

此时,在 App Engine 实例上运行的网络服务器提供显示 Hello World 消息的页面。

恭喜!您已将第一个 Python 应用部署到 App Engine 柔性环境!

如需了解有关清理的信息以及可执行的后续步骤的链接,请参阅以下部分。

清理

为避免产生费用,您可以删除 Cloud 项目,以停止对该项目中使用的所有资源计费。

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

了解整个平台

现在,您已了解如何开发和部署 App Engine 应用,接下来您可以探索 Google Cloud 的其余部分。您已经安装了 Cloud SDK,它可为您提供与 Cloud SQL、Cloud Storage、Firestore 等产品交互的工具。

有关如何创建使用整个平台(而不仅仅是 App Engine)的应用的操作指南,请查看我们的创建 Bookshelf 应用快速入门。

了解 App Engine 柔性环境

以下主题有助于您继续了解 App Engine。

Hello World 代码讨论

Hello World 是最简单的 App Engine 应用,因为它只包含一项服务,只有一个版本,并且所有代码都位于应用的根目录中。本部分会详细介绍每个应用文件。

main.py

Hello World 应用是一个基本的单文件式 Flask 应用。

import logging

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return 'Hello World!'

@app.errorhandler(500)
def server_error(e):
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: <pre>{}</pre>
    See logs for full stacktrace.
    """.format(e), 500

if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)

app.yaml

app.yaml 文件描述应用的部署配置:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

在以上示例中,app.yaml 指定了该应用使用的运行时,并设置了 env: flex 以指定该应用使用柔性环境

entrypoint 用于告知 App Engine 如何启动应用。此应用使用 gunicorn 来处理 Python 应用。$PORT 变量由 App Engine 在启动应用时设置。如需详细了解 entrypoint,请参阅应用启动

此外,可选的 runtime_config 部分将 python_version 设置为使用 Python 3。如果未指定 python_version,则默认使用 Python 2。您也可以明确指定 python_version: 2

requirements.txt

requirements.txt 和 Python 软件包管理器 pip 用于声明和安装应用依赖项。Hello World 应用需要使用 Web 框架 Flask 和 WSGI 服务器 Gunicorn

Flask==1.1.2
gunicorn==20.0.4

requirements.txt 定义将在本地以及向 App Engine 部署应用时安装的库。