叫用 Cloud Run 函式或 Cloud Run

如要從 Workflows 呼叫或叫用 Google Cloud 服務 (例如 Cloud Run functions 或 Cloud Run),請透過 HTTP 要求進行。最常見的 HTTP 要求方法有呼叫捷徑 (例如 http.get 和 http.post),但您可以將 call 欄位設為 http.request,並使用 method 欄位指定要求類型,藉此發出任何類型的 HTTP 要求。詳情請參閱「提出 HTTP 要求」。

如要傳送已驗證的要求,請按照下列步驟操作:

  • 工作流程必須與服務帳戶建立關聯,且該帳戶已獲派一或多個 Identity and Access Management (IAM) 角色,並具備必要權限。

  • 您必須在工作流程定義中明確新增驗證資訊。基於安全考量,HTTP 要求預設不含身分或存取權杖。

詳情請參閱「授予工作流程權限,以便存取 Google Cloud 資源」。

呼叫服務的時機

如何判斷何時該使用 Workflows 語法以 YAML 或 JSON 建立步驟,何時該建立服務 (例如 Cloud Run 服務或 Cloud Run 函式) 來執行工作?

使用 Workflows 從工作流程本身呼叫服務並處理結果,以及執行簡單的工作,例如發出 HTTP 呼叫。Workflows 可叫用服務、剖析回應,以及為其他連結的服務建構輸入內容。呼叫服務可避免額外叫用、其他依附元件和服務呼叫服務等複雜情況。

建立服務來執行 Workflows 無法處理的複雜工作,例如實作可重複使用的商業邏輯、複雜運算,或 Workflows 運算式和標準程式庫不支援的轉換作業。複雜的情況通常較容易在程式碼中實作,而非使用 YAML 或 JSON 和 Workflows 語法。

要求逾時和酬載限制

透過 HTTP 呼叫 Cloud Run 服務或 Cloud Run 函式時,請注意 Workflows 中的同步 HTTP 要求 (http.get、http.post、http.request) 預設逾時時間為 5 分鐘 (300 秒),最長可達 30 分鐘 (1,800 秒),回應大小上限為 2 MB (如果儲存在變數中,則受限於 512 KB 的變數記憶體限制)。

雖然 Cloud Run 服務和 Cloud Run functions (第 2 代) 支援的要求逾時時間長達 60 分鐘,但 Workflows 中的任何同步 http.* 步驟在超過設定的逾時時間 (最多 30 分鐘) 後,都會逾時並傳回 TimeoutError。如果工作負載執行時間超過 30 分鐘,或傳回大型酬載,請使用 Cloud Run 工作或回呼端點。如需限制和建議模式的比較,請參閱「調整各項服務的逾時時間和酬載大小」。

叫用僅限內部輸入的服務

Workflows 可叫用相同 Google Cloud 專案或 VPC Service Controls 範圍中的 Cloud Run functions 或 Cloud Run 服務,且輸入流量僅限內部流量。採用這項設定後,服務無法透過網際網路連線,但可以透過 Workflows 連線。

如要套用這些限制,您必須調整服務或函式的輸入設定。請注意,您必須透過 run.app 網址存取 Cloud Run 服務,而非自訂網域。詳情請參閱「限制網路輸入」(適用於 Cloud Run 和 Cloud Run functions 第 2 代) 和「調整網路設定 (第 1 代)」(適用於 Cloud Run functions 第 1 代)。工作流程不需要其他變更。

使用具備必要權限的服務帳戶

向其他 Google Cloud 服務提出要求時,工作流程必須與具備正確權限的服務帳戶相關聯,才能存取要求的資源。如要瞭解與現有工作流程相關聯的服務帳戶,請參閱「驗證工作流程的相關聯服務帳戶」。

設定服務帳戶時,您需要將要求身分與要授予存取權的資源建立關聯,也就是將要求身分設為資源的主體,然後指派適當的角色。角色會定義身分在資源情境中擁有的權限。

舉例來說,如要將接收 Cloud Run 函式 (第 1 代) 設為接受來自特定呼叫函式或服務的要求,您必須將呼叫者的服務帳戶新增為接收函式的主體,並將 Cloud Functions 叫用者 (roles/cloudfunctions.invoker) 角色授予該主體。同樣地,如要為 Cloud Run 服務或 Cloud Run functions (第 2 代) 設定服務帳戶,請將 Cloud Run 叫用者 (roles/run.invoker) 角色授予該服務帳戶。詳情請參閱「使用 IAM 控管存取權」或「Cloud Run 驗證總覽」。

叫用 Cloud Run functions

在 Cloud Run functions 中,您可以透過管理基礎 Cloud Run 服務,取得叫用權限。如果工作流程叫用 Cloud Run functions 服務,您不需要將 Cloud Functions 叫用者 (roles/cloudfunctions.invoker) IAM 角色授予呼叫者的服務帳戶。而是必須授予 Cloud Run 叫用者 (roles/run.invoker) IAM 角色。

詳情請參閱「比較 Cloud Run functions」。

在工作流程中新增驗證資訊

向 Cloud Run functions 或 Cloud Run 發出要求時,請使用 OIDC 進行驗證。

如要使用 OIDC 提出 HTTP 要求,請在指定網址後,於工作流程定義的 args 部分新增 auth 部分。在這個範例中,系統會傳送要求來叫用 Cloud Run 函式:

YAML

  - step_A:
      call: http.get
      args:
          url: https://us-central1-project.cloudfunctions.net/functionA
          query:
              firstNumber: 4
              secondNumber: 6
              operation: sum
          auth:
              type: OIDC
              audience: OIDC_AUDIENCE
    

JSON

    [
      {
        "step_A": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-project.cloudfunctions.net/functionA",
            "query": {
              "firstNumber": 4,
              "secondNumber": 6,
              "operation": "sum"
            },
            "auth": {
              "type": "OIDC",
              "audience": "OIDC_AUDIENCE"
            }
          }
        }
      }
    ]
      
選用的 audience 參數會指定權杖的 OIDC 目標對象 (OIDC_AUDIENCE)。根據預設,這個值會設為與 url 相同的值。不過,如果 url 包含服務或函式根網址以外的其他路徑區隔,請將 audience 設為根網址 (例如 https://us-central1-project.cloudfunctions.net/functionA)。

指定回應資料的媒體類型

如果回應的 Content-Type 標頭指定 application/json 媒體類型,儲存在變數中的 JSON 回應會自動轉換為可存取的地圖。

如有需要,請修改呼叫的 API,為 Content-Type 回應標頭指定 application/json 媒體類型。否則,您可以使用 json.decode 和 text.encode 函式,將回應主體轉換為對應。例如:

json.decode(text.encode(RESPONSE_FROM_API))

詳情請參閱「存取儲存在變數中的 HTTP 回應資料」。

執行 Cloud Run 工作

與 Cloud Run 服務不同,Cloud Run 工作不會監聽或處理 HTTP 要求。如要透過工作流程執行 Cloud Run 工作,請使用 Cloud Run Admin API 連接器。如果工作需要超過 30 分鐘才能完成,請設定工作的任務逾時 (預設為 10 分鐘,最多可設為 168 小時或 7 天),以及連接器呼叫中的 connector_params.timeout (預設為 1,800 秒,最多可設為 31,536,000 秒或 1 年)。

如需執行 Cloud Run 工作的端對端範例,瞭解如何處理以環境變數形式傳遞至工作的資料,請參閱「使用 Workflows 執行 Cloud Run 工作」。

如需執行 Cloud Run 工作的端對端範例,請參閱「執行 Cloud Run 工作,處理 Cloud Storage 中的事件資料」。該工作會處理儲存在 Cloud Storage bucket 中的資料,讓您使用客戶自行管理的加密金鑰 (CMEK) 加密資料。

後續步驟