このREADMEはAWSに触るなんてムリムリ!※無理じゃなかった?!2ndシーズン Advent Calendar 2025の一環として作成されました。
- Amazon S3 Tablesの基本的な使い方を理解する
この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも??」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど) 誤りなどがあれば書き直していく予定です。
今回はAmazon S3が機能として提供しているAmazon S3 Tablesを検証してみます。
これまでのS3は「ファイル(オブジェクト)」を置く場所でしたが、このアップデートにより、S3そのものが**「テーブル(表形式のデータ)」を直接扱う機能**を持つようになりました。いくつか特徴があるので見ていきましょう。
従来の汎用バケットとは別に、構造化データ専用の**「テーブルバケット」**が作成できるようになりました。 この中には「Namespace(名前空間)」と「Table(テーブル)」という階層構造が作れます。
オープンソースの高速なテーブルフォーマットである「Apache Iceberg」をネイティブでサポートしています。 自分たちでIcebergの管理をしなくても、S3が裏側でいい感じにやってくれます。
自分でデータレイクを構築する場合に比べて、クエリのスループットが最大3倍、トランザクション性能が最大10倍向上するとされています。
簡単に説明すると「データレイク上の巨大なファイルを、まるでデータベースのテーブルのように扱えるようにする技術(テーブルフォーマット)」です。
もともとNetflix社が、従来のデータ管理手法(Hiveなど)の限界を克服するために開発し、現在はオープンソース(OSS)として広く普及しています。Amazon S3 Tablesも、このIcebergを標準の形式として採用しています。
説明を聞いていてもわからないことが多いので、実際に触ってみましょう。 今回はAWS CloudShellを使って進めていきます。権限はAdministratorAccessが必要です。
# アカウントIDを変数に格納
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
REGION="ap-northeast-1" # お使いのリージョンに変更してください
BUCKET_NAME="my-s3-tables-handson-${ACCOUNT_ID}"
# テーブルバケットの作成
aws s3tables create-table-bucket --name $BUCKET_NAME --region $REGION# バケットARNを変数に格納
BUCKET_ARN="arn:aws:s3tables:${REGION}:${ACCOUNT_ID}:bucket/${BUCKET_NAME}"
# ネームスペース (データベース) の作成
aws s3tables create-namespace \
--table-bucket-arn $BUCKET_ARN \
--namespace handson_dbaws s3tables create-table \
--table-bucket-arn $BUCKET_ARN \
--namespace handson_db \
--name user_logs \
--format ICEBERG- 表形式データの大規模ストレージ - Amazon S3 Tables - AWS
- Amazon S3 Metadata が、すべての S3 オブジェクトのメタデータのサポートを開始
- 新しい Amazon S3 テーブル: 分析ワークロード向けに最適化されたストレージ
- Amazon S3 テーブルを使用して管理されたトランザクションデータレイクを構築する
- Amazon S3 Tables と Amazon SageMaker Lakehouse の統合の一般提供を開始
このガイドでは、Linux環境でAWS CLIをインストールし、AWS SSOを使用してログインするまでの手順を説明します。
- Linux環境(Ubuntu、CentOS、Amazon Linux等)
- インターネット接続
- 管理者権限(sudoが使用可能)
- AWS SSO が組織で設定済み
- Python 3.12.1
最新版のAWS CLI v2を公式インストーラーでインストールします。
# 1. インストーラーをダウンロード
curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip"
# 2. unzipがインストールされていない場合はインストール
sudo apt update && sudo apt install unzip -y # Ubuntu/Debian系
# または
sudo yum install unzip -y # CentOS/RHEL系
# 3. ダウンロードしたファイルを展開
unzip awscliv2.zip
# 4. インストール実行
sudo ./aws/install
# 5. インストール確認
aws --version
# ダウンロードしたzipファイルと展開したディレクトリを削除してクリーンアップします。
rm "awscliv2.zip"
# 解凍したディレクトリを削除
rm -rf awsAWS SSOを使用するための初期設定を行います。
aws configure sso設定時に以下の情報の入力が求められます:
- SSO start URL: 組織のSSO開始URL(例:
https://my-company.awsapps.com/start) - SSO Region: SSOが設定されているリージョン(例:
us-east-1) - アカウント選択: 利用可能なAWSアカウントから選択
- ロール選択: 選択したアカウントで利用可能なロールから選択
- CLI default client Region: デフォルトのAWSリージョン(例:
ap-northeast-1) - CLI default output format: 出力形式(
json、text、tableのいずれか) - CLI profile name: プロファイル名(
defaultとします。)
設定完了後、以下のコマンドでログインを実行します。
aws sso loginログイン時の流れ:
- コマンド実行後、ブラウザが自動的に開きます
- AWS SSOのログインページが表示されます
- 組織のIDプロバイダー(例:Active Directory、Okta等)でログイン
- 認証が成功すると、ターミナルに成功メッセージが表示されます
認証情報を確認します。
aws sts get-caller-identity正常にログインできている場合、以下のような情報が表示されます:
{
"UserId": "AROAXXXXXXXXXXXXXX:username@company.com",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/RoleName/username@company.com"
}# 手動でブラウザを開く場合のURL確認
aws sso login --no-browser表示されたURLを手動でブラウザで開いてください。
# 再ログイン
aws sso loginプロキシ環境の場合、以下の環境変数を設定してください:
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1,.company.com-
定期的な認証情報の更新: SSOセッションには有効期限があります。定期的に再ログインを行ってください。
-
最小権限の原則: 必要最小限の権限を持つロールを使用してください。
-
プロファイルの分離: 本番環境と開発環境で異なるプロファイルを使用してください。
-
ログアウト: 作業終了時は適切にログアウトしてください:
aws sso logout --profile <プロファイル名>