Amazon S3 テーブル
Amazon S3 Tablesは、AWSによって導入されたテーブルデータに最適化されたストレージサービスで、Apache Icebergフォーマットのネイティブサポートを提供します。
VeloDB CloudはAWS Glue Iceberg RESTエンドポイント経由でS3 Tablesに接続します。AWS Lake FormationでS3 Tables統合を有効にすると、AWS GlueがData Catalog内にs3tablescatalogという名前のフェデレーテッドカタログを作成します。VeloDB Cloudは、このディレクトリのIceberg REST API経由でS3 Tablesデータにアクセスします。
前提条件
Amazon S3 Tables Catalogを作成する前に、AWS側で以下の準備が完了していることを確認してください。
1. S3 Table Bucketの作成
まず、AWS S3でTable Bucketを作成する必要があります:
- AWS S3コンソールにサインインします。
- 左ナビゲーションバーでTable bucketsを選択します。
- Create table bucketをクリックします。
- バケット名を入力し、リージョンを選択します。
- 作成を完了します。
2. Lake FormationでS3 Tables統合を有効化
AWS Glue Iceberg RESTエンドポイント経由でS3 Tablesにアクセスするには、まずLake Formationで統合を有効にする必要があります:
- AWS Lake Formationコンソールにサインインします。
- 左ナビゲーションバーでData Catalog > Catalogsを選択します。
- ページ上部のプロンプトバナーでEnable S3 Table integrationボタンをクリックします。

有効化すると、AWS Glueが自動的にs3tablescatalogという名前のフェデレーテッドカタログを作成し、S3 Table Bucketsがその中のサブディレクトリとして表示されます。
詳細な手順については、AWS公式ドキュメントを参照してください:Creating an Amazon S3 Tables catalog in the AWS Glue Data Catalog
3. NamespaceとTableの作成
S3 Table BucketでNamespaceとテーブルを作成します:
- S3コンソールのTable bucketsページで、作成したTable Bucketを選択します。
- Namespaceを作成します。
- Namespace内にテーブルを作成します。
4. Lake Formation権限の設定
Lake Formationで必要な権限を付与します:
- AWS Lake Formationコンソールにサインインします。
- 左ナビゲーションバーでPermissions → Data permissionsを選択します。
- Grantをクリックします。
- 以下のオプションを設定します:
- Principals: IAM users and rolesを選択し、IAMユーザーまたはロールを選択します。
- LF-Tags or catalog resources: Named Data Catalog resourcesを選択します。
- Catalogs: s3tablescatalogを選択します。
- Databases:
s3tablescatalog/<table-bucket-name>配下の対象データベース、またはAll databasesを選択します。 - Tables: 対象テーブルまたはAll tablesを選択します。
- 必要な権限をチェックします:
- Table permissions: Select、Insert、Delete、Describe、Alter、Dropなど。
- Grantをクリックします。
5. IAM権限の設定
S3 TablesにアクセスするIAMユーザー/ロールに対して以下の権限ポリシーを設定します:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GlueCatalogAccess",
"Effect": "Allow",
"Action": [
"glue:GetCatalog",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:CreateDatabase",
"glue:UpdateDatabase",
"glue:DeleteDatabase",
"glue:GetTable",
"glue:GetTables",
"glue:CreateTable",
"glue:UpdateTable",
"glue:DeleteTable",
"glue:GetUserDefinedFunction",
"glue:GetUserDefinedFunctions",
"glue:DeleteUserDefinedFunction"
],
"Resource": [
"arn:aws:glue:<region>:<account-id>:catalog",
"arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog",
"arn:aws:glue:<region>:<account-id>:catalog/s3tablescatalog/<table-bucket-name>",
"arn:aws:glue:<region>:<account-id>:database/s3tablescatalog/<table-bucket-name>/*",
"arn:aws:glue:<region>:<account-id>:table/s3tablescatalog/<table-bucket-name>/*/*",
"arn:aws:glue:<region>:<account-id>:userDefinedFunction/s3tablescatalog/<table-bucket-name>/*/*"
]
},
{
"Sid": "S3TablesAccess",
"Effect": "Allow",
"Action": [
"s3tables:GetTableBucket",
"s3tables:ListTableBuckets",
"s3tables:CreateNamespace",
"s3tables:GetNamespace",
"s3tables:ListNamespaces",
"s3tables:DeleteNamespace",
"s3tables:CreateTable",
"s3tables:GetTable",
"s3tables:ListTables",
"s3tables:UpdateTableMetadataLocation",
"s3tables:GetTableMetadataLocation",
"s3tables:RenameTable",
"s3tables:DeleteTable",
"s3tables:GetTableData",
"s3tables:PutTableData"
],
"Resource": [
"arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>",
"arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/*"
]
},
{
"Sid": "LakeFormationDataAccess",
"Effect": "Allow",
"Action": [
"lakeformation:GetDataAccess"
],
"Resource": "*"
}
]
}
設定手順
<region>を実際のAWSリージョン(例:us-east-1)に置き換えてください。<account-id>をあなたのAWS Account IDに置き換えてください。<table-bucket-name>をあなたのS3 Table Bucket名に置き換えてください。
6. ネットワーク要件
- VeloDB CloudがS3 Table Glue RESTエンドポイントにアクセスできる必要があります。
- VeloDB Cloudがデータストレージ(例:S3)にアクセスできる必要があります。
SaaS ModeのVeloDB Cloudの場合
- Warehouseと同じリージョンのS3 Table Glue RESTエンドポイントとS3 Bucketsにのみアクセスできます。
BYOC ModeのVeloDB Cloudの場合
- S3 Table Glue RESTエンドポイントとS3 Bucketサービスへのアクセスには、デプロイメント時のネットワークポリシーを参照する必要があります。Create VPC Network Resourcesを参照してください。
Catalogの作成
VeloDB CloudでAmazon S3 Tables Catalogを作成するには、以下の手順に従ってください。
Step 1: 作成ページへの移動
- VeloDB Cloud Consoleにサインインします。
- 左側のナビゲーションバーで、Catalogsをクリックします。
- Add External Catalogボタンをクリックします。
- Data Lakeカテゴリの下で、Amazon S3 Tablesを選択します。
Step 2: 基本情報の入力
Basic Informationセクションで、Catalogの基本識別情報を設定します。

| フィールド | 必須 | 説明 |
|---|---|---|
| Catalog Name | ✓ | Catalogの一意な名前。SQLクエリでこのデータソースを識別するために使用されます。 |
| Comment | オプションの説明。 |
Step 3: Metastoreの設定
Metastoreセクションで、S3 Tablesへの接続に必要な情報を設定します。S3 TablesはAWS Glueが提供するIceberg REST Catalogインターフェースを使用します。

| フィールド | 必須 | 説明 |
|---|---|---|
| Iceberg REST URI | ✓ | AWS Glue Iceberg REST APIエンドポイント。形式はhttps://glue.<region>.amazonaws.com/icebergで、<region>はあなたのAWSリージョンです。 |
| Warehouse | ✓ | S3 Table Bucketの識別子。形式は<account-id>:s3tablescatalog/<table-bucket-name>です。AWS S3 ConsoleのTable Bucketsページで確認できます。 |
| Region | ✓ | S3 Table Bucketが配置されているAWSリージョン。Glue Iceberg RESTエンドポイントと一致させてください。 |
| Signing-name | ✓ | AWSサービス署名名。S3 Tablesの場合はglueを入力します。 |
Warehouse形式について:
Warehouseの形式は<account-id>:s3tablescatalog/<table-bucket-name>で、3つの部分から構成されます:
<account-id>:あなたのAWS Account ID(12桁)。s3tablescatalog:これがS3 Tablesディレクトリであることを示す固定プレフィックス。<table-bucket-name>:S3 Table Bucketの名前。
Step 4: 認証の設定
Authenticationセクションで、AWSサービスにアクセスするための認証情報を設定します。

| フィールド | 必須 | 説明 |
|---|---|---|
| AK | ✓ | AWS Access Key ID。 |
| SK | ✓ | AWS Secret Access Key。 |
セキュリティ推奨事項:
- AWSルートアカウントのアクセスキーは使用しないでください。
- VeloDB Cloud専用のIAMユーザーを作成してください。
- 最小権限の原則に従い、S3 Tables、Glue、S3に必要な権限のみを付与してください。
- アクセスキーを定期的にローテーションしてください。
Step 5: 詳細設定(オプション)
Advanced Settingsをクリックして、その他の設定オプションを展開します。

詳細設定には通常以下が含まれます:
- メタデータキャッシュ設定。
- 接続タイムアウト設定。
ヒント:ほとんどのシナリオでは、デフォルト値で十分です。
Step 6: 作成の確認
- すべての設定情報が正しいか確認してください。
- ConfirmボタンをクリックしてCatalogを作成します。
- 接続検証の完了を待ちます。
作成が成功すると、Catalogリストで新しく作成されたAmazon S3 Tables Catalogを確認できます。
Catalogの使用
作成が成功した後、SQL EditorでCatalogを使用してデータをクエリできます。
NamespaceとTableの表示
-- View all Namespaces under the Catalog
SHOW DATABASES FROM s3_tables_catalog;
-- View all tables under a specific Namespace
SHOW TABLES FROM s3_tables_catalog.my_database;
-- View table structure
DESCRIBE s3_tables_catalog.my_database.my_table;
クエリデータ
-- Query data
SELECT * FROM s3_tables_catalog.my_database.my_table LIMIT 100;
-- Query with conditions
SELECT column1, column2
FROM s3_tables_catalog.my_database.my_table
WHERE event_date >= '2024-01-01';