S3 Tables の Table Bucket を簡単に削除しよう!

S3 Tables の Table Bucket を簡単に削除できる機能を、S3削除ツール『cls3』に追加しました。

cls3

目次

目次


Amazon S3 Tables

S3 Tables の発表

AWS re:Invent 2024 のキーノートにてAmazon S3 Tablesという新サービスの発表がありました。

Amazon S3 Tables は、Apache Iceberg サポートが組み込まれた初めてのクラウドオブジェクトストアであり、表形式のデータを大規模に保存する最も簡単な方法でもあります。S3 テーブルは分析ワークロード専用に最適化されているため、セルフマネージドテーブルと比較して、クエリのスループットが最大 3 倍速く、1 秒あたりのトランザクション数が最大 10 倍多くなります。

aws.amazon.com

aws.amazon.com


詳細は以下のリファレンスをご覧ください。

docs.aws.amazon.com


S3 バケットの種類

S3 Tables を通して、テーブルバケット(Table Buckets)というバケットが新たに S3 に追加されました。

これにより、現在 S3 には以下の種類のバケットがあります。

  • General Buckets
  • Directory Buckets
  • Tables Buckets
    • 今回発表された「S3 Tables」で使用されるバケット
    • Amazon Athena、Amazon EMR、Apache Spark などの他の AWS サービスとの統合によりそれらのサービスからクエリが叩ける
      • S3 Tables 自体は GA しましたが、2025 年 1 月 30 日現在は統合機能はプレビュー


S3 Tables の構成要素

S3 Tables における Tables Buckets(テーブルバケット)の構成要素は以下になります。

  • テーブルバケット
  • ネームスペース
  • テーブル

「テーブルバケット / ネームスペース / テーブル」という階層構成となります。


また2025 年 1 月 30 日現在、デフォルトで AWS アカウントごとに上限の個数制限(Service Quotas)があります。

※ S3 Express One Zone で使用される Directory Buckets も、発表当初は 1 アカウント(リージョン単位)に 10 個までだったのがいつの間にか 100 個になっていたので、しれっと増えることもあるかもしれません。

  • テーブルバケット
    • 1 アカウント(リージョン単位)にテーブルバケットは 10 個まで
  • ネームスペース
    • 1 テーブルバケット100 個まで 10,000 個まで (ちょうどこの記事を書いた翌日、日本時間の 1/31 にアップデートが来ました!)
  • テーブル
    • 1 テーブルバケット100 個まで 10,000 個まで (同上)

※詳細は以下をご覧ください。

docs.aws.amazon.com


S3 Tables(テーブルバケット)の削除ルール

さて、本記事は「S3 Tables の Table Bucket を簡単に削除しよう!」ということですが、S3 Tables の Table Bucket を削除するためには以下のルールがあります。

  • 該当テーブルバケット全ネームスペースを先に削除する必要がある
  • ネームスペースを削除するには、該当ネームスペースの全テーブルを先に削除する必要がある。


つまり、テーブルバケットを削除するには、以下の一連の流れが必要です。

  • 該当テーブルバケットの全ネームスペースを取得する
  • それぞれのネームスペースに所属する全テーブルを取得する
  • それぞれのネームスペースごとの全テーブルを削除する
  • 該当テーブルバケットの全てのネームスペースを削除する
  • 該当テーブルバケットを削除する


ちょっとめんどくさいですよね。

実際に困っている人もいました。

repost.aws


なので、これを簡単に、1 コマンドでできるようにしました。


cls3

cls3 とは?

私が OSS として開発している、S3 削除のための便利な CLI ツールになります。

go-to-k.hatenablog.com


GitHub は以下になります。(スターいただけたら嬉しいです!)

github.com


今までの機能

詳細は先ほど載せたブログや GitHub を参照してください。

具体的には以下のことができます。

  • バケットを削除することも、空にすることもできる
  • オブジェクトの並行削除によって高速なバケット削除ができる
    • 大量削除などの際のスロットリングエラー時には内部で自動的にリトライをしてくれる
  • 対話モードで複数のバケットを検索でき、指定できる
  • リージョン横断で、複数バケットを一括で削除できる
  • バージョニングがオンバケットも削除できる
  • 古いバージョンのオブジェクトだけを削除できる
  • S3 Express One Zone のための Directory Buckets の削除もできる
  • GitHub Actions 用の機能も提供している


インストール

様々なインストール方法を提供しています。

※インストール方法の詳細は以下のリンクから

github.com


S3 Tables の Table Bucket 削除機能

Table Buckets Mode

S3 Tables の Table Bucket を削除する機能を、cls の v0.23.0 に取り入れました。


cls3 では、CLI のオプション(-b)でバケット名を直接指定することも、対話モード(-i)により対話で検索しながらバケットを指定することもできます。


今回のリリースでは Table Buckets Mode というモード(オプション)を導入し、以下の様に簡単に S3 Tables の Table Bucket を削除することができるようになりました。(対話モードを例に)

cls3


「-t | --tableBucketsMode」オプションを指定して Table Bucket の「中身」を削除、つまり該当 Table Bucket全ネームスペースと全テーブルを削除します。

「-f | --forceMode」を合わせて指定すると、全ネームスペースと全テーブルに加えてTable Bucket ごと削除することができます。


改善リリース

実はこの後すでにいくつかのバージョンをリリースしています。

Table Bucket 削除の並列数を少し下げたり、より細かいリアルタイム削除数を表示したりできるようになりました。他には主にリファクタリングや細かいエラーハンドリングなどです。

そのため、その時点での最新のバージョンを使用していただくのが良いです。


注意点

S3 Tables の API は、既存の S3 と API エンドポイントが異なります。

S3 Tables の API が新しい API だからなのか、そういう仕様なのかわかりませんが、ある程度の並列で削除処理を行うと TooManyRequest エラーや Internal Error が発生し、リトライを促されることがあります。


そのため cls3 では、並列数をギリギリまで下げ、それらのエラーが起きた時には自動でリトライする仕組みを入れてカバーしています。

※もしまだエラーが出るようであれば、今後のリリースでより並列数を下げるつもりです。


おまけ

今開発中の機能: 複数バケットの並列削除機能

複数バケットの並列削除機能(-c: concurrent モード)の実装をしています。

-n で並列数も指定可能。また、リアルタイム削除数出力(削除オブジェクト数カウンター)で、完了したバケットから順次緑色に変えるようにもしています。

parallel


ただ、あまりに並列数が多すぎると S3 API で謎エラーが出ており、この調査中のためリリースはもう少しかかりそうです。

※今はバケットのオブジェクトは並列で削除していますが、複数バケットを指定した際の各バケットの削除は直列になっています。


まとめ

S3 Tables の Table Bucket を簡単に削除する機能を cls3 に導入しました。

これを機に、ぜひ S3 Tables だけでなく、通常の S3 バケットの削除にもこのツールを使用してもらえると嬉しいです。きっと役に立つと思います。