從 Workflows 呼叫或叫用 Google Cloud Cloud Run 函式或 Cloud Run 等服務時,會透過 HTTP 要求進行。最常見的 HTTP 要求方法都有呼叫捷徑 (例如 http.get 和 http.post),但您可以將 call
欄位設為 http.request
,並使用 method
欄位指定要求類型,藉此發出任何類型的 HTTP 要求。詳情請參閱「發出 HTTP 要求」。
如要傳送已驗證要求,請按照下列步驟操作:
工作流程必須與已獲授一或多個身分與存取權管理 (IAM) 角色的服務帳戶建立關聯,且這些角色包含必要權限。
您必須在工作流程定義中明確新增驗證資訊。基於安全考量,HTTP 要求預設不會包含身分或存取權權杖。
詳情請參閱「授予工作流程權限,以便存取 Google Cloud 資源」。
何時呼叫服務
您如何判斷何時該使用 Workflows 語法,在 YAML 或 JSON 中建立步驟,以及何時該建立服務 (例如 Cloud Run 服務或 Cloud Run 函式) 來執行工作?
建立服務來執行任何對工作流程而言過於複雜的工作;例如,實作可重複使用的業務邏輯、複雜的運算,或工作流程運算式及其標準程式庫不支援的轉換。複雜案例通常較容易以程式碼實作,而不是使用 YAML 或 JSON 和 Workflows 語法。
叫用僅限內部 Ingress 的服務
工作流程可叫用同一個 Google Cloud 專案中的 Cloud Run 函式或 Cloud Run 服務,但這些函式或服務的連入流量僅限內部流量。採用這項設定後,您的服務將無法從網際網路存取,但可從工作流程存取。
如要套用這些限制,請調整服務或函式的進入設定。請注意,Cloud Run 服務必須透過 run.app
網址連線,而非自訂網域。詳情請參閱限制網路輸入 (適用於 Cloud Run) 和設定網路設定 (適用於 Cloud Run functions)。工作流程不需要其他變更。
使用具備必要權限的服務帳戶
向其他 Google Cloud 服務提出要求時,工作流程必須與具備正確權限的服務帳戶建立關聯,才能存取要求的資源。如要瞭解與現有工作流程相關聯的服務帳戶,請參閱驗證工作流程相關聯的服務帳戶。
設定服務帳戶時,請將要求身分與要授予存取權的資源建立關聯,也就是將要求身分設為資源的主體,然後指派適當的角色。角色會定義身分在資源環境中的權限。
舉例來說,如要將接收端 Cloud Run 函式設定為接受來自特定呼叫函式或服務的要求,您必須將呼叫端的服務帳戶新增為接收端函式的主體,並授予該主體 Cloud Run 函式 Invoker (roles/cloudfunctions.invoker
) 角色。同樣地,如要為 Cloud Run 設定服務帳戶,請將 Cloud Run Invoker (roles/run.invoker
) 角色授予該服務帳戶。詳情請參閱「使用 IAM 控管存取權」或「Cloud Run 驗證總覽」。
叫用 Cloud Run 函式
在 Cloud Run 函式中,您可以管理基礎 Cloud Run 服務,取得叫用權限。如果工作流程要叫用 Cloud Run 函式服務,您不需要將 Cloud Functions 叫用者 (roles/cloudfunctions.invoker
) 角色授予呼叫端的服務帳戶。您必須改為授予 Cloud Run 叫用者 (roles/run.invoker
) 角色。
詳情請參閱比較 Cloud Run 函式。
在工作流程中新增驗證資訊
向 Cloud Run functions 或 Cloud Run 發出要求時,請使用 OIDC 進行驗證。
如要使用 OIDC 發出 HTTP 要求,請在指定網址後,將 auth
區段新增至工作流程定義的 args
區段。在本範例中,系統會傳送要求來叫用 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 目標對象。根據預設,這個值會與 url
相同,但應設為服務的根網址。例如:https://region-project.cloudfunctions.net/hello_world
。
指定回應資料的媒體類型
如果回應的 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 連接器。
如要查看執行 Cloud Run 工作的端對端範例,該工作會處理傳遞至工作做為環境變數的資料,請參閱「使用 Workflows 執行 Cloud Run 工作」。
如需執行 Cloud Run 工作的端對端範例,請參閱執行 Cloud Run 工作,處理 Cloud Storage 中的事件資料。該工作會處理儲存在 Cloud Storage bucket 中的資料,並允許您使用客戶管理的加密金鑰 (CMEK) 加密資料。