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

本快速入門導覽課程說明如何使用 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 時所需的角色

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

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

    gcloud auth application-default login

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 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 應用程式,且系統顯示「Your App Engine application has been created」(已建立 App Engine 應用程式) 訊息,即可略過本節的其餘步驟,並繼續進行「安裝及部署範例」一節的步驟。

    • 如果您尚未建立 App Engine 應用程式,請按一下「建立應用程式」,然後繼續完成本節的其餘步驟。

  3. 選取應用程式的地區,並記下所選地區。

    請注意,在 Cloud Tasks 指令中,europe-westus-central 分別稱為 europe-west1us-central1

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

  5. 點選「下一步」

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

  6. 請勿下載 Cloud SDK,而是點選「I'll do this later」(稍後再執行)

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

安裝及部署範例

本快速入門導覽課程使用的 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 應用程式

後續步驟