このドキュメントでは、Workflows でマネージド接続パイプラインを設定して実行し、サードパーティ ソースから Knowledge Catalog(以前の Dataplex Universal Catalog)にメタデータをインポートする方法について説明します。このパイプラインは、カスタム データソースからメタデータを抽出し、Knowledge 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権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。パイプラインをスケジュールに従って実行する予定がない場合は、Cloud Scheduler API を有効にする必要はありません。
サードパーティ データソースの認証情報を保存するためのシークレットを Secret Manager で作成します。
Managed Service for Apache Spark ワークロードを実行するように Virtual Private Cloud(VPC)ネットワークを構成します。
メタデータ インポート ファイルを保存する Cloud Storage バケットを作成します。
次の Knowledge Catalog リソースを作成します。
インポートするエントリのカスタム アクセプト タイプを作成します。
インポートするエントリのカスタム エントリタイプを作成します。
必要なロール
サービス アカウントはワークフローの ID を表し、ワークフローが持つ権限と、アクセスできる Google Cloud リソースを定めます。Workflows 用サービス アカウント(パイプラインを実行するため)と Managed Service for Apache Spark 用サービス アカウント(コネクタを実行するため)が必要です。
Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@)を使用するか、独自のサービス アカウントを作成して、マネージド接続パイプラインを実行できます。
コンソール
Google Cloud コンソールで、[IAM] ページに移動します。
メタデータをインポートするプロジェクトを選択します。
[アクセスを許可] をクリックし、サービス アカウントのメールアドレスを入力します。
サービス アカウントに次のロールを割り当てます。
- ログ書き込み
- Dataplex エントリ グループ オーナー
- Dataplex メタデータ ジョブ オーナー
- Dataplex Catalog 編集者
- Dataproc 編集者
- Dataproc ワーカー
- Secret Manager のシークレット アクセサー - 対象: データソースの認証情報を保存するシークレット
- Storage オブジェクト ユーザー - 対象: メタデータ インポート ファイルを保存する Cloud Storage バケット
- Artifact Registry 読み取り - 対象: コネクタ イメージを含む Artifact Registry リポジトリ
- サービス アカウント ユーザー - 異なるサービス アカウントを使用する場合は、Workflows を実行するサービス アカウントに、Managed Service for Apache Spark バッチジョブを実行するサービス アカウントに対するこのロールを付与します。
- ワークフロー起動元 - パイプラインをスケジュールする場合
変更を保存します。
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: データソースの認証情報を保存するシークレットの 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
メタデータをインポートする
メタデータをインポートするには、マネージド接続パイプラインを実行するワークフローを作成して実行します。必要に応じて、パイプラインの実行スケジュールを作成することもできます。
コンソール
ワークフローを作成します。次の情報を入力します。
- サービス アカウント: このドキュメントの必要なロールで構成したサービス アカウント。
暗号化: [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 0 * * *を使用します。
-
パイプラインをオンデマンドで実行するには、ワークフローを実行します。
ワークフロー引数は JSON 形式ですが、エスケープされていません。
インポートするメタデータの量によっては、ワークフローの実行に数分以上かかることがあります。進行状況を確認する方法の詳細については、ワークフローの実行結果にアクセスするをご覧ください。
パイプラインの実行が完了したら、インポートしたメタデータを Knowledge Catalog で検索できます。
Terraform
cloud-dataplexリポジトリのクローンを作成します。このリポジトリには、次の 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 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.tfvarsCONNECTOR_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 のログをクエリするとメタデータ ジョブログをクエリするをご覧ください。
- パイプラインを使用してエントリをインポートできず、エラー メッセージに十分な情報がない場合は、同じ詳細情報を持つカスタム エントリをテスト用エントリ グループに作成してみてください。詳細については、カスタム エントリを作成するをご覧ください。