将 App Engine 任务添加到 Cloud Tasks 队列
借助 Cloud Tasks,您可以将异步任务分派给 App Engine 服务,以处理后台工作负载。在本快速入门中,您将使用 Cloud Tasks API 创建一个 App Engine 任务并将其添加到 Cloud Tasks 队列。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需的角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色 (
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
启用 Cloud Resource Manager 和 Cloud Tasks API(如果尚未启用):
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。了解如何授予角色。gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
-
如果您使用的是本地 shell,请为您的用户账号创建本地身份验证凭证:
gcloud auth application-default login
如果您使用的是 Cloud Shell,则无需执行此操作。
如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需的角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色 (
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
启用 Cloud Resource Manager 和 Cloud Tasks API(如果尚未启用):
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。了解如何授予角色。gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
-
如果您使用的是本地 shell,请为您的用户账号创建本地身份验证凭证:
gcloud auth application-default login
如果您使用的是 Cloud Shell,则无需执行此操作。
如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。
- 当您使用 App Engine 时,系统会自动创建 App Engine 默认服务账号。在试用本快速入门时,您可以使用此服务账号。不过,根据您的组织政策配置,默认服务账号可能不会自动获得项目的
Editor角色。如果是这种情况,您必须向服务账号授予以下角色:- Artifact Registry Administrator (
roles/artifactregistry.admin) - Artifact Registry Create-on-Push Writer (
roles/artifactregistry.createOnPushWriter) - Compute Admin (
roles/compute.admin) - Logs Writer (
roles/logging.logWriter) - Storage Object Viewer (
roles/storage.objectViewer)
- Artifact Registry Administrator (
添加 App Engine 应用
当您以 App Engine 任务为目标时,在将应用部署到 App Engine 标准环境之前,您必须向项目添加 App Engine 应用。
在 Google Cloud 控制台中,前往 App Engine 页面。
在欢迎使用 App Engine 对话框中,执行以下操作之一:
如果您已创建 App Engine 应用,并且系统显示您的 App Engine 应用已创建消息,则可以跳过本部分中的其余步骤,并继续执行安装和部署示例部分中的步骤。
或
如果您尚未创建 App Engine 应用,请点击创建应用,然后继续执行本部分中的其余步骤。
为您的应用选择一个区域,并记下该区域。
请注意,在 Cloud Tasks 命令中,
europe-west和us-central分别称为europe-west1和us-central1。不选择服务账号;系统会使用默认的 App Engine 服务账号。
点击下一步。
应用已配置并创建。这可能需要几分钟的时间。
请勿下载 Cloud SDK,而是点击以后再执行此操作。
您应该会看到您的 App Engine 应用已创建消息。
安装和部署示例
本快速入门中使用的 Node.js 示例包含两个文件:createTask.js 作为命令行工具在本地运行,用于创建任务并将其添加到任务队列;server.js 作为工作器服务部署在 App Engine 上,用于处理任务。
在终端中,将示例应用代码库克隆到本地机器。
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git前往包含示例代码的目录。
cd nodejs-docs-samples/cloud-tasks/snippets使用 Node.js 软件包管理器安装所有依赖项。
您可以使用 NPM:
npm install或者,您也可以使用 Yarn:
yarn install将工作服务 (
server.js) 部署到 App Engine 标准环境。gcloud app deploy app.yaml确保包含该服务的应用正在运行。
gcloud app browse在浏览器中,前往提供的链接。例如:
https://PROJECT_ID.uc.r.appspot.com/您应该会看到
Hello, World!。
创建 Cloud Tasks 任务队列
使用 gcloud tasks queues create 命令在您准备的环境中创建队列。
在终端中,创建一个记录所有操作的队列。
gcloud tasks queues create QUEUE_NAME \ --log-sampling-ratio=1.0 \ --location=REGION替换以下内容:
QUEUE_NAME:Cloud Tasks 队列的名称REGION:您部署应用所在的区域
等待队列初始化,然后验证其是否已成功创建。
gcloud tasks queues describe QUEUE_NAME \ --location=REGION输出应类似如下所示:
name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_NAME rateLimits: maxBurstSize: 100 maxConcurrentDispatches: 1000 maxDispatchesPerSecond: 500.0 retryConfig: maxAttempts: 100 maxBackoff: 3600s maxDoublings: 16 minBackoff: 0.100s state: RUNNING
将任务添加到 Cloud Tasks 队列
创建任务,将其添加到您创建的队列中,然后将该任务传送到工作器服务。
设置以下环境变量。客户端使用此信息创建请求。
export PROJECT_ID=PROJECT_ID export LOCATION_ID=REGION export QUEUE_ID=QUEUE_NAME创建一个载荷为
hello的任务,并将该任务添加到队列中。载荷可以是工作服务处理任务所需的请求中的任何数据。node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID hello通过显示工作器服务的日志来验证任务是否已执行。
gcloud app logs read日志应类似于以下内容:
2024-06-20 15:00:00 default[20240620t143852] "POST /log_payload HTTP/1.1" 200 2024-06-20 15:00:00 default[20240620t143852] App listening on port 8081 2024-06-20 15:00:00 default[20240620t143852] Press Ctrl+C to quit. 2024-06-20 15:00:00 default[20240620t143852] Received task with payload: hello
清理
为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。
删除 Google Cloud 项目:
gcloud projects delete PROJECT_ID
或者,您也可以删除您创建的资源:
删除 Cloud Tasks 任务队列:
gcloud tasks queues delete QUEUE_NAME \ --location=REGION