Amazon Web Services ブログ

Amazon S3 バケットについてのクエリ可能なオブジェクトメタデータのご紹介 (プレビュー)

AWS のお客様は、Amazon Simple Storage Service (Amazon S3) を信じられないほどの規模で利用し、数十億または数兆のオブジェクトを含む個別のバケットを定期的に作成しています。 その規模では、特定の基準を満たすオブジェクト (パターンに一致するキーを持つオブジェクト、特定のサイズのオブジェクト、特定のタグを持つオブジェクトなど) を見つけることは困難です。お客様は、この情報を取得、保存、およびクエリするシステムを構築する必要がありました。これらのシステムは複雑で、かつ、スケールが困難になる可能性があり、バケットやその中のオブジェクトの実際の状態と同期しなくなる可能性があります。

リッチなメタデータ
12 月 3 日、S3 オブジェクトが追加または変更されたときに取得され、フルマネージド Apache Iceberg テーブルに保存されるメタデータの自動生成がプレビューで有効になりました。これにより、Amazon AthenaAmazon RedshiftAmazon QuickSightApache Spark などの Iceberg 互換ツールを使用して、あらゆる規模でメタデータを簡単かつ効率的にクエリする (および関心のあるオブジェクトを見つける) ことができます。その結果、分析、データ処理、AI トレーニングのワークロードに必要なデータを迅速に見つけることができます。

S3 に保存された動画推論応答の場合、Amazon Bedrock は生成したコンテンツにメタデータでアノテーションします。これにより、コンテンツが AI 生成であることを識別し、生成でどのモデルが使用されたのかを知ることができます。

メタデータスキーマには、バケット名、オブジェクトキー、作成/変更時刻、ストレージクラス、暗号化ステータス、タグ、ユーザーメタデータなど、20 を超える要素が含まれています。また、アプリケーション固有の説明的な追加情報を別のテーブルに保存し、クエリの一部としてメタデータテーブルと結合することもできます。

仕組み
メタデータを保存する場所 (S3 テーブルバケットとテーブル名) を指定することで、任意の S3 バケットについてのリッチなメタデータのキャプチャを有効にできます。更新 (オブジェクトの作成、オブジェクトの削除、およびオブジェクトメタデータの変更) のキャプチャはすぐに開始され、数分以内にテーブルに保存されます。更新ごとに、レコードタイプ (CREATEUPDATE_METADATA、または DELETE) とシーケンス番号を持つ新しい行がテーブルに生成されます。結果をシーケンス番号で並べ替えるクエリを実行することで、特定のオブジェクトの履歴レコードを取得できます。

メタデータの有効化とクエリ
まず、create-table-bucket コマンドを使用してメタデータのためにテーブルバケットを作成します (これは、AWS マネジメントコンソールから、または API コールを使用して実行することもできます)。

$ aws s3tables create-table-bucket --name jbarr-table-bucket-1 --region us-east-2
--------------------------------------------------------------------------------
|                               CreateTableBucket                              |
+-----+------------------------------------------------------------------------+
|  arn|  arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1   |
+-----+------------------------------------------------------------------------+

その後、この JSON をファイル (config.json と呼びます) に入れて、テーブルバケット (ARN を使用) と目的のテーブル名を指定します:

{
  "S3TablesDestination": {
    "TableBucketArn": "arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1",
    "TableName": "jbarr_data_bucket_1_table"
  }
}

それから、この設定をデータバケット (メタデータをキャプチャするバケット) にアタッチします:

$ aws s3tables create-bucket-metadata-table-configuration \
  --bucket jbarr-data-bucket-1 \
  --metadata-table-configuration file://./config.json \
  --region us-east-2

テストの目的で EC2 インスタンスに Apache Spark をインストールし、設定作業を少し行うと、Amazon S3 Tables Catalog for Apache Iceberg パッケージを参照し、メタデータテーブル (mytablebucket として) をコマンドラインに追加することでクエリを実行できました:

$ bin/spark-shell \
--packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \
--jars ~/S3TablesCatalog.jar \
--master yarn \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.mytablebucket=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.mytablebucket.catalog-impl=com.amazon.s3tables.iceberg.S3TablesCatalog" \
--conf "spark.sql.catalog.mytablebucket.warehouse=arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1"

Iceberg テーブルの現在のスキーマを次に示します:

scala> spark.sql("describe table mytablebucket.aws_s3_metadata.jbarr_data_bucket_1_table").show(100,35)

+---------------------+------------------+-----------------------------------+
|             col_name|         data_type|                            comment|
+---------------------+------------------+-----------------------------------+
|               bucket|            string|   The general purpose bucket name.|
|                  key|            string|The object key name (or key) tha...|
|      sequence_number|            string|The sequence number, which is an...|
|          record_type|            string|The type of this record, one of ...|
|     record_timestamp|     timestamp_ntz|The timestamp that's associated ...|
|           version_id|            string|The object's version ID.When yo...|
|     is_delete_marker|           boolean|The object's delete marker statu...|
|                 size|            bigint|The object size in bytes, not in...|
|   last_modified_date|     timestamp_ntz|The object creation date or the ...|
|                e_tag|            string|The entity tag (ETag), which is ...|
|        storage_class|            string|The storage class that's used fo...|
|         is_multipart|           boolean|The object's upload type.If the...|
|    encryption_status|            string|The object's server-side encrypt...|
|is_bucket_key_enabled|           boolean|The object's S3 Bucket Key enabl...|
|          kms_key_arn|            string|The Amazon Resource Name (ARN) f...|
|   checksum_algorithm|            string|The algorithm that's used to cre...|
|          object_tags|map<string,string>|The object tags that are associa...|
|        user_metadata|map<string,string>|The user metadata that's associa...|
|            requester|            string|The AWS account ID of the reques...|
|    source_ip_address|            string|The source IP address of the req...|
|           request_id|            string|The request ID.For records that...|
+---------------------+------------------+-----------------------------------+

最新の 10 件の更新のメタデータの一部を表示する簡単なクエリを次に示します:

scala> spark.sql("SELECT key,size, storage_class,encryption_status \
  FROM mytablebucket.aws_s3_metadata.jbarr_data_bucket_1_table \
  order by last_modified_date DESC LIMIT 10").show(false)
+--------------------+------+-------------+-----------------+                   
|key                 |size  |storage_class|encryption_status|
+--------------------+------+-------------+-----------------+
|wnt_itco_2.png      |36923 |STANDARD     |SSE-S3           |
|wnt_itco_1.png      |37274 |STANDARD     |SSE-S3           |
|wnt_imp_new_1.png   |15361 |STANDARD     |SSE-S3           |
|wnt_imp_change_3.png|67639 |STANDARD     |SSE-S3           |
|wnt_imp_change_2.png|67639 |STANDARD     |SSE-S3           |
|wnt_imp_change_1.png|71182 |STANDARD     |SSE-S3           |
|wnt_email_top_4.png |135164|STANDARD     |SSE-S3           |
|wnt_email_top_2.png |117171|STANDARD     |SSE-S3           |
|wnt_email_top_3.png |55913 |STANDARD     |SSE-S3           |
|wnt_email_top_1.png |140937|STANDARD     |SSE-S3           |
+--------------------+------+-------------+-----------------+

実際の状況では、前述した AWS またはオープンソースの分析ツールのいずれかを使用してテーブルをクエリします。

コンソールアクセス
また、Amazon S3 コンソールを使用して、[メタデータ] タブをクリックすることで、バケットについてのメタデータ設定をセットアップおよび管理できます。

今すぐご利用いただけます
Amazon S3 メタデータは現在プレビューで使用可能で、12 月 3 日より、米国東部 (オハイオ、バージニア北部) および米国西部 (オレゴン) の AWS リージョンで使用を開始できます。

AWS Glue データカタログとの統合は現在プレビューで提供されており、Amazon AthenaAmazon RedshiftAmazon EMRAmazon QuickSight などの AWS の分析サービスを使用して、S3 メタデータテーブルを含むデータをクエリおよび視覚化できます。

料金は更新の数 (オブジェクトの作成、オブジェクトの削除、およびオブジェクトメタデータの変更) に基づいており、メタデータテーブルのストレージには追加料金がかかります。料金の詳細については、「S3 の料金」ページにアクセスしてください。

お客様がこのメタデータを種々の強力な方法で活用できると私は確信しています。皆様のユースケースについてお聞きするのを楽しみにしています。ぜひご意見をお聞かせください!

Jeff;

原文はこちらです。