0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SageMaker Unified Studio】 Glue テーブルに対してアセットを作成する

0
Posted at

はじめに

本記事は、AWS CLI を使って Glue テーブルからアセットを作成する具体的な手順(データソース作成 → データソースラン実行 → アセット確認)をまとめたハンズオン記事です。

そもそも「アセット」とは何か、ドメイン・プロジェクト・アセットの関係性、なぜアセットが必要なのかといった概念については、以下の記事で解説しています。

👉 SageMaker Unified Studio におけるデータ活用・ガバナンスの肝「アセット」を深掘りしてみる

この記事で記載していること

  • AWS CLI を使って Glue テーブルからアセットを作成する具体的な手順(データソース作成 → データソースラン実行 → アセット確認)
  • アセット作成に必要な Lake Formation の前提設定と権限

前提知識

  • AWS の基本的な操作(IAM、AWS CLI)
  • Glue Data Catalog(データベース / テーブル)の基礎知識
  • Lake Formation の概要(権限管理の考え方)を知っていると理解がスムーズです

前提条件

  • SageMaker Unified Studio ドメイン(IdC ベース / V2)が作成済み
  • 対象プロジェクトが存在し、Glue 接続(connection)が設定済み
  • 対象の Glue テーブルが Glue Data Catalog に存在
  • 対象の Glue データベース・テーブル、および S3 Location が Lake Formation の権限管理下にあること

Lake Formation の権限管理下に置く

SageMaker Unified Studio プロジェクト外部の Glue データベースのテーブルをアセットとしてパブリッシュ・サブスクリプションするには、以下を Lake Formation の権限管理下に設定する必要があります。

Configure the Amazon S3 location for your data lake in AWS Lake Formation with Lake Formation permission mode or Hybrid access mode.

Configure Lake Formation permissions for Amazon SageMaker Unified Studio

具体的には以下の設定が必要です。

設定項目 内容
S3 Location の登録 Glue テーブルのデータが格納されている S3 パスを Lake Formation に「データレイクロケーション」として登録する(Permission mode: Lake Formation または Hybrid
IAMAllowedPrincipals の取り消し 対象データベース・テーブルの IAMAllowedPrincipals グループ権限を取り消し、Lake Formation による細粒度アクセス制御を有効化する

The Glue database must be Lake Formation managed. The Glue table must be Lake Formation managed.

Get started with importing and querying data sets for AWS Glue Data Catalog and Amazon S3 in Amazon SageMaker Unified Studio

事前確認: プロジェクトの Glue 接続 ID を取得

データソース作成時に --connection-identifier で指定する Glue 接続 ID を確認します。接続はプロジェクト作成時に自動生成されます。

aws datazone list-connections \
  --domain-identifier <ドメインID> \
  --project-identifier <プロジェクトID> \
  --region ap-northeast-1

"type": "GLUE"connectionId を控えておきます。

必要な Lake Formation 権限

プロジェクトの IAM ロール(datazone_usr_role_<プロジェクトID>_<サフィックス>)に対して、以下の Lake Formation 権限が必要です。

最小権限(データソース作成 + クエリ実行)

レベル 必要な権限
データベース DESCRIBE
テーブル DESCRIBE, SELECT

フル権限(+ サブスクリプションで他プロジェクトへ共有する場合)

レベル 必要な権限
データベース DESCRIBE, DESCRIBE_GRANTABLE
テーブル DESCRIBE, SELECT, DESCRIBE_GRANTABLE, SELECT_GRANTABLE

権限付与コマンド

データベースレベル:

aws lakeformation grant-permissions \
  --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::<AWSアカウントID>:role/datazone_usr_role_<プロジェクトID>_<サフィックス>"}' \
  --resource '{"Database": {"CatalogId": "<AWSアカウントID>", "Name": "<Glueデータベース名>"}}' \
  --permissions '["DESCRIBE"]' \
  --permissions-with-grant-option '["DESCRIBE"]' \
  --region ap-northeast-1

テーブルレベル:

aws lakeformation grant-permissions \
  --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::<AWSアカウントID>:role/datazone_usr_role_<プロジェクトID>_<サフィックス>"}' \
  --resource '{"Table": {"CatalogId": "<AWSアカウントID>", "DatabaseName": "<Glueデータベース名>", "Name": "<テーブル名>"}}' \
  --permissions '["DESCRIBE", "SELECT"]' \
  --permissions-with-grant-option '["DESCRIBE", "SELECT"]' \
  --region ap-northeast-1

プロジェクトの IAM ロール名は get-data-source の結果に含まれる dataAccessRole で確認できます。

全体フロー

1. create-data-source   → データソース定義を作成
2. get-data-source      → ステータスが READY になったことを確認
3. start-data-source-run → Glue テーブルのメタデータをスキャン
4. get-data-source-run  → ステータスが SUCCESS になったことを確認
5. search (ASSET)       → アセットが作成されたことを確認

手順

Step 1: データソースの作成

aws datazone create-data-source \
  --domain-identifier <ドメインID> \
  --project-identifier <プロジェクトID> \
  --name "<データソース名>" \
  --type GLUE \
  --connection-identifier <接続ID> \
  --configuration '{
    "glueRunConfiguration": {
      "catalogName": "<AWSアカウントID>",
      "autoImportDataQualityResult": true,
      "relationalFilterConfigurations": [{
        "databaseName": "<Glueデータベース名>",
        "filterExpressions": [{
          "type": "INCLUDE",
          "expression": "<テーブル名>"
        }]
      }]
    }
  }' \
  --recommendation '{"enableBusinessNameGeneration": false}' \
  --enable-setting ENABLED \
  --no-publish-on-import \
  --region ap-northeast-1

出力例:

{
    "id": "dtp3ka0l89zz15",
    "status": "CREATING"
}

主要パラメータの説明

パラメータ 説明
--domain-identifier DataZone ドメイン ID(dzd-xxxxx
--project-identifier アセットを所属させるプロジェクト ID
--connection-identifier Glue 接続の ID(プロジェクト作成時に自動生成される)
catalogName AWS アカウント ID
databaseName Glue データベース名
filterExpressions 取り込むテーブルのフィルタ(* で全テーブル)
--no-publish-on-import アセット作成時にカタログへ自動パブリッシュしない
enableBusinessNameGeneration AI によるビジネス名自動生成の有無

今回は検証のためにオンデマンドで start-data-source-run を実行しますが、--schedule を設定することで、定期的に実行してスキーマの更新等も可能です。

Step 2: データソースのステータス確認

aws datazone get-data-source \
  --domain-identifier <ドメインID> \
  --identifier <Step1で取得したデータソースID> \
  --region ap-northeast-1

成功時の出力(抜粋):

{
    "id": "dtp3ka0l89zz15",
    "status": "READY",
    "type": "GLUE",
    "name": "<データソース名>",
    "configuration": {
        "glueRunConfiguration": {
            "catalogName": "<AWSアカウントID>",
            "relationalFilterConfigurations": [{
                "databaseName": "<Glueデータベース名>",
                "filterExpressions": [{"type": "INCLUDE", "expression": "<テーブル名>"}]
            }],
            "autoImportDataQualityResult": true
        }
    },
    "publishOnImport": false,
    "lastRunAssetCount": 0
}

"status": "READY" になっていれば成功です。

Step 3: データソースランの実行

aws datazone start-data-source-run \
  --domain-identifier <ドメインID> \
  --data-source-identifier <データソースID> \
  --region ap-northeast-1

出力例:

{
    "id": "5173nxdn633hnd",
    "status": "REQUESTED"
}

Step 4: データソースランの結果確認

aws datazone get-data-source-run \
  --domain-identifier <ドメインID> \
  --identifier <Step3で取得したランID> \
  --region ap-northeast-1

成功時の出力(抜粋):

{
    "id": "5173nxdn633hnd",
    "status": "SUCCESS",
    "runStatisticsForAssets": {
        "added": 1,
        "updated": 0,
        "unchanged": 0,
        "failed": 0
    },
    "lineageSummary": {
        "importStatus": "SUCCESS"
    }
}

"status": "SUCCESS" かつ "added": 1 であればアセット作成完了です。

Step 5: 作成されたアセットの確認

aws datazone search \
  --domain-identifier <ドメインID> \
  --owning-project-identifier <プロジェクトID> \
  --search-scope ASSET \
  --search-text "<テーブル名>" \
  --region ap-northeast-1

出力例:

{
    "items": [
        {
            "assetItem": {
                "identifier": "6b8qjy97lm9qxl",
                "name": "<テーブル名>",
                "typeIdentifier": "amazon.datazone.GlueTableAssetType",
                "externalIdentifier": "arn:aws:glue:ap-northeast-1:<AWSアカウントID>:table/<データベース名>/<テーブル名>.<プロジェクトID>",
                "createdBy": "SYSTEM",
                "owningProjectId": "<プロジェクトID>"
            }
        }
    ],
    "totalMatchCount": 1
}

次のステップ

アセットには以下のビジネスコンテキストを付与することが出来ます。

レベル フィールド 説明
アセット Business Name(ビジネス名) テクニカル名とは別に設定する表示名。検索結果に直接表示される
アセット Description (summary) アセットの説明文(自由記述)
アセット README Markdown形式の詳細ドキュメント
アセット グロサリー ビジネス用語の紐付け
アセット メタデータフォーム カスタム属性(キー・バリュー)
カラム Business Name(ビジネス名) カラムのテクニカル名とは別の表示名
カラム Description カラムの説明文
カラム README カラムレベルのMarkdownドキュメント
カラム グロサリー カラムへのビジネス用語の紐付け
カラム メタデータフォーム カラムへのカスタム属性

パブリッシュすることで Unified Studio ドメイン全体のユーザーが当該アセットを検索・発見可能になります。

データソースランとビジネスメタデータの関係

ちなみに、データソースランを再実行すると、Glue カタログからテクニカルメタデータ (スキーマ、Glue カタログ側のカラムに対するコメント等) が再取得されますが、DataZone 側で管理されるビジネスメタデータは全てデータソースランの影響を受けません。

UI からの確認

CLI でのデータソースラン完了後、SageMaker Unified Studio の UI からもアセットが作成されていることを確認できました。

  1. 左側ハンバーガーメニューの一番下 管理->アセットを選択
  2. アセットを検索 の検索窓にGlueテーブル名を入力
  3. 作成されたアセットが表示される

SageMaker Unified Studio アセット詳細画面

なお、create-data-source 実行時に--no-publish-on-importを記述しているため、当該アセットは未パブリッシュの状態です。
画面右上のアセットを公開を押下することでパブリッシュ可能です。
アセット詳細画面では以下が確認できます:

  • ビジネスメタデータタブ — 概要、README、用語集の用語、メタデータフォームの確認・編集
  • メタデータフォーム「AWS Glue テーブル」 — Glue データカタログ ID、データベース名、場所、リージョン、テーブル ARN 等がデータソースランにより自動設定
  • 右ペイン(アセットの詳細) — 所有プロジェクト、ドメインユニット、サブスクリプションの承認設定、最終更新者(SYSTEM)、作成日時等

次の記事

別の記事ではアセットに付与できるビジネスコンテキスト、AWS CLIでの付与方法について紹介しています。

👉 Data Agent 活用の観点で SageMaker Unified Studio のアセットに付与すべきビジネスコンテキストと優先度

👉 SageMaker Unified Studio アセットにビジネスメタデータをAWS CLIから付与する

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?