將 App Engine 工作新增至 Cloud Tasks 佇列

Cloud Tasks 可將非同步工作分派至 App Engine 服務,處理背景工作負載。在本快速入門導覽課程中,您將使用 Cloud Tasks API 建立 App Engine 工作,並新增至 Cloud Tasks 佇列。

事前準備

  1. 安裝 Google Cloud CLI。

  2. 設定 gcloud CLI,使用您的聯合身分。

    詳情請參閱「 使用聯合身分登入 gcloud CLI」。

  3. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  4. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要專案建立者角色 (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 專案名稱。

  5. 確認 Google Cloud 專案已啟用計費功能。

  6. 如尚未啟用,請啟用 Cloud Resource Manager 和 Cloud Tasks API:

    啟用 API 所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
  7. 為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果系統傳回驗證錯誤,請確認您已 使用聯合身分登入 gcloud CLI。

  8. 使用 App Engine 時,系統會自動建立 App Engine 預設服務帳戶。試用本快速入門指南時,可以使用這個服務帳戶。不過,根據機構政策設定,系統可能不會自動將專案的 Editor 角色授予預設服務帳戶。如果是這種情況,您必須授予服務帳戶下列角色:
    1. Artifact Registry 管理員 (roles/artifactregistry.admin)
    2. Artifact Registry 推送建立寫入者 (roles/artifactregistry.createOnPushWriter)
    3. Compute 管理員 (roles/compute.admin)
    4. 記錄寫入者 (roles/logging.logWriter)
    5. Storage 物件檢視者 (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) 對話方塊中,執行下列其中一項操作:

    • 如果您已建立 App Engine 應用程式,且畫面顯示「已建立 App Engine 應用程式」訊息,即可略過本節的其餘步驟,並繼續進行「安裝及部署範例」一節的步驟。

      或

    • 如果您尚未建立 App Engine 應用程式,請按一下「Create application」(建立應用程式),然後繼續執行本節中的其餘步驟。

  3. 為應用程式選取區域,並記下所選區域。

    請注意,在 Cloud Tasks 指令中,europe-west 和 us-central 分別稱為 europe-west1 和 us-central1。

  4. 請勿選取服務帳戶,系統會使用預設的 App Engine 服務帳戶。

  5. 點選「下一步」。

    應用程式已設定並建立完成。這可能需要幾分鐘。

  6. 請勿下載 Cloud SDK,而是點選「稍後再執行」。

    您應該會看到「已建立 App Engine 應用程式」訊息。

安裝及部署範例

本快速入門導覽課程使用的 Node.js 範例包含兩個檔案:createTask.js 會在本機以指令列工具的形式執行,用於建立工作並將工作新增至 Tasks 佇列;server.js 則會部署在 App Engine,做為處理工作的 worker 服務。

  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. 將 worker 服務 (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 應用程式。

後續步驟