将 App Engine 标准环境应用迁移到 Cloud Run

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

本指南介绍如何迁移使用公共 IP 连接到 Cloud SQL 实例的现有 App Engine 应用。

通常,本指南中的步骤演示了如何在 Cloud Run 中部署相同的应用源代码,然后将其配置为使用相同的 Cloud SQL 数据库用户连接现有实例和数据库。

本指南中的步骤不包括如何使用内部专用 IP 连接,因为这需要您先修改应用代码。但是,将应用部署到 Cloud Run 后,您可以按照从 Cloud Run 连接到 Cloud SQL 中的步骤了解要求以及如何使用专用 IP。

如需详细了解 App Engine 和 Cloud Run 之间的异同,包括迁移到 Cloud Run 的优势,请参阅比较摘要

须知事项

  1. 确保 Cloud Run 满足您的应用要求。查看 App Engine 和 Cloud Run 比较,确定 CPU 和内存等 Cloud Run 资源是否满足您的需求。
  2. 本指南假定您的应用可以正常运行,未发生错误。

  3. 您需要有权访问 Cloud SQL 实例,包括用于连接应用的数据库用户名和密码。 Cloud Run 使用加密功能,并使用 Unix 套接字或 Cloud SQL 连接器通过 Cloud SQL Auth 代理进行连接。

  4. 查看以下 Cloud Run 差异:

    • 每次将更改部署到特定服务时,Cloud Run 都会使用 Revision 而不是 Version 一词来表示。首次将应用部署到 Cloud Run 中的服务会创建其第一个修订版本。服务的每个后续部署都会创建其他修订版本。详细了解如何部署到 Cloud Run

    • 您可以使用 Google Cloud CLI 或 Google Cloud 控制台将源代码部署到 Cloud Run 来配置和管理应用设置。Cloud Run 不需要基于文件的配置,但 YAML 配置受支持,您可以使用 app2run 工具转换 Cloud Run 的现有 App Engine 文件。

    • 您部署到 Cloud Run 的每项服务都使用网址中的 run.app 网域来公开访问服务。

    • 与默认为公开的 App Engine 服务不同,Cloud Run 服务默认为专用,并要求您将其配置为允许公开(未经身份验证)访问。

将应用迁移到 Cloud Run

概括来讲,将 App Engine 应用迁移到 Cloud Run 的过程包括以下步骤:

  1. 启用所需的 API
  2. 配置 Cloud Run 服务账号
  3. 在 Cloud Run 中部署应用

启用所需的 API

您必须先启用 Cloud Run API 和 Artifact Registry API,然后才能将应用部署到 Cloud Run。

使用 Google Cloud 控制台启用 API:

转到“API 和服务”

配置 Cloud Run 服务账号

您可以选择创建新的服务账号,也可以继续在 Cloud Run 中使用您用于 App Engine 的用户管理的服务账号。在服务账号中,您必须确保配置以下 Identity and Access Management (IAM) 角色或等效权限:

如需部署到 Cloud Run,您必须拥有以下各项之一:

  • Owner
  • Editor
  • Cloud Run Admin 和 Service Account User 角色
  • 等效的 Cloud Run 权限

对于与 Cloud SQL 的公共 IP 连接,您必须拥有以下各项之一:

在 Cloud Run 中部署应用

您无需做出任何代码更改即可将 App Engine 应用部署到 Cloud Run。

在以下步骤中,您会将应用部署到 Cloud Run 中的新服务,同时配置该服务以连接到 Cloud SQL。

与 App Engine 标准环境类似,Cloud Run 支持基于来源的部署。您需要拥有源代码库的访问权限。

Cloud Run 在内部使用 buildpackCloud Build 从源代码自动构建容器映像,您无需手动构建容器或指定 Dockerfile。但是,如果存在 Dockerfile,则系统将使用它。

从源代码部署 Cloud Run 服务使用 Artifact Registry,因此此功能仅在 Artifact Registry 支持的区域中提供。

如需部署您之前部署到 App Engine 的源代码,请执行以下操作:

  1. 切换到应用的源代码所在的源目录。

      cd YOUR_APPENGINE_CODE_DIR
    
  2. 部署到 Cloud Run。

    如需构建源代码并部署应用,请在运行部署命令时使用 --source 标志。您必须设置配置标志,使其包含在 App Engine 应用的 app.yaml 文件中定义的 SQL 连接环境变量:

      gcloud run deploy run-sql --source SOURCE \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    您需要将其中的:

    • SOURCE 替换为 App Engine 源目录的路径
    • INSTANCE_CONNECTION_NAME 替换为 Cloud SQL 实例的实例连接名称,或以英文逗号分隔的连接名称列表。 您可以通过运行以下命令找到 INSTANCE_CONNECTION_NAME
        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME 替换为您的数据库的名称。
    • DB_USER 替换为您的数据库的用户名。
    • DB_PASS 替换为您的数据库用户的密码。
  3. 当系统现提示时,输入 SERVICE 的名称。

  4. 在系统提示时通过响应 y 来响应任何提示,以安装所需 API。您只需为项目执行一次此操作。 等待构建和部署完成。完成后,系统会显示如下所示的消息:

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    如需详细了解如何将源代码部署到 Cloud Run,请参阅从源代码部署

后续步骤