Google Cloud Functions 運算子¶
先決條件任務¶
若要使用這些運算子,您必須執行以下幾件事
使用 Cloud Console 選取或建立 Cloud Platform 專案。
為您的專案啟用計費功能,如 Google Cloud 文件所述。
啟用 API,如 Cloud Console 文件所述。
透過 pip 安裝 API 函式庫。
pip install 'apache-airflow[google]'安裝的詳細資訊請見安裝。
CloudFunctionDeleteFunctionOperator¶
使用此運算子從 Google Cloud Functions 刪除函式。
如需參數定義,請參閱CloudFunctionDeleteFunctionOperator
。
使用此運算子¶
delete_function = CloudFunctionDeleteFunctionOperator(task_id="delete_function", name=FUNCTION_NAME)
範本¶
template_fields: Sequence[str] = (
"name",
"gcp_conn_id",
"api_version",
"impersonation_chain",
)
CloudFunctionDeployFunctionOperator¶
使用此運算子將函式部署至 Google Cloud Functions。如果已存在同名的函式,則會更新。
如需參數定義,請參閱CloudFunctionDeployFunctionOperator
。
引數¶
當建立 DAG 時,default_args 字典可用於傳遞與其他任務共用的引數
default_args: dict[str, Any] = {"retries": 3}
請注意,主體和預設引數都不完整,以上範例亦然。根據設定的變數,傳遞原始碼相關欄位的方式可能有所不同。目前,您可以傳遞 sourceArchiveUrl
、sourceRepository
或 sourceUploadUrl
,如 Cloud Functions API 規格中所述。
此外,default_args
或直接運算子引數可能包含 zip_path
參數,以執行額外步驟,在部署前上傳原始碼。在此情況下,您也需要在主體中提供空的 sourceUploadUrl
參數。
使用此運算子¶
根據參數的組合,函式的原始碼可以從不同來源取得
body = {"name": FUNCTION_NAME, "entryPoint": ENTRYPOINT, "runtime": RUNTIME, "httpsTrigger": {}}
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")
建立運算子的程式碼
deploy_function = CloudFunctionDeployFunctionOperator(
task_id="deploy_function",
project_id=PROJECT_ID,
location=LOCATION,
body=body,
validate_body=VALIDATE_BODY,
)
您也可以在不使用專案 ID 的情況下建立運算子 - 專案 ID 將從使用的 Google Cloud 連線中擷取
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 開發人員角色指派給您的服務帳戶。
將 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 角色,以便在必要時可以下載原始碼。