3
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?

AWS Community BuildersAdvent Calendar 2024

Day 16

SageMaker Unified Studio から S3 Metadata をクエリする

Last updated at Posted at 2024-12-25

本記事は AWS Community Builders Advent Calendar 2024 16 日目の記事です。(大遅刻してすみません。。)

はじめに

本記事では SageMaker Unified Studio から S3 メタデータへクエリする方法や代表的なクエリ例を紹介します。

SageMaker Unified Studio や S3 Metadata、S3 Tables の AWS 分析サービスとの統合は 2024/12/25 時点で Preview として提供されています。将来的に動作や仕様が変更される可能性があります。

S3 Metadata とは

Amazon S3 Metadata は AWS re:Invent 2024 で発表された新機能です。

image.png

S3 Metadata を有効化すると、S3 バケットにアップロードされたオブジェクトのメタデータが自動で取得され、S3 Tables に格納されます。これにより Athena や Redshift、EMR 上の Apache Spark などの Iceberg 互換のクエリエンジンからメタデータへアクセスできるようになります。

S3 Metadata のユースケース

re:Invent 2024 のブレイクアウトセッション STG212: What’s new with Amazon S3 で次のような代表的なユースケースが紹介されていました。

image.png
STG212: What’s new with Amazon S3 より引用

  • Find objects to process
    処理対象のオブジェクトを特定するために、例えばあるプレフィックスをもつオブジェクトの一覧を SQL で検索する。 (これ自体は S3 の List API でもできるが、SQL で柔軟にクエリできるメリットがある)
  • Underdtand and track data lineage
    オブジェクト情報のトラック: ファイルのアップロードや削除の操作のたびに時間やソースIPなどが記録され、その履歴を検索できるのでデータリネージ的な使い方もできる。
  • Learn abount storage usage
    S3のストレージの使用状況について SQL で詳細に分析する。

これらを実際にクエリして試してみたいと思います。

S3 Metadata の設定

テーブルバケットの作成

S3 Metadata を格納するためのテーブルバケットを作成します。プレビュー開始時点でバージニア北部、オハイオ、オレゴンリージョンでのみ作成できます。

S3 コンソールのメニューからテーブルバケットに進みます。初回アクセス時のみ AWS 分析サービスとの統合を有効にする必要があります。

image.png

確認画面で「統合を有効にする」をクリックします。

image.png

統合が有効になったら「テーブルバケットを作成」をクリックします。

image.png

任意のテーブルバケット名を入力して作成を完了します。

image.png

S3 Metadata を設定する

Metadata の収集対象となる任意の汎用バケットを作成します。既存の S3 バケットでも問題ありません。

image.png

メタデータ というタブが追加されているので「メタデータ設定を作成」をクリックします。

image.png

送信先として先ほどのテーブルバケットを選択します。メタデータテーブル名は自動入力されますが、カスタマイズも可能です。

image.png

以下のように表示されれば設定完了です。

image.png

テーブルバケットにもテーブルが作成されていることがわかります。

image.png

汎用バケットにいくつかのオブジェクトをアップロードしたり、削除したりしてメタデータ記録させておきましょう。

SageMaker Unified Studio の操作

SageMaker Unified Studio 環境の構築

ドメインの作成と Unified Studio へのログイン、プロジェクトの作成手順を以下の記事で紹介しています。そのため本記事では割愛します。

カタログに対する権限設定

Lake Formation コンソールに新しく作成されている Catalogs というメニューに移動すると、s3tablecatalog という Federated カタログが作成されています。これは S3 Tables と AWS 分析サービスとの統合を有効化した際に作成されたものです。

SageMaker Lakehouse で利用できるテクニカルカタログには Managed カタログと Federated カタログの 2 種類があります。既存のリソースを Lakehouse 経由で参照する際に Federated カタログが使用されます。

image.png

Unified Studio から S3 Metadata を参照するにはプロジェクトのプロジェクトロールに、S3 Tables の Federated カタログに対する権限を設定する必要があります。

Amazon Redshift や EMR 等の AWS サービスから S3 Tables のリソースにアクセスするには、別途 Lake Formation でリソースリンクの作成が必要とドキュメントに記載されています。今回は Athena でクエリを行うため、Fedreated カタログに対し直接権限を割り当てます。

To access your tables, some AWS analytics services need a resource link that targets your table's namespace.

After the AWS integration, you create resource links to work with your tables in the following services:

  • Amazon Redshift
  • Amazon Data Firehose
  • Amazon EMR

カタログはテーブルバケット単位でサブカタログとして階層化されています。このサブカタログ単位で権限を追加していくこともできますが、ここではルートカタログ (s3tablecatalog) に対し追加します。

Permissions タブをクリックします。

image.png

デフォルトでカタログを作成した IAM に対する権限が与えられているはずです。Grant をクリックして権限を追加します。

image.png

IAM users and roles で Unified Studio で作成したプロジェクトのプロジェクトロール (datazone_usr_role_xxxxxxxxxxxxx_xxxxxxxxxxxxxx) を選択します。

image.png

対象のカタログリソースを明示的に指定します。Named Data Catalog resources を選択し、Catalogs で<account-id>:s3tablecatalog を選びます。

image.png

Catalog permissions では Super user を選択して、権限を追加します。

image.png

Lakehouse 経由で Athena からクエリを実行

SageMaker Unified Studio のプロジェクト → データを選択すると Lakehouse から s3tablecatalog が参照できるようになっているはずです。サブカタログ (テーブルバケット名) → aws_s3_metadata → メタデータテーブル名を選択するとテーブル定義等が確認できます。メタデータテーブルから Query with Athena をクリックします。

image.png

自動的に select 文が発行され、S3 Metadata の内容を取得できました。

image.png

クエリは SageMaker Unified Studio プロジェクト作成時に自動作成された Athena Workgroup で実行されます

冒頭のユースケース例に沿ったクエリをいくつか実行してみます。

特定のプレフィックスを持ったオブジェクトを抽出

-- 特定のプレフィックスを持ったオブジェクトを抽出
SELECT 
    bucket, 
    key, 
    storage_class
FROM 
    "s3tablescatalog/kosu-table-bucket-for-s3-metadata"."aws_s3_metadata"."s3metadata_kosu_bucket_for_s3_metadata_test" 
WHERE 
    key LIKE '2024-12-25%';

結果:
image.png

削除オペレーションの抽出

-- 削除オペレーションの抽出
SELECT DISTINCT 
    bucket, 
    key, 
    record_type, 
    record_timestamp, 
    requester, 
    source_ip_address
FROM 
    "s3tablescatalog/kosu-table-bucket-for-s3-metadata"."aws_s3_metadata"."s3metadata_kosu_bucket_for_s3_metadata_test" 
WHERE 
    record_type = 'DELETE';
    

結果:
image.png

ストレージ使用量の算出

-- ストレージ使用量の算出
SELECT 
    storage_class, 
    COUNT(*) AS count,
    SUM(size) / 1024 / 1024 AS usage_mb
FROM 
    "s3tablescatalog/kosu-table-bucket-for-s3-metadata"."aws_s3_metadata"."s3metadata_kosu_bucket_for_s3_metadata_test"
WHERE 
    storage_class IS NOT NULL
GROUP BY 
    storage_class;

結果:
image.png

バケット名、オブジェクトキー、オブジェクトタグ、作成/更新時刻、ストレージクラス、暗号化ステータスなど、21 種類のシステムメタデータを活用できます。メタデータテーブルのスキーマは以下に記載されています。

アセットの公開はできない?

プロジェクトやドメインの設定、データの公開、購読など DataZone のガバナンス機能が SageMaker Unified Studio の一部として統合されています。

S3 Meatadata をアセットとして公開し、別プロジェクトから購読するという一連のデータ共有についても試してみたかったのですが、結論から言うとできませんでした。

メタデータテーブルを選択し、アクションの一覧を表示すると 「Publisch to catalog」 (SageMaker Catalog への公開) がグレーアウトされていることがわかります。

image.png

S3 Tables がアセットの公開をサポートしていないのか、権限回りの設定が不足しているのか不明だったため、こちらは引き続き調査したいと思います。

以上です。
参考になれば幸いです。

3
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
3
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?