Google Cloud Functions 運算子

先決條件任務

若要使用這些運算子,您必須執行以下幾件事

CloudFunctionDeleteFunctionOperator

使用此運算子從 Google Cloud Functions 刪除函式。

如需參數定義,請參閱CloudFunctionDeleteFunctionOperator

使用此運算子

tests/system/google/cloud/cloud_functions/example_functions.py[原始碼]

delete_function = CloudFunctionDeleteFunctionOperator(task_id="delete_function", name=FUNCTION_NAME)

範本

template_fields: Sequence[str] = (
    "name",
    "gcp_conn_id",
    "api_version",
    "impersonation_chain",
)

更多資訊

請參閱 Google Cloud Functions API 文件,以瞭解如何刪除函式

CloudFunctionDeployFunctionOperator

使用此運算子將函式部署至 Google Cloud Functions。如果已存在同名的函式,則會更新。

如需參數定義,請參閱CloudFunctionDeployFunctionOperator

引數

當建立 DAG 時,default_args 字典可用於傳遞與其他任務共用的引數

tests/system/google/cloud/cloud_functions/example_functions.py[原始碼]

default_args: dict[str, Any] = {"retries": 3}

請注意,主體和預設引數都不完整,以上範例亦然。根據設定的變數,傳遞原始碼相關欄位的方式可能有所不同。目前,您可以傳遞 sourceArchiveUrlsourceRepositorysourceUploadUrl,如 Cloud Functions API 規格中所述。

此外,default_args 或直接運算子引數可能包含 zip_path 參數,以執行額外步驟,在部署前上傳原始碼。在此情況下,您也需要在主體中提供空的 sourceUploadUrl 參數。

使用此運算子

根據參數的組合,函式的原始碼可以從不同來源取得

tests/system/google/cloud/cloud_functions/example_functions.py[原始碼]

body = {"name": FUNCTION_NAME, "entryPoint": ENTRYPOINT, "runtime": RUNTIME, "httpsTrigger": {}}

tests/system/google/cloud/cloud_functions/example_functions.py[原始碼]

if SOURCE_ARCHIVE_URL:
    body["sourceArchiveUrl"] = SOURCE_ARCHIVE_URL
elif SOURCE_REPOSITORY:
    body["sourceRepository"] = {"url": SOURCE_REPOSITORY}
elif ZIP_PATH:
    body["sourceUploadUrl"] = ""
    default_args["zip_path"] = ZIP_PATH
elif SOURCE_UPLOAD_URL:
    body["sourceUploadUrl"] = SOURCE_UPLOAD_URL
else:
    raise Exception("Please provide one of the source_code parameters")

建立運算子的程式碼

tests/system/google/cloud/cloud_functions/example_functions.py[原始碼]

deploy_function = CloudFunctionDeployFunctionOperator(
    task_id="deploy_function",
    project_id=PROJECT_ID,
    location=LOCATION,
    body=body,
    validate_body=VALIDATE_BODY,
)

您也可以在不使用專案 ID 的情況下建立運算子 - 專案 ID 將從使用的 Google Cloud 連線中擷取

tests/system/google/cloud/cloud_functions/example_functions.py[原始碼]

deploy_function_no_project = CloudFunctionDeployFunctionOperator(
    task_id="deploy_function_no_project", location=LOCATION, body=body, validate_body=VALIDATE_BODY
)

範本

template_fields: Sequence[str] = (
    "body",
    "project_id",
    "location",
    "gcp_conn_id",
    "api_version",
    "impersonation_chain",
)

疑難排解

如果在部署期間看到類似以下的錯誤訊息

“HttpError 403: Missing necessary permission iam.serviceAccounts.actAs for on resource project-name@appspot.gserviceaccount.com. Please grant the roles/iam.serviceAccountUser role.”

這表示您的服務帳戶沒有正確的 Cloud IAM 權限。

  1. 將 Cloud Functions 開發人員角色指派給您的服務帳戶。

  2. 將 Cloud IAM 服務帳戶使用者角色授予使用者,使其擁有 Cloud Functions 執行階段服務帳戶的權限。

以下顯示使用 gcloud 指派 Cloud IAM 權限的典型方式。只需將 PROJECT_ID 替換為您的 Google Cloud 專案 ID,並將 SERVICE_ACCOUNT_EMAIL 替換為您的服務帳戶電子郵件 ID 即可。

gcloud iam service-accounts add-iam-policy-binding \
  PROJECT_ID@appspot.gserviceaccount.com \
  --member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
  --role="roles/iam.serviceAccountUser"

您也可以透過 Google Cloud Console 執行此操作。

如需詳細資訊,請參閱「將 IAM 服務代理程式使用者角色新增至執行階段服務」

如果您的函式原始碼位於 Google Source Repository 中,請確保您的服務帳戶具有 Source Repository Viewer 角色,以便在必要時可以下載原始碼。

更多資訊

請參閱 Google Cloud API 文件,以瞭解如何建立函式

參考

如需更多資訊,請參閱

這篇文章是否對您有幫助?