【Amazon S3 metadata】GAされたS3 metadataを立ち上げからテーブル削除まで触ってみた

【Amazon S3 metadata】GAされたS3 metadataを立ち上げからテーブル削除まで触ってみた

Clock Icon2025.01.31

データ事業本部の川中子(かわなご)です。

今までInformaticaの記事しか書いていませんでしたが、今回はAWSのS3 metadataについてです。
つい最近GAされたばかりの機能でとてもホットな話題だったので、
「乗るしかない、このビッグウェーブに」 という想いでS3 metadataを触ってみました。

S3 metadataがGAされたニュースはこちら。機能概要についても記載があります。
https://aws.amazon.com/jp/about-aws/whats-new/2025/01/amazon-s3-metadata-generally-available/

まだ東京リージョンではGAされていないため、現時点では以下リージョンでの利用、検証になります。

  • 米国東部(バージニア北部)
  • 米国東部(オハイオ)
  • 米国西部(オレゴン)

料金などについては以下の記事でも触れられているので、併せてご確認下さい。
https://dev.classmethod.jp/articles/ga-amazon-s3-metadata/

まずはバケットを準備する

とりあえず検証用に汎用バケットを1つ作成してみます。
なお今回はオレゴンリージョンを利用しました。

cm-kawanago-meta-test-aという名前で汎用バケットを作成します。
作成したバケットの詳細を見てみると、上部に新しく「メタデータ」というタブが追加されていました。
スクリーンショット 2025-01-31 9.42.11

「メタデータ」タブに移り、メタデータ設定を作成を押下するとテーブルバケットの設定になります。
スクリーンショット 2025-01-31 9.45.30

紐づけたいテーブルバケットが既に作成されている場合はS3の参照から設定が可能ですが、
今回はテーブルバケットが未作成なのでテーブルバケットを作成から設定を進めます。
なおメタデータテーブル名はs3metadata_{バケット名}で自動補完されますが、名称変更も可能です。

スクリーンショット 2025-01-31 9.45.57

今回はtable-cm-kawanago-meta-testという名前でテーブルバケットを作成します。

スクリーンショット 2025-01-31 9.53.23

作成が成功するとテーブルバケットの画面で一覧が表示されます。

スクリーンショット 2025-01-31 9.53.43

https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html?icmpid=docs_amazons3_console#table-integration-prerequisites

テーブルバケットが作成できたら汎用バケットのページに戻り、
送信先テーブルバケットに先ほど作成したテーブルバケットを指定します。
スクリーンショット 2025-01-31 10.12.10

これで汎用バケットとテーブルバケットの紐づけが完了しました。
スクリーンショット 2025-01-31 10.14.01

Athenaから見てみる

作成したメタデータテーブルをAthenaから見てみます。

ただ私の検証環境では、この時点だとテーブルバケットを閲覧できない状態だったので、
Lake Formationの方から閲覧のための権限設定をしておきます。

LakeFormationの左側メニューからCatalogs New > s3tablescatalogを選択します。
ma7nb1lirpkv8imkmdyj

PermissionsタブからGrantを押下します。
as8snzgtaidahizzlljd

基本はタグを利用した権限管理が推奨されているようですが、
今回は検証用に特定のカタログに対してsuper権限を付けておきます。
スクリーンショット 2025-01-31 10.38.00

ではAthenaからメタデータテーブルにクエリを投げてみます。
結果は空でした。まだ汎用バケットの方にファイルを置いてないので当然ですね。
スクリーンショット 2025-01-31 10.54.07

サンプルのparquetファイルをS3に置いてみます。
(あまりにもイケてないファイル名は見逃して下さい)
スクリーンショット 2025-01-31 10.56.35

この状態でもう一度Athenaからクエリを投げてみると、
parquetファイルを格納した際のイベントが登録されていることが確認できました。
スクリーンショット 2025-01-31 11.06.05

ユーザー定義のメタデータを入れてみる

汎用バケットにファイルを置く際に、ユーザー定義のメタデータを設定してみます。
今回はkeyfacilityに、valuetokyoにしました。
スクリーンショット 2025-01-31 13.21.25

Athenaの方からテーブルを見てみると、user_metadataのカラムに
{facility=tokyo}の形式で格納されました。複数入れた場合はどうなるんでしょうか。
スクリーンショット 2025-01-31 13.30.52

複数のユーザー定義メタデータを入れると、user_metadataカラムにカンマ区切りで格納されました。
スクリーンショット 2025-01-31 14.33.35

汎用バケットを追加してみる

現在テーブルバケットにはテーブルが1つだけ登録されている状態です。
スクリーンショット 2025-01-31 11.10.43

ここで、このテーブルバケットをメタデータ送信先とする汎用バケットを追加してみます。
cm-kawanago-meta-test-bという名前で作成しました。
スクリーンショット 2025-01-31 11.14.25

テーブルバケットの方を確認すると、新しいテーブルが追加されていることが確認できました。
スクリーンショット 2025-01-31 11.15.58

Athenaの方でもテーブルが追加されていました。
スクリーンショット 2025-01-31 11.17.39

この仕様から、特にAthenaなどからデータベースやテーブルを追加で作成したりせず、
メタデータ閲覧のみに使用する場合は、紐づけた汎用バケット分だけテーブルが存在することになりますね。

不要になったテーブルバケットを削除する

今回の検証で不要になったテーブルバケットを削除してみます。
ただ、そのテーブルを消そうと思ったとき...こんな表示が目に入りました。

テーブルバケットを削除するには、AWS CLI、AWS SDK、または Amazon S3 REST API を使用してください。

スクリーンショット 2025-01-31 11.23.49

そうです。
テーブルバケットはマネージドコンソール上から削除することができないのです。
しかも削除方法が結構複雑で、中々削除できずに困っていたところ、以下の記事に助けられました。
https://dev.classmethod.jp/articles/amazon-s3-tables-table-bucket-awsreinvent/

詳細は上記の記事に全て書いてありますが、簡単にまとめると以下のような内容です。

  • S3tablesはTable Buckets > Name Space > Tableの階層で構成されている
  • テーブルバケットを削除する際には、階層の低い方から削除していく必要がある

では実際に今回の検証用に作成したテーブルバケットを削除していきます。

まずはテーブルバケットの一覧から、削除対象のarnを取得します。

aws s3tables list-table-buckets
{
    "tableBuckets": [
        {
            "arn": "arn:aws:s3tables:***************************",
            "name": "table-cm-kawanago-meta-test",
            "ownerAccountId": "************",
            "createdAt": "2025-01-31T00:53:30.603417+00:00"
        }
    ]
}

取得したarnを指定して、テーブルの一覧を取得します。

aws s3tables list-tables\
    --table-bucket-arn arn:aws:s3tables:***************************,
{
    "tables": [
        {
            "namespace": [
                "aws_s3_metadata"
            ],
            "name": "s3metadata_cm_kawanago_meta_test_a",
            "type": "aws",
            "tableARN": "arn:aws:s3tables:***************************",
            "createdAt": "2025-01-31T01:13:40.259020+00:00",
            "modifiedAt": "2025-01-31T02:10:54.885834+00:00"
        },
        {
            "namespace": [
                "aws_s3_metadata"
            ],
            "name": "s3metadata_cm_kawanago_meta_test_b",
            "type": "aws",
            "tableARN": "arn:aws:s3tables:***************************",
            "createdAt": "2025-01-31T02:14:07.056787+00:00",
            "modifiedAt": "2025-01-31T02:14:08.384125+00:00"
        }
    ]
}

それぞれのテーブルについて、削除を実行していきます。(もう一方は省略してます)

aws s3tables delete-table \
    --table-bucket-arn arn:aws:s3tables:*************************** \
    --namespace aws_s3_metadata \
    --name s3metadata_cm_kawanago_meta_test_a

次にNameSpaceを削除します。
今回は特にNameSpaceは追加していないので、aws_s3_metadataを消せばOKです。

aws s3tables delete-namespace \
    --table-bucket-arn arn:aws:s3tables:*************************** \
    --namespace aws_s3_metadata

最後にテーブルバケット自体を削除します。

aws s3tables delete-table-bucket \
    --table-bucket-arn arn:aws:s3tables:***************************

マネージドコンソールの方でも削除されていることが確認できました。
スクリーンショット 2025-01-31 12.00.11

さいごに

S3 metadataを利用するための 手順自体は結構簡単 で、すぐに利用が始められると思いました。
ユーザー定義のメタデータも利用すれば、データの検索性は大幅に向上 しそうです。

反映にかかる時間についてですが、データを置いてからメタデータを確認できるまで、
体感5分程度 は待っていたように思いますが、これは環境による差異があるかも知れません。

難点としては、メタデータテーブルの閲覧の際には Lake Formationの設定 が絡んでくるため、
組織で利用の経験がない場合には、そこがネックになる可能性がありそうです。

また紐づけたバケットごとにテーブルが作成され、メタデータが蓄積されていくため、
メタデータ管理が不要なデータも扱う場合は、バケットを分けて作成するという選択肢 もありそうです。

まだ一部の米国リージョンでしか公開されていない機能ではありますが、
データの検索性に課題を感じている方は、ぜひ利用を検討してみてはいかがでしょうか。

最後まで閲覧頂き、ありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.