Google Cloud Functions 运算符¶
先决条件任务¶
要使用这些运算符,您必须执行一些操作
使用Cloud 控制台选择或创建 Cloud Platform 项目。
为您的项目启用结算,如Google Cloud 文档中所述。
启用 API,如Cloud 控制台文档中所述。
通过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: 缺少对资源 [email protected] 的必需权限 iam.serviceAccounts.actAs。请授予 roles/iam.serviceAccountUser 角色。”
这意味着您的服务帐号没有正确的 Cloud IAM 权限。
为您的服务帐号分配 Cloud Functions 开发者角色。
在 Cloud Functions 运行时服务帐号上向用户授予 Cloud IAM 服务帐号用户角色。
下面显示了使用 gcloud
分配 Cloud IAM 权限的典型方式。只需将 PROJECT_ID 替换为 Google Cloud 项目的 ID,并将 SERVICE_ACCOUNT_EMAIL 替换为您的服务帐号的电子邮件 ID。
gcloud iam service-accounts add-iam-policy-binding \
[email protected] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="roles/iam.serviceAccountUser"
您还可以通过 Google Cloud 控制台执行此操作。
有关详细信息,请参阅 将 IAM 服务代理用户角色添加到运行时服务。
如果您的函数的源代码位于 Google 源代码存储库中,请确保您的服务帐号具有源代码存储库查看者角色,以便在必要时下载源代码。