Amazon S3 Tables のTable Bucket、Namespace、Tableの管理コマンドの解説 #AWSreInvent

Amazon S3 Tables のTable Bucket、Namespace、Tableの管理コマンドの解説 #AWSreInvent

Clock Icon2024.12.27

AWS事業本部コンサルティング部の石川です。 aws s3tables コマンドを使用した Amazon S3 Tables のTable Bucket、Namespace、Tableの管理について解説します。

Amazon S3 Tables のリソースを管理するための様々な操作が可能です。主な操作には以下のようなものがあります。

カテゴリ コマンド 機能概要
Table Bucket操作 create-table-bucket Table Bucketの作成
delete-table-bucket Table Bucketの削除
get-table-bucket Table Bucketの取得
list-table-buckets Table Bucket一覧の表示
Namespace操作 create-namespace Namespaceの作成
delete-namespace Namespaceの削除
get-namespace Namespaceの取得
list-namespaces Namespaceの一覧表示
Table操作 create-table Tableの作成
delete-table Tableの削除
get-table Tableの取得
list-tables Table一覧の表示
rename-table Table名の変更

Table Bucket の管理コマンド

Table Bucketの作成

コマンド

aws s3tables create-table-bucket \
  --name <table-bucket-name> \
  --region <region>
  • --region: Table Bucketを作成するAWSリージョンを指定します。
  • --table-bucket-arn: 作成するTable BucketのAmazon Resource Name (ARN)を指定します。

コマンドが成功すると、作成されたTable BucketのARNが返されます。デフォルトでは、1つのリージョンにつき最大10個のTable Bucketを作成できます。

実行例

$ aws s3tables create-table-bucket \
>   --name cm-tb-20241227 \
>   --region us-east-1
{
    "arn": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227"
}

Table Bucketの一覧表示

コマンド

aws s3tables list-table-buckets

コマンドが成功すると、作成されたTable BucketのARNの一覧が返されます。

list-table-bucketsコマンドには、結果をフィルタリングしたり制御したりするためのオプションがあります。

--prefix: 特定のプレフィックスで始まるTable Bucketのみをリストします。

aws s3tables list-table-buckets --prefix "analytics-"

--max-items: 一度に返すTable Bucketの最大数を指定します。複数ページある場合は、NextTokenが返り、つぎの呼び出しで指定することで続きを表示できます。

aws s3tables list-table-buckets --max-items 5

--page-size: 各ページに含めるTable Bucketの数を指定します。

aws s3tables list-table-buckets --page-size 10

実行例

$ aws s3tables list-table-buckets
{
    "tableBuckets": [
        {
            "arn": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227",
            "name": "cm-tb-20241227",
            "ownerAccountId": " 123456789012",
            "createdAt": "2024-12-27T11:44:12.508590+00:00"
        }
    ]
}

Table Bucketの情報表示

コマンド

aws s3tables get-table-bucket \
  --table-bucket-arn <table-bucket-arn>
  • --table-bucket-arn: 表示するTable BucketのAmazon Resource Name (ARN)を指定します。

実行例

$ aws s3tables get-table-bucket \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227
{
    "arn": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227",
    "name": "cm-tb-20241227",
    "ownerAccountId": " 123456789012",
    "createdAt": "2024-12-27T11:44:12.508590+00:00"
}

Table Bucketの削除

コマンド

aws s3tables delete-table-bucket \
  --table-bucket-arn <table-bucket-arn>
  • --table-bucket-arn: 削除するTable BucketのAmazon Resource Name (ARN)を指定します。

実行例

$ aws s3tables delete-table-bucket \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227

もし、削除できなかった場合は以下のブログをご覧ください。

https://dev.classmethod.jp/articles/amazon-s3-tables-table-bucket-awsreinvent/

Namespaceの管理コマンド

Namespaceの作成

コマンド

aws s3tables create-namespace \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name>
  • --table-bucket-arn: 作成したいTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 作成するNamespace名を指定します。

1つのTable Bucketに最大100個の名前空間を作成できます。

実行例

$ aws s3tables create-namespace \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace
{
    "tableBucketARN": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227",
    "namespace": [
        "cm_namespace"
    ]
}

Namespaceの一覧表示

コマンド

aws s3tables list-namespaces \
  --table-bucket-arn <table-bucket-arn>
  • --table-bucket-arn: 一覧表示したいTable BucketのAmazon Resource Name (ARN)を指定します。

コマンドが成功すると、作成されたNamespaceのARNの一覧が返されます。

list-table-bucketsコマンドには、結果をフィルタリングしたり制御したりするためのオプションがあります。

--prefix: 特定のプレフィックスで始まるNamespaceのみをリストします。

aws s3tables list-namespaces \
  --table-bucket-arn <table-bucket-arn> \
  --prefix "analytics-"

--max-items: 一度に返すNamespaceの最大数を指定します。複数ページある場合は、NextTokenが返り、つぎの呼び出しで指定することで続きを表示できます。

aws s3tables list-namespaces \
  --table-bucket-arn <table-bucket-arn> \
  --max-items 5

--page-size: 各ページに含めるNamespaceの数を指定します。

aws s3tables list-namespaces \
  --table-bucket-arn <table-bucket-arn> \
  --page-size 10

実行例

$ aws s3tables list-namespaces \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227
{
    "namespaces": [
        {
            "namespace": [
                "cm_namespace"
            ],
            "createdAt": "2024-12-27T12:11:57.569290+00:00",
            "createdBy": " 123456789012",
            "ownerAccountId": " 123456789012"
        }
    ]
}

Namespaceの情報表示

コマンド

aws s3tables get-namespace \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name>
  • --table-bucket-arn: 表示したいTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 表示したいNamespace名を指定します。

実行例

$ aws s3tables get-namespace \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace
{
    "namespace": [
        "cm_namespace"
    ],
    "createdAt": "2024-12-27T12:11:57.569290+00:00",
    "createdBy": " 123456789012",
    "ownerAccountId": " 123456789012"
}

Namespaceの削除

コマンド

aws s3tables delete-namespace \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name>
  • --table-bucket-arn: 削除したいNamespaceのAmazon Resource Name (ARN)を指定します。

  • --namespace: 削除したいNamespace名を指定します。

実行例

$ aws s3tables delete-namespace \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace

Tableの管理コマンド

Tableの作成

コマンド

aws s3tables create-table \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --name <table-name> \
  --format <table-format>
  • --table-bucket-arn: 作成したいTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 作成したいNamespace名を指定します。

  • --name: 作成するTable名を指定します。

  • --format: Table formatを指定します。現時点では、ICEBERGが唯一の有効なオプションですが、将来的に他のフォーマットオプションが追加される可能性があります。

現時点、このコマンドでTableのカラムを直接設定することはできません。このコマンドは、Table Bucket内に新しいTableを作成するための基本的な構造を設定するものです。そのため、Amazon EMRやAWS Glue、Apache Sparkなどのクエリエンジンを使用してTableのスキーマを定義する必要があります。

実行例

$ aws s3tables create-table \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace \
>   --name customer \
>   --format ICEBERG
{
    "tableARN": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227/table/4af2b299-92a6-41d4-bdb3-be752aeda705",
    "versionToken": "05f6a852fc20ef934742"
}

Tableの一覧表示

コマンド

aws s3tables list-tables \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name>
  • --table-bucket-arn: 作成したいTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 作成したいNamespace名を指定します。

コマンドが成功すると、作成されたTable一覧が返されます。

list-tablesコマンドには、結果をフィルタリングしたり制御したりするためのオプションがあります。

--prefix: 特定のプレフィックスで始まるTableのみをリストします。

aws s3tables list-tables \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --prefix "analytics-"

--max-items: 一度に返すTableの最大数を指定します。複数ページある場合は、NextTokenが返り、つぎの呼び出しで指定することで続きを表示できます。

aws s3tables list-tables \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --max-items 5

--page-size: 各ページに含めるTableの数を指定します。

aws s3tables list-tables \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --page-size 10

実行例

$ aws s3tables list-tables \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace
{
    "tables": [
        {
            "namespace": [
                "cm_namespace"
            ],
            "name": "customer",
            "type": "customer",
            "tableARN": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227/table/4af2b299-92a6-41d4-bdb3-be752aeda705",
            "createdAt": "2024-12-27T13:13:39.657591+00:00",
            "modifiedAt": "2024-12-27T13:13:39.657591+00:00"
        }
    ]
}

Tableの情報表示

コマンド

aws s3tables get-table \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --name <table-name> 
  • --table-bucket-arn: 表示したいTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 表示したいNamespace名を指定します。

  • --name: 表示するTable名を指定します。

実行例

$ aws s3tables get-table \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace \
>   --name customer
{
    "name": "customer",
    "type": "customer",
    "tableARN": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227/table/4af2b299-92a6-41d4-bdb3-be752aeda705",
    "namespace": [
        "cm_namespace"
    ],
    "versionToken": "05f6a852fc20ef934742",
    "warehouseLocation": "s3://4af2b299-92a6-41d4-e6mfi51cyz8kmbu85aedp49asx95guse1b--table-s3",
    "createdAt": "2024-12-27T13:13:39.657591+00:00",
    "createdBy": " 123456789012",
    "modifiedAt": "2024-12-27T13:13:39.657591+00:00",
    "ownerAccountId": " 123456789012",
    "format": "ICEBERG"
}

Tableの名前変更

コマンド

aws s3tables rename-table \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --name <old_table_name> \
  --new-name <new_table_name>
  • --table-bucket-arn: 対象のTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 対象のNamespace名を指定します。

  • --name: 変更前のTable名を指定します。

  • --new-name: 変更後のTable名を指定します。

実行例

$ aws s3tables rename-table \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace \
>   --name customer \
>   --new-name customer_new

念の為、Tableの情報を確認して変更されていることを確認しました。

$ aws s3tables get-table --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227   --namespace cm_namespace   --name customer_new
{
    "name": "customer_new",
    "type": "customer",
    "tableARN": "arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227/table/4af2b299-92a6-41d4-bdb3-be752aeda705",
    "namespace": [
        "cm_namespace"
    ],
    "versionToken": "05f6a852fc20ef934742",
    "warehouseLocation": "s3://4af2b299-92a6-41d4-e6mfi51cyz8kmbu85aedp49asx95guse1b--table-s3",
    "createdAt": "2024-12-27T13:13:39.657591+00:00",
    "createdBy": " 123456789012",
    "modifiedAt": "2024-12-27T13:25:19.068322+00:00",
    "modifiedBy": " 123456789012",
    "ownerAccountId": " 123456789012",
    "format": "ICEBERG"
}

Tableの削除

コマンド

aws s3tables delete-table \
  --table-bucket-arn <table-bucket-arn> \
  --namespace <namespace-name> \
  --name <table-name> 
  • --table-bucket-arn: 対象のTable BucketのAmazon Resource Name (ARN)を指定します。

  • --namespace: 対象のNamespace名を指定します。

  • --name: 削除したいTable名を指定します。

実行例

$ aws s3tables delete-table \
>   --table-bucket-arn arn:aws:s3tables:us-east-1: 123456789012:bucket/cm-tb-20241227 \
>   --namespace cm_namespace \
>   --name customer_new 

ストレージサイズを確認する方法なし

本当は、ストレージサイズを取得する方法を知りたくて、aws s3tables コマンドを調べていたのですが、取得できませんでした。

また、Apache IcebergのTable指定で、Amazon Athenaから customer$files とすると、customerテーブルの現在のデータファイルに関する情報が表示されるはずですが、それもエラーになります。

よって、ストレージサイズを確認する方法は、今後のアップデートに期待です。

amazon-s3-tables-table-management-cmd-1

最後に

Amazon S3 Tablesのリソース管理にはaws s3tablesコマンドを用いて、Table Bucket、Namespace、Tableの作成、一覧表示、情報取得、削除などの基本的な操作が可能で、これらのコマンドを使いこなすことで効率的なデータ管理が実現できます。しかし、現時点ではストレージサイズの確認方法が提供されていないなど、一部の機能に制限があることも明らかになりました。

今後のアップデートでこれらの制限が解消され、より包括的な管理ツールとなることが期待されます。Amazon S3 Tablesを活用する際は、これらのコマンドの特性と制限を理解した上で、適切に使用することが重要です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.