借助 Workflows 中的托管式连接流水线,您可以从自定义第三方数据源中提取元数据,并将其导入 Knowledge Catalog(原 Dataplex Universal Catalog)。您可以按需或按周期性时间表运行流水线,以使目录保持同步,从而发现、搜索和治理外部资产。
如需详细了解托管式连接,请参阅托管式连接概览。
准备工作
在导入元数据之前,请完成本部分中的任务。
构建连接器
连接器会从您的数据源提取元数据,并生成可由 Knowledge Catalog 导入的元数据导入文件。该连接器是一个可在 Managed Service for Apache Spark 上运行的 Artifact Registry 映像。
构建自定义连接器,用于从第三方来源提取元数据。
如需查看可用作参考模板来构建您自己的连接器的示例连接器,请参阅开发用于元数据导入的自定义连接器。
配置 Google Cloud 资源
-
启用 Workflows、Dataproc、Cloud Storage、Dataplex、Secret Manager、Artifact Registry 和 Cloud Scheduler API(如果尚未启用)。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。如果您不打算按时间表运行流水线,则无需启用 Cloud Scheduler API。
在 Secret Manager 中创建 Secret,以存储第三方数据源的凭证。
配置虚拟私有云 (VPC) 网络以运行 Managed Service for Apache Spark 工作负载。
创建 Cloud Storage 存储桶以存储元数据导入文件。
创建以下 Knowledge Catalog 资源:
所需的角色
服务账号代表工作流的身份,并决定了工作流拥有的权限以及它可以访问的 Google Cloud 资源。您需要一个 Workflows 服务账号(用于运行流水线)和一个 Managed Service for Apache Spark 服务账号(用于运行连接器)。
您可以使用 Compute Engine 默认服务账号 (PROJECT_NUMBER-compute@),也可以创建自己的服务账号来运行托管式连接流水线。
控制台
在 Google Cloud 控制台中,前往 IAM 页面。
选择要导入元数据的目标项目。
点击 授予访问权限,然后输入服务账号的邮箱。
为服务账号分配以下角色:
- Logs Writer
- Dataplex Entry Group Owner
- Dataplex Metadata Job Owner
- Dataplex Catalog Editor
- Dataproc Editor
- Dataproc Worker
- Secret Manager Secret Accessor -针对存储数据源凭证的 Secret
- Storage Object User - 针对 Cloud Storage 存储桶
- Artifact Registry Reader - 针对包含连接器映像的 Artifact Registry 存储库
- Service Account User - 如果使用不同的服务账号,请为运行 Workflows 的服务账号授予此角色,以便其可调用运行 Managed Service for Apache Spark 批量作业的服务账号
- Workflows Invoker - 如果您想安排流水线
保存更改。
gcloud
向服务账号授予角色。运行以下命令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/dataplex.entryGroupOwner gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/dataplex.metadataJobOwner gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/dataplex.catalogEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/dataproc.editor gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/dataproc.worker替换以下内容:
-
PROJECT_ID:用于导入元数据的目标 Google Cloud项目名称。 SERVICE_ACCOUNT_ID:服务账号,例如my-service-account@my-project.。
-
在资源级别为该服务账号授予以下角色:
gcloud secrets add-iam-policy-binding SECRET_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/secretmanager.secretaccessor gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_ID" \ --role=roles/storage.objectUser \ --condition=resource.name.startsWith('projects/_/buckets/BUCKET_ID') gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=REPOSITORY_LOCATION \ --member=SERVICE_ACCOUNT_ID} \ --role=roles/artifactregistry.reader替换以下内容:
SECRET_ID:用于存储数据源凭证的 Secret 的 ID。其格式为projects/PROJECT_ID/secrets/SECRET_ID。BUCKET_ID:Cloud Storage 存储桶的名称。REPOSITORY:包含连接器映像的 Artifact Registry 制品库。REPOSITORY_LOCATION:存储库托管所在的 Google Cloud位置。
为运行 Workflows 的服务账号授予运行 Managed Service for Apache Spark 批量作业的服务账号的
roles/iam.serviceAccountUser角色。即使您为 Workflows 和 Managed Service for Apache Spark 使用相同的服务账号,也必须授予此角色。gcloud iam service-accounts add-iam-policy-binding \ serviceAccount:SERVICE_ACCOUNT_ID \ --member='SERVICE_ACCOUNT_ID' \ --role='roles/iam.serviceAccountUser'如果您使用的是不同的服务账号,
--member标志的值就是运行 Managed Service for Apache Spark 批量作业的服务账号。如果您想安排流水线,请为服务账号授予以下角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_ID" \ --role=roles/workflows.invoker
导入元数据
如需导入元数据,请创建并执行一个用于运行托管式连接性流水线的工作流。此流水线会从您的自定义数据源中提取元数据,创建必要的条目组,并将元数据导入 Knowledge Catalog。您还可以为流水线创建一个运行时间表。
控制台
创建工作流。提供以下信息:
- 服务账号:您在本文档的所需角色部分中配置的服务账号。
加密:选择 Google-managed encryption key。
定义工作流:提供以下定义文件:
如需按需运行流水线,请执行工作流。
提供以下运行时参数:
替换以下内容:
-
PROJECT_ID:用于导入元数据的目标 Google Cloud项目名称。 -
LOCATION_ID:Managed Service for Apache Spark 和元数据导入作业的运行位置,也是元数据的导入目标 Google Cloud 位置。 -
ENTRY_GROUP_ID:要导入元数据的条目组 ID。条目组 ID 可以包含小写字母、数字和连字符。此条目组的完整资源名称为
projects/PROJECT_ID/locations/LOCATION_ID/entryGroups/ENTRY_GROUP_ID。 -
CREATE_ENTRY_GROUP_BOOLEAN:如果希望流水线在项目中创建尚未存在的条目组,请将此值设为true。 -
BUCKET_ID:用于存储连接器生成的元数据导入文件的 Cloud Storage 存储桶的名称。每次执行工作流都会创建一个新文件夹。 -
SERVICE_ACCOUNT_ID:您在本文档的所需角色部分中配置的服务账号。服务账号在 Managed Service for Apache Spark 中运行连接器。 -
ADDITIONAL_CONNECTOR_ARGUMENTS:传递给连接器的附加参数列表。如需查看示例,请参阅开发用于元数据导入的自定义连接器。请使用双引号将每个参数括起来,并用英文逗号分隔各个参数。 -
CONTAINER_IMAGE:托管在 Artifact Registry 中的连接器自定义容器映像。 -
ENTRY_TYPES:导入范围内的条目类型列表,格式为projects/PROJECT_ID/locations/LOCATION_ID/entryTypes/ENTRY_TYPE_ID。LOCATION_ID必须与您导入元数据的Google Cloud 位置相同,或者是global。 -
ASPECT_TYPES:导入范围内的方面类型列表,格式为projects/PROJECT_ID/locations/LOCATION_ID/aspectTypes/ASPECT_TYPE_ID。LOCATION_ID必须与您导入元数据的Google Cloud 位置相同,或者是global。 -
可选:对于
NETWORK_TAGS参数,请提供网络标记列表。 -
可选:对于
NETWORK_URI参数,请提供连接到数据源的 VPC 网络的 URI。如果您提供了网络,请省略子网参数。 -
可选:对于
SUBNETWORK_URI参数,请提供连接到数据源的子网 URI。如果您提供了子网,请省略网络参数。
根据导入的元数据量不同,运行流水线可能需要几分钟或更长时间。如需详细了解如何查看进度,请参阅访问工作流执行结果。
流水线运行完毕后,您可以在 Knowledge Catalog 中搜索导入的元数据。
-
可选:如果您想按计划运行流水线,请使用 Cloud Scheduler 创建时间表。提供以下信息:
- 频率:用于定义流水线运行时间表的 Unix-cron 表达式。
- 工作流参数:连接器的运行时参数,如上一步中所述。
- 服务账号:服务账号。该服务账号用于管理调度器。
gcloud
将以下工作负载定义保存为 YAML 文件:
定义 Bash 变量,创建工作流,并酌情创建运行时间表以运行流水线:
替换以下内容:
-
PROJECT_ID:用于导入元数据的目标 Google Cloud项目名称。 -
LOCATION_ID:Managed Service for Apache Spark 和元数据导入作业的运行位置,也是元数据的导入目标 Google Cloud 位置。 -
SERVICE_ACCOUNT_ID:您在本文档的所需角色部分中配置的服务账号。 WORKFLOW_DEFINITION_FILE:工作流定义 YAML 文件的路径。WORKFLOW_NAME:工作流的名称。WORKFLOW_ARGUMENTS:要传递给连接器的运行时参数。参数采用 JSON 格式:对于 Cloud Scheduler,带英文引号的字符串中的英文双引号使用反斜杠 (\) 进行转义。例如:
--message-body="{\"argument\": \"{\\\"key\\\": \\\"value\\\"}\"}"。替换以下内容:
-
ENTRY_GROUP_ID:要导入元数据的条目组 ID。条目组 ID 可以包含小写字母、数字和连字符。此条目组的完整资源名称为
projects/PROJECT_ID/locations/LOCATION_ID/entryGroups/ENTRY_GROUP_ID。 -
CREATE_ENTRY_GROUP_BOOLEAN:如果希望流水线在项目中创建尚未存在的条目组,请将此值设为true。 -
BUCKET_ID:用于存储连接器生成的元数据导入文件的 Cloud Storage 存储桶的名称。每次执行工作流都会创建一个新文件夹。 -
ADDITIONAL_CONNECTOR_ARGUMENTS:传递给连接器的附加参数列表。如需查看示例,请参阅开发用于元数据导入的自定义连接器。 -
CONTAINER_IMAGE:托管在 Artifact Registry 中的连接器自定义容器映像。 -
ENTRY_TYPES:导入范围内的条目类型列表,格式为projects/PROJECT_ID/locations/LOCATION_ID/entryTypes/ENTRY_TYPE_ID。LOCATION_ID必须与您导入元数据的Google Cloud 位置相同,或者是global。 -
ASPECT_TYPES:导入范围内的方面类型列表,格式为projects/PROJECT_ID/locations/LOCATION_ID/aspectTypes/ASPECT_TYPE_ID。LOCATION_ID必须与您导入元数据的Google Cloud 位置相同,或者是global。 -
可选:对于
NETWORK_TAGS参数,请提供网络标记列表。 -
可选:对于
NETWORK_URI参数,请提供连接到数据源的 VPC 网络的 URI。如果您提供了网络,请省略子网参数。 -
可选:对于
SUBNETWORK_URI参数,请提供连接到数据源的子网 URI。如果您提供了子网,请省略网络参数。
-
CRON_SCHEDULE_EXPRESSION:用于定义流水线运行时间表的 cron 表达式。例如,如需每天在午夜运行时间表,请使用表达式0 0 * * *。
-
如需按需运行流水线,请执行工作流:
工作流参数采用 JSON 格式,但未进行转义。
根据导入的元数据量不同,工作流运行可能需要几分钟或更长时间。如需详细了解如何查看进度,请参阅访问工作流执行结果。
流水线运行完毕后,您可以在 Knowledge Catalog 中搜索导入的元数据。
Terraform
-
该代码库包含以下 Terraform 文件:
main.tf:定义要创建的 Google Cloud 资源。variables.tf:声明变量。byo-connector.tfvars:定义托管式连接流水线的变量。
修改
.tfvars文件,将占位符替换为连接器的信息。替换以下内容:
-
PROJECT_ID:用于导入元数据的目标 Google Cloud项目名称。 -
LOCATION_ID:Managed Service for Apache Spark 和元数据导入作业的运行位置,也是元数据的导入目标 Google Cloud 位置。 -
SERVICE_ACCOUNT_ID:您在本文档的所需角色部分中配置的服务账号。 -
CRON_SCHEDULE_EXPRESSION:用于定义流水线运行时间表的 cron 表达式。例如,如需每天在午夜运行时间表,请使用表达式0 0 * * *。 -
ENTRY_GROUP_ID:要导入元数据的条目组 ID。条目组 ID 可以包含小写字母、数字和连字符。此条目组的完整资源名称为
projects/PROJECT_ID/locations/LOCATION_ID/entryGroups/ENTRY_GROUP_ID。 -
CREATE_ENTRY_GROUP_BOOLEAN:如果希望流水线在项目中创建尚未存在的条目组,请将此值设为true。 -
BUCKET_ID:用于存储连接器生成的元数据导入文件的 Cloud Storage 存储桶的名称。每次执行工作流都会创建一个新文件夹。 -
ADDITIONAL_CONNECTOR_ARGUMENTS:传递给连接器的附加参数列表。如需查看示例,请参阅开发用于元数据导入的自定义连接器。请使用双引号将每个参数括起来,并用英文逗号分隔各个参数。 -
CONTAINER_IMAGE:托管在 Artifact Registry 中的连接器自定义容器映像。 -
ENTRY_TYPES:导入范围内的条目类型列表,格式为projects/PROJECT_ID/locations/LOCATION_ID/entryTypes/ENTRY_TYPE_ID。LOCATION_ID必须与您导入元数据的Google Cloud 位置相同,或者是global。 -
ASPECT_TYPES:导入范围内的方面类型列表,格式为projects/PROJECT_ID/locations/LOCATION_ID/aspectTypes/ASPECT_TYPE_ID。LOCATION_ID必须与您导入元数据的Google Cloud 位置相同,或者是global。 -
可选:对于
NETWORK_TAGS参数,请提供网络标记列表。 -
可选:对于
NETWORK_URI参数,请提供连接到数据源的 VPC 网络的 URI。如果您提供了网络,请省略子网参数。 -
可选:对于
SUBNETWORK_URI参数,请提供连接到数据源的子网 URI。如果您提供了子网,请省略网络参数。
-
初始化 Terraform:
terraform init使用
.tfvars文件验证 Terraform:terraform plan --var-file=CONNECTOR_VARIABLES_FILE.tfvars将
CONNECTOR_VARIABLES_FILE替换为变量定义文件的名称。使用
.tfvars文件部署 Terraform:terraform apply --var-file=CONNECTOR_VARIABLES_FILE.tfvarsTerraform 会在指定项目中创建工作流和 Cloud Scheduler 作业。Workflows 会按照您指定的时间表运行流水线。
根据导入的元数据量不同,工作流运行可能需要几分钟或更长时间。如需详细了解如何查看进度,请参阅访问工作流执行结果。
流水线运行完毕后,您可以在 Knowledge Catalog 中搜索导入的元数据。
查看作业日志
使用 Cloud Logging 查看托管式连接流水线的日志。日志载荷包含指向 Managed Service for Apache Spark 批量作业和元数据导入作业的日志链接(如适用)。如需了解详情,请参阅查看工作流日志。
问题排查
请按照以下问题排查建议操作:
- 为元数据作业配置导入作业日志级别,以使用调试级日志记录,而不是信息级日志记录。
- 查看 Managed Service for Apache Spark 批量作业(适用于连接器运行)和元数据导入作业的日志。如需了解详情,请参阅查询 Managed Service for Apache Spark 日志和查询元数据作业日志。
- 如果某个条目无法通过流水线导入,并且错误消息未提供足够的信息,请尝试在测试条目组中创建具有相同详细信息的自定义条目。如需了解详情,请参阅创建自定义条目。