Google Cloud Functions Operators¶
前提任務¶
要使用這些 operators,您必須執行以下幾項操作
使用 Cloud Console 選擇或建立一個 Cloud Platform 專案。
為您的專案啟用結算功能,詳情請參閱 Google Cloud 文件。
啟用 API,詳情請參閱 Cloud Console 文件。
透過 pip 安裝 API 庫。
pip install 'apache-airflow[google]'詳細資訊請參閱安裝。
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}
請注意,上述示例中的 body 和 default_args 都不完整。根據設定的變數,傳遞原始碼相關欄位的方式可能有所不同。目前,您可以傳遞 sourceArchiveUrl、sourceRepository 或 sourceUploadUrl,如 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 許可權。
將 Cloud Functions Developer 角色分配給您的服務帳號。
授予使用者 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 文件以建立函式。
參考¶
有關更多資訊,請參閱