将 App Engine 任务添加到 Cloud Tasks 队列
本快速入门介绍了如何使用 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 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 Cloud Resource Manager 和 Cloud Tasks API:
启用 API 所需的角色
如需启用 API,您需要 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable权限。了解如何授予 角色。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 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 Cloud Resource Manager 和 Cloud Tasks API:
启用 API 所需的角色
如需启用 API,您需要 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable权限。了解如何授予 角色。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 页面。
在 Welcome to App Engine 对话框中,执行以下任一操作:
如果您已创建 App Engine 应用,并且显示了 Your App Engine application has been created 消息,则可以 跳过本部分中的其余步骤,然后继续执行 安装和部署示例部分中的步骤。
或
如果您尚未创建 App Engine 应用,请点击创建应用 ,然后继续执行本部分中的其余步骤。
为您的应用选择一个区域,并记下该区域。
请注意,在 Cloud Tasks 命令中,
europe-west和us-central分别称为europe-west1和us-central1。请勿选择服务帐号;系统会使用默认的 App Engine 服务账号。
点击下一步 。
系统会配置并创建应用。这可能需要几分钟时间。
请勿下载 Cloud SDK;而是点击 I'll do this later。
您应该会看到 Your App Engine application has been created 消息。
安装和部署示例
本快速入门中使用的 Node.js 示例包含两个文件:createTask.js 在本地作为命令行工具运行,用于创建任务并将任务添加到 Tasks 队列;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