使用 Workflows 扩缩 Cloud Run 工作器池

创建 Cloud Run 工作器池后,您可以使用 Workflows 自动伸缩该工作器池。这样一来,您就可以根据外部事件、自定义逻辑或时间表来调整实例数量。

准备工作

以下列表介绍了使用 Workflows 部署和执行 Cloud Run 工作器池工作流时的要求:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 启用 Cloud Run Admin API 和 Workflows API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    启用 API

所需的角色

如需获得使用 Workflows 部署和执行 Cloud Run 工作器池所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需允许 Workflows 更新 Cloud Run 工作器池,用于部署工作流的服务账号必须具有以下角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 工作器池与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

创建 Cloud Run 工作器池

创建 Cloud Run 工作器池(如果您尚未创建)。您将在稍后执行工作流时引用 Cloud Run 工作器池的名称。

创建、部署和执行工作流

以下工作流会更新 Cloud Run 工作器池的实例数量。

  1. 在您的主目录中,为工作流创建一个新的 YAML 文件(例如 update-cr-worker-pool.yaml),然后将以下内容复制并粘贴到该文件中:

    main:
      params: [args]
      steps:
        - init:
            assign:
              - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
              - region: ${args.region}
              - workerPoolName: ${args.workerPool}
              - instanceCount: ${args.instanceCount}
              - workerPoolUrl: ${"https://run.googleapis.com/v2/projects/" + project + "/locations/" + region + "/workerPools/" + workerPoolName}
        - updateWorkerPool:
            call: http.patch
            args:
              url: ${workerPoolUrl}
              query:
                updateMask: "scaling.manualInstanceCount"
              auth:
                type: OAuth2
              body:
                scaling:
                  manualInstanceCount: ${int(instanceCount)}
            result: updateResult
        - returnOutput:
            return: ${updateResult.body}
    
  2. 部署工作流并将其与指定的服务账号相关联:

    gcloud workflows deploy WORKFLOW_NAME \
        --source=WORKFLOW_NAME.yaml \
        --location=REGION \
        --service-account=SERVICE_ACCOUNT

    替换以下内容:

    • WORKFLOW_NAME:工作流的名称,例如 update-worker-pool。工作流名称应与您之前创建的 YAML 文件的名称一致。
    • REGION:Cloud Run 工作器池部署到的区域,例如 europe-west1
    • SERVICE_ACCOUNT:已被授予所需角色的服务账号电子邮件地址,例如:
      • SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
      • PROJECT_NUMBER-compute@developer.gserviceaccount.com
  3. 使用工作器池的详细信息和实例数量执行工作流:

    gcloud workflows execute WORKFLOW_NAME \
        --location=REGION \
        --data='{"region":"REGION", "workerPool":"WORKER_POOL_NAME", "instanceCount":INSTANCE_COUNT}'

    替换以下内容:

    • WORKFLOW_NAME:工作流的名称。
    • REGION:Cloud Run 工作器池部署到的区域,例如 europe-west1
    • WORKER_POOL_NAME:工作器池的名称。
    • INSTANCE_COUNT:工作器池的修改后实例数,例如 3

验证更新

执行工作流后,您可以在 Google Cloud 控制台中的以下位置查看更新:

  • 如需查看执行状态和结果,请前往 Workflows 详情页面并选择相应工作流:

    转到 Workflows

    验证工作流的最新一次执行中 manualInstanceCount 字段是否已更改。

  • 如需验证 Cloud Run 中的更新是否成功,请前往工作器池页面:

    转到 Cloud Run

    验证工作器池的手动伸缩计数是否已更改。