将 App Engine 任务添加到 Cloud Tasks 队列

借助 Cloud Tasks,您可以将异步任务分派给 App Engine 服务,以处理后台工作负载。在本快速入门中,您将使用 Cloud Tasks API 创建一个 App Engine 任务并将其添加到 Cloud Tasks 队列。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目。

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 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 项目名称。

  6. 验证您的 Google Cloud 项目是否已启用结算功能。

  7. 启用 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
  8. 如果您使用的是本地 shell,请为您的用户账号创建本地身份验证凭证:

    gcloud auth application-default login

    如果您使用的是 Cloud Shell,则无需执行此操作。

    如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。

  9. 安装 Google Cloud CLI。

  10. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  12. 创建或选择 Google Cloud 项目。

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 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 项目名称。

  13. 验证您的 Google Cloud 项目是否已启用结算功能。

  14. 启用 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
  15. 如果您使用的是本地 shell,请为您的用户账号创建本地身份验证凭证:

    gcloud auth application-default login

    如果您使用的是 Cloud Shell,则无需执行此操作。

    如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。

  16. 当您使用 App Engine 时,系统会自动创建 App Engine 默认服务账号。在试用本快速入门时,您可以使用此服务账号。不过,根据您的组织政策配置,默认服务账号可能不会自动获得项目的 Editor 角色。如果是这种情况,您必须向服务账号授予以下角色:
    1. Artifact Registry Administrator (roles/artifactregistry.admin)
    2. Artifact Registry Create-on-Push Writer (roles/artifactregistry.createOnPushWriter)
    3. Compute Admin (roles/compute.admin)
    4. Logs Writer (roles/logging.logWriter)
    5. Storage Object Viewer (roles/storage.objectViewer)

添加 App Engine 应用

当您以 App Engine 任务为目标时,在将应用部署到 App Engine 标准环境之前,您必须向项目添加 App Engine 应用。

  1. 在 Google Cloud 控制台中,前往 App Engine 页面。

    前往 App Engine

  2. 在欢迎使用 App Engine 对话框中,执行以下操作之一:

    • 如果您已创建 App Engine 应用,并且系统显示您的 App Engine 应用已创建消息,则可以跳过本部分中的其余步骤,并继续执行安装和部署示例部分中的步骤。

      或

    • 如果您尚未创建 App Engine 应用,请点击创建应用,然后继续执行本部分中的其余步骤。

  3. 为您的应用选择一个区域,并记下该区域。

    请注意,在 Cloud Tasks 命令中,europe-west 和 us-central 分别称为 europe-west1 和 us-central1。

  4. 不选择服务账号;系统会使用默认的 App Engine 服务账号。

  5. 点击下一步。

    应用已配置并创建。这可能需要几分钟的时间。

  6. 请勿下载 Cloud SDK,而是点击以后再执行此操作。

    您应该会看到您的 App Engine 应用已创建消息。

安装和部署示例

本快速入门中使用的 Node.js 示例包含两个文件:createTask.js 作为命令行工具在本地运行,用于创建任务并将其添加到任务队列;server.js 作为工作器服务部署在 App Engine 上,用于处理任务。

  1. 在终端中,将示例应用代码库克隆到本地机器。

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  2. 前往包含示例代码的目录。

    cd nodejs-docs-samples/cloud-tasks/snippets
    
  3. 使用 Node.js 软件包管理器安装所有依赖项。

    您可以使用 NPM:

    npm install
    

    或者,您也可以使用 Yarn:

    yarn install
    
  4. 将工作服务 (server.js) 部署到 App Engine 标准环境。

    gcloud app deploy app.yaml
    
  5. 确保包含该服务的应用正在运行。

    gcloud app browse
    
  6. 在浏览器中,前往提供的链接。例如:

    https://PROJECT_ID.uc.r.appspot.com/
    

    您应该会看到 Hello, World!。

创建 Cloud Tasks 任务队列

使用 gcloud tasks queues create 命令在您准备的环境中创建队列。

  1. 在终端中,创建一个记录所有操作的队列。

    gcloud tasks queues create QUEUE_NAME \
        --log-sampling-ratio=1.0 \
        --location=REGION
    

    替换以下内容:

    • QUEUE_NAME:Cloud Tasks 队列的名称
    • REGION:您部署应用所在的区域
  2. 等待队列初始化,然后验证其是否已成功创建。

    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 队列

创建任务,将其添加到您创建的队列中,然后将该任务传送到工作器服务。

  1. 设置以下环境变量。客户端使用此信息创建请求。

    export PROJECT_ID=PROJECT_ID
    export LOCATION_ID=REGION
    export QUEUE_ID=QUEUE_NAME
    
  2. 创建一个载荷为 hello 的任务,并将该任务添加到队列中。载荷可以是工作服务处理任务所需的请求中的任何数据。

    node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID hello
    
  3. 通过显示工作器服务的日志来验证任务是否已执行。

    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

或者,您也可以删除您创建的资源:

  1. 删除 Cloud Tasks 任务队列:

    gcloud tasks queues delete QUEUE_NAME \
        --location=REGION
    
  2. 停用 App Engine 应用。

后续步骤