【Amazon S3 metadata】GAされたS3 metadataを立ち上げからテーブル削除まで触ってみた
データ事業本部の川中子(かわなご)です。
今までInformaticaの記事しか書いていませんでしたが、今回はAWSのS3 metadata
についてです。
つい最近GAされたばかりの機能でとてもホットな話題だったので、
「乗るしかない、このビッグウェーブに」 という想いでS3 metadata
を触ってみました。
S3 metadata
がGAされたニュースはこちら。機能概要についても記載があります。
まだ東京リージョンではGAされていないため、現時点では以下リージョンでの利用、検証になります。
- 米国東部(バージニア北部)
- 米国東部(オハイオ)
- 米国西部(オレゴン)
料金などについては以下の記事でも触れられているので、併せてご確認下さい。
まずはバケットを準備する
とりあえず検証用に汎用バケットを1つ作成してみます。
なお今回はオレゴンリージョンを利用しました。
cm-kawanago-meta-test-a
という名前で汎用バケットを作成します。
作成したバケットの詳細を見てみると、上部に新しく「メタデータ」というタブが追加されていました。
「メタデータ」タブに移り、メタデータ設定を作成
を押下するとテーブルバケットの設定になります。
紐づけたいテーブルバケットが既に作成されている場合はS3の参照
から設定が可能ですが、
今回はテーブルバケットが未作成なのでテーブルバケットを作成
から設定を進めます。
なおメタデータテーブル名はs3metadata_{バケット名}
で自動補完されますが、名称変更も可能です。
今回はtable-cm-kawanago-meta-test
という名前でテーブルバケットを作成します。
作成が成功するとテーブルバケットの画面で一覧が表示されます。
テーブルバケットが作成できたら汎用バケットのページに戻り、
送信先テーブルバケットに先ほど作成したテーブルバケットを指定します。
これで汎用バケットとテーブルバケットの紐づけが完了しました。
Athenaから見てみる
作成したメタデータテーブルをAthenaから見てみます。
ただ私の検証環境では、この時点だとテーブルバケットを閲覧できない状態だったので、
Lake Formationの方から閲覧のための権限設定をしておきます。
LakeFormationの左側メニューからCatalogs New
> s3tablescatalog
を選択します。
Permissions
タブからGrant
を押下します。
基本はタグを利用した権限管理が推奨されているようですが、
今回は検証用に特定のカタログに対してsuper権限を付けておきます。
ではAthenaからメタデータテーブルにクエリを投げてみます。
結果は空でした。まだ汎用バケットの方にファイルを置いてないので当然ですね。
サンプルのparquetファイルをS3に置いてみます。
(あまりにもイケてないファイル名は見逃して下さい)
この状態でもう一度Athenaからクエリを投げてみると、
parquetファイルを格納した際のイベントが登録されていることが確認できました。
ユーザー定義のメタデータを入れてみる
汎用バケットにファイルを置く際に、ユーザー定義のメタデータを設定してみます。
今回はkey
をfacility
に、value
をtokyo
にしました。
Athenaの方からテーブルを見てみると、user_metadata
のカラムに
{facility=tokyo}
の形式で格納されました。複数入れた場合はどうなるんでしょうか。
複数のユーザー定義メタデータを入れると、user_metadata
カラムにカンマ区切りで格納されました。
汎用バケットを追加してみる
現在テーブルバケットにはテーブルが1つだけ登録されている状態です。
ここで、このテーブルバケットをメタデータ送信先とする汎用バケットを追加してみます。
cm-kawanago-meta-test-b
という名前で作成しました。
テーブルバケットの方を確認すると、新しいテーブルが追加されていることが確認できました。
Athenaの方でもテーブルが追加されていました。
この仕様から、特にAthenaなどからデータベースやテーブルを追加で作成したりせず、
メタデータ閲覧のみに使用する場合は、紐づけた汎用バケット分だけテーブルが存在することになりますね。
不要になったテーブルバケットを削除する
今回の検証で不要になったテーブルバケットを削除してみます。
ただ、そのテーブルを消そうと思ったとき...こんな表示が目に入りました。
テーブルバケットを削除するには、AWS CLI、AWS SDK、または Amazon S3 REST API を使用してください。
そうです。
テーブルバケットはマネージドコンソール上から削除することができないのです。
しかも削除方法が結構複雑で、中々削除できずに困っていたところ、以下の記事に助けられました。
詳細は上記の記事に全て書いてありますが、簡単にまとめると以下のような内容です。
- 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:***************************
マネージドコンソールの方でも削除されていることが確認できました。
さいごに
S3 metadataを利用するための 手順自体は結構簡単 で、すぐに利用が始められると思いました。
ユーザー定義のメタデータも利用すれば、データの検索性は大幅に向上 しそうです。
反映にかかる時間についてですが、データを置いてからメタデータを確認できるまで、
体感5分程度 は待っていたように思いますが、これは環境による差異があるかも知れません。
難点としては、メタデータテーブルの閲覧の際には Lake Formationの設定 が絡んでくるため、
組織で利用の経験がない場合には、そこがネックになる可能性がありそうです。
また紐づけたバケットごとにテーブルが作成され、メタデータが蓄積されていくため、
メタデータ管理が不要なデータも扱う場合は、バケットを分けて作成するという選択肢 もありそうです。
まだ一部の米国リージョンでしか公開されていない機能ではありますが、
データの検索性に課題を感じている方は、ぜひ利用を検討してみてはいかがでしょうか。
最後まで閲覧頂き、ありがとうございました。