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

本快速入门介绍了如何使用 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,您需要 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 权限。了解如何授予 角色

    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,您需要 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 权限。了解如何授予 角色

    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. Welcome to App Engine 对话框中,执行以下任一操作:

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

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

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

    请注意,在 Cloud Tasks 命令中,europe-westus-central 分别称为 europe-west1us-central1

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

  5. 点击下一步

    系统会配置并创建应用。这可能需要几分钟时间。

  6. 请勿下载 Cloud SDK;而是点击 I'll do this later

    您应该会看到 Your App Engine application has been created 消息。

安装和部署示例

本快速入门中使用的 Node.js 示例包含两个文件:createTask.js 在本地作为命令行工具运行,用于创建任务并将任务添加到 Tasks 队列;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 应用

后续步骤