Google Cloud Functions 运算符

先决条件任务

要使用这些运算符,您必须执行一些操作

CloudFunctionDeleteFunctionOperator

使用运算符从 Google Cloud Functions 中删除函数。

有关参数定义,请查看 CloudFunctionDeleteFunctionOperator

使用运算符

tests/system/providers/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/providers/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/providers/google/cloud/cloud_functions/example_functions.py[源代码]

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

tests/system/providers/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/providers/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/providers/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: 缺少对资源 [email protected] 的必需权限 iam.serviceAccounts.actAs。请授予 roles/iam.serviceAccountUser 角色。”

这意味着您的服务帐号没有正确的 Cloud IAM 权限。

  1. 为您的服务帐号分配 Cloud Functions 开发者角色。

  2. 在 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 源代码存储库中,请确保您的服务帐号具有源代码存储库查看者角色,以便在必要时下载源代码。

更多信息

请参阅 Google Cloud API 文档 创建函数

参考

有关更多信息,请查看

此条目是否有帮助?