Google Cloud Functions Operators

前提任務

要使用這些 operators,您必須執行以下幾項操作

CloudFunctionDeleteFunctionOperator

使用此 operator 從 Google Cloud Functions 中刪除函式。

有關引數定義,請參閱 CloudFunctionDeleteFunctionOperator

使用此 operator

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

使用此 operator 將函式部署到 Google Cloud Functions。如果同名函式已存在,則會進行更新。

有關引數定義,請參閱 CloudFunctionDeployFunctionOperator

引數

建立 DAG 時,可以使用 default_args 字典傳遞與其他任務通用的引數

tests/system/google/cloud/cloud_functions/example_functions.py

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

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

此外,default_args 或直接的 operator 引數可能包含 zip_path 引數,以便在部署前執行上傳原始碼的額外步驟。在這種情況下,您還需要在 body 中提供一個空的 sourceUploadUrl 引數。

使用此 operator

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

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")

建立 operator 的程式碼

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 的情況下建立 operator - 專案 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 Developer 角色分配給您的服務帳號。

  2. 授予使用者 Cloud IAM Service Account User 角色給 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 文件以建立函式

參考

有關更多資訊,請參閱

此條目是否有幫助?