区域 ID
REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。
详细了解区域 ID。
如需在现有 App Engine 应用中实现图像处理现代化,您可以将容器化的图像转换服务部署到 Cloud Run,并将 App Engine 图像服务调用路由到该服务。
此迁移不需要对图片处理代码进行重大重写,也不需要将 App Engine 应用托管在 Cloud Run 上。相反,当您配置应用时,App Engine 服务 SDK 会拦截您的 App Engine Images 服务调用,并将它们路由到 Cloud Run 服务。该服务使用基于 gRPC 的开源 Pillow 引擎处理图片,并将结果返回给您的 App Engine 应用。此设置会将旧版 App Engine Images 服务后端替换为现代的云原生解决方案。
限制
使用自定义图片处理服务时,您无法生成传送网址。当您调用
get_serving_url()方法时,App Engine 会抛出运行时异常。此限制可防止依赖旧版后端来存储和提供图片。为了传送图片,我们建议您直接从 Cloud Storage 网址传送图片,或者使用由 Cloud CDN 支持的 Cloud Storage 存储桶,具体取决于您的应用要求。
您之前通过旧版
get_serving_url()方法调用创建的现有网址会继续传送图片。升级 App Engine 服务 SDK 版本时,App Engine 不会自动将 App Engine 调用路由到 Cloud Run 服务。只有在配置迁移环境变量
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE和APPENGINE_IMAGES_SERVICE_ENDPOINT后,应用才会应用新行为。
准备工作
确保您有权访问 App Engine 源代码。
启用 Cloud Run Admin API 和 Artifact Registry API:
所需的角色
您可以选择创建新的服务账号,也可以继续在 Cloud Run 中使用您用于 App Engine 的用户代管式服务账号。您或您的管理员必须为部署者账号和 Cloud Build 服务账号授予以下 IAM 角色。
点击可查看部署者账号所需的角色
如需获得从来源进行构建和部署所需的权限,请让管理员向您授予以下 IAM 角色:
- 针对项目的 Cloud Run Source Developer (
roles/run.sourceDeveloper) - 针对项目的 Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) - 针对 Cloud Run 服务身份的 Service Account User (
roles/iam.serviceAccountUser)
点击可查看 Cloud Build 服务账号需要的角色
除非您替换此行为,否则 Cloud Build 会自动使用 Compute Engine 默认服务账号作为默认 Cloud Build 服务账号来构建源代码和 Cloud Run 资源。为了让 Cloud Build 能够构建来源,请让管理员向项目的 Compute Engine 默认服务账号授予 Cloud Run Builder (roles/run.builder):
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@ \ --role=roles/run.builder
将 PROJECT_NUMBER 替换为您的 Google Cloud项目编号,将 PROJECT_ID 替换为您的 Google Cloud项目 ID。如需详细了解如何查找项目 ID 和项目编号,请参阅创建和管理项目。
向 Compute Engine 默认服务账号授予 Cloud Run Builder 角色需要几分钟时间才能传播。
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 服务与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
迁移过程
此迁移包括以下步骤:
- 在 Cloud Run 上部署图片转换服务,以获取服务网址。
- 使用 Cloud Run 服务网址和路由标志配置 App Engine 源文件,然后部署或重新部署 App Engine 应用。
- 测试应用,以检查图片处理功能。
在 Cloud Run 上部署图片转换服务
如需部署图片转换服务并配置其对 Cloud Storage 的访问权限,请按照以下步骤操作:
将预构建的图片转换服务容器部署到 Cloud Run 服务。请务必在强制执行身份验证 (
--no-allow-unauthenticated) 的情况下进行部署。在调用此服务时,App Engine 服务 SDK 会处理身份验证:gcloud run deploy image-processing-service \ --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \ --no-allow-unauthenticated \ --region=REGION将 REGION 替换为您部署 Cloud Run 服务的区域。建议您将该服务部署在与 App Engine 服务相同的区域中。
记下已部署的 Cloud Run 服务的网址,例如
https://image-processing-service-xyz-uc.a.。向默认的 App Engine 服务账号授予 Cloud Run Invoker (
roles/run.invoker) 角色。这样一来,您的 App Engine 应用便可以授权并路由对私有 Cloud Run 服务的调用:gcloud run services add-iam-policy-binding image-processing-service \ --member="serviceAccount:PROJECT_ID@" \ --role="roles/run.invoker" \ --region=REGION向默认的 Compute Engine 服务账号授予 Cloud Storage Object Viewer (
roles/storage.objectViewer) 角色。这可让图片转换服务读取存储在 Cloud Storage 中的图片:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role="roles/storage.objectViewer"替换以下内容:
- PROJECT_ID:您在其中部署 Cloud Run 服务的项目的 ID。
- PROJECT_NUMBER:您在其中部署 Cloud Run 服务的项目的项目编号。
配置源文件
如需将 Python 应用配置为使用 Cloud Run 上的图片转换服务,请按照以下步骤操作:
将以下依赖项添加到您的
requirements.txt文件中:appengine-python-standard>=3.0.0b0或者,如需在本地安装依赖项,请运行:
pip install --pre "appengine-python-standard>=3.0.0b0"更新
app.yaml文件以启用 API 代理并配置所需的环境变量:runtime: RUNTIME # a supported python version # List the Images service app_engine_bundled_services: - images env_variables: # Enable the custom gRPC Images service APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE: "true" # The URL of the Cloud Run service you deployed APPENGINE_IMAGES_SERVICE_ENDPOINT: "RUN_SERVICE_URL"替换以下内容:
- RUNTIME:受支持的 Python 运行时版本。
- RUN_SERVICE_URL:已部署的 Cloud Run 服务的网址。
将应用部署到 App Engine:
gcloud app deploy您的 App Engine 服务已部署到
https://PROJECT_ID.REGION_ID.r.appspot.com。启动浏览器,然后运行以下命令以访问您的 Web 服务:
gcloud app browse
测试您的应用
如需验证您的应用是否成功使用了 Cloud Run 映像转换服务,请执行以下操作:
- 触发应用中的图片处理功能。
- 检查 App Engine 应用的 Logs Explorer。确保没有与
google.appengine.api.images调用相关的错误。 - 检查 Cloud Run
image-processing-service的日志,验证 Cloud Run 是否已收到并处理请求。