

# Amazon S3 Tables との統合
<a name="glue-federation-s3tables"></a>

AWS Glue Data Catalog と Amazon S3 Tables の統合により、単一のカタログを使用して Amazon S3 データレイク内のデータの検出、クエリ、そのデータと S3 Tables との結合を行えます。S3 Tables を Data Catalog と統合すると、サービスは S3 Tables リソースを AWS Glue カタログオブジェクトにマッピングするフェデレーテッドカタログ構造を作成します。
+ S3 テーブルバケットが Data Catalog のカタログになる
+ S3 名前空間が AWS Glue データベースになる
+ S3 テーブルが AWS Glue テーブルになる

## アクセス制御
<a name="s3-tables-access-controls"></a>

Data Catalog は、S3 Tables 統合の 2 つのアクセスコントロールモードをサポートしています。
+ **IAM アクセスコントロール** – IAM ポリシーを使用して、S3 Tables と Data Catalog へのアクセスを制御します。このアプローチでは、リソースにアクセスするには、S3 Tables リソースと Data Catalog オブジェクトの両方に対する IAM アクセス許可が必要です。
+ **AWS Lake Formation アクセスコントロール** – Data Catalog を介した S3 Tables へのアクセスを制御するために、AWS Glue IAM アクセス許可に加えて AWS Lake Formation 許可を使用します。このモードでは、プリンシパルは Data Catalog を操作するための IAM アクセス許可を必要とし、プリンシパルがアクセスできるカタログリソース (データベース、テーブル、列、行) は AWS Lake Formation 許可によって決まります。このモードは、粗粒度のアクセスコントロール (データベースレベルとテーブルレベルの権限) ときめ細かなアクセスコントロール (列レベルと行レベルのセキュリティ) の両方をサポートします。登録されたロールが設定され、認証情報の払い出しが有効になっている場合、S3 Tables IAM アクセス許可はプリンシパルには必要ありません。これは、登録されたロールを使用してプリンシパルの代わりに AWS Lake Formation が認証情報を払い出すからです。AWS Lake Formation アクセスコントロールは、サードパーティーの分析エンジンの認証情報の払い出しもサポートしています。詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Creating an S3 Tables catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)」(S3 Tables カタログの作成) を参照してください。

要件の進展に応じて、アクセスコントロールモード間で移行できます。

## 自動マウント用のカタログ階層
<a name="s3-tables-catalog-hierarchy"></a>

Amazon S3 マネジメントコンソールを使用して S3 Tables を Data Catalog と統合すると、コンソールは、その AWS リージョンのアカウントの Data Catalog に `s3tablescatalog` というフェデレーテッドカタログを作成します。このフェデレーテッドカタログは、そのアカウントとリージョンのすべての既存および将来の S3 テーブルバケットの親カタログとして機能します。統合は、Amazon S3 Tables のバケットリソースを次の階層にマッピングします。
+ **フェデレーテッドカタログ** – `s3tablescatalog` (自動作成)
+ **子カタログ** – 各 S3 テーブルバケットは `s3tablescatalog` の子カタログになります
+ **データベース** – テーブルバケット内の各 S3 名前空間がデータベースになります
+ **テーブル** – 名前空間内の各 S3 テーブルがテーブルになります

たとえば、テーブル「transactions」を含む名前空間「sales」を持つ「analytics-bucket」という名前の S3 テーブルバケットがある場合、Data Catalog のフルパスは次のようになります。`s3tablescatalog/analytics-bucket/sales/transactions`

この 4 つの階層は、S3 Tables と Data Catalog が同じ AWS アカウントにある同一アカウントシナリオに適用されます。クロスアカウントシナリオでは、Data Catalog に個々の S3 テーブルバケットを手動でマウントし、3 つの部分からなる階層を作成します。

## サポート対象のリージョン
<a name="s3-tables-supported-regions"></a>

S3 Tables と Data Catalog の統合は、次の AWS リージョンで利用できます。


| リージョンコード | リージョン名 | 
| --- | --- | 
| us–east–1 | 米国東部 (バージニア北部) | 
| us-east-2 | 米国東部 (オハイオ) | 
| us-west-1 | 米国西部 (北カリフォルニア) | 
| us-west-2 | 米国西部 (オレゴン) | 
| af-south-1 | アフリカ (ケープタウン) | 
| ap-east-1 | アジアパシフィック (香港) | 
| ap-east-2 | アジアパシフィック (台北) | 
| ap-northeast-1 | アジアパシフィック (東京) | 
| ap-northeast-2 | アジアパシフィック (ソウル) | 
| ap-northeast-3 | アジアパシフィック (大阪) | 
| ap-south-1 | アジアパシフィック (ムンバイ) | 
| ap-south-2 | アジアパシフィック (ハイデラバード) | 
| ap-southeast-1 | アジアパシフィック (シンガポール) | 
| ap-southeast-2 | アジアパシフィック (シドニー) | 
| ap-southeast-3 | アジアパシフィック (ジャカルタ) | 
| ap-southeast-4 | アジアパシフィック (メルボルン) | 
| ap-southeast-5 | アジアパシフィック (マレーシア) | 
| ap-southeast-6 | アジアパシフィック (ニュージーランド) | 
| ap-southeast-7 | アジアパシフィック (タイ) | 
| ca-central-1 | カナダ (中部) | 
| ca-west-1 | カナダ西部 (カルガリー) | 
| eu-central-1 | 欧州 (フランクフルト) | 
| eu-central-2 | 欧州 (チューリッヒ) | 
| eu-north-1 | 欧州 (ストックホルム) | 
| eu-south-1 | 欧州 (ミラノ) | 
| eu-south-2 | 欧州 (スペイン) | 
| eu-west-1 | 欧州 (アイルランド) | 
| eu-west-2 | 欧州 (ロンドン) | 
| eu-west-3 | 欧州 (パリ) | 
| il-central-1 | イスラエル (テルアビブ) | 
| mx-central-1 | メキシコ (中部) | 
| sa-east-1 | 南米（サンパウロ） | 

**Topics**
+ [アクセス制御](#s3-tables-access-controls)
+ [自動マウント用のカタログ階層](#s3-tables-catalog-hierarchy)
+ [サポート対象のリージョン](#s3-tables-supported-regions)
+ [前提条件](s3tables-catalog-prerequisites.md)
+ [S3 Tables と Data Catalog の統合の有効化](enable-s3-tables-catalog-integration.md)
+ [S3 Tables カタログへのデータベースとテーブルの追加](create-databases-tables-s3-catalog.md)
+ [S3 Tables カタログオブジェクトの共有](share-s3-tables-catalog.md)
+ [S3 Tables 統合の管理](manage-s3-tables-catalog-integration.md)

# 前提条件
<a name="s3tables-catalog-prerequisites"></a>

AWS Glue Data Catalog で S3 Tables のフェデレーテッドカタログを作成する前に、IAM プリンシパル (ユーザーまたはロール) に必要なアクセス許可があることを確認してください。

## 必要な IAM 許可
<a name="s3tables-required-iam-permissions"></a>

S3 Tables 統合を有効にするには、IAM プリンシパルに次のアクセス許可が必要です。

**AWS Glue アクセス許可**:
+ `glue:CreateCatalog` – `s3tablescatalog` フェデレーテッドカタログの作成に必要です
+ `glue:GetCatalog` – カタログの詳細を表示するために必要です
+ `glue:GetDatabase` – S3 名前空間をデータベースとして表示するために必要です
+ `glue:GetTable` – S3 テーブルを表示するために必要です
+ `glue:passConnection` – 呼び出し元プリンシパルに対し、`aws:s3tables` 接続を AWS Glue サービスに委任する権限を付与します

**S3 Tables アクセス許可** (IAM アクセスコントロール用):
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## IAM ポリシーの例
<a name="s3tables-iam-policy-example"></a>

次の IAM ポリシーは、IAM モードで S3 Tables と Data Catalog の統合を有効にするために必要な最小限のアクセス許可を提供します。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

# S3 Tables と Data Catalog の統合の有効化
<a name="enable-s3-tables-catalog-integration"></a>

Amazon S3 マネジメントコンソールまたは AWS CLI を使用して、AWS Glue Data Catalog との S3 Tables 統合を有効にできます。コンソールを使用して統合を有効にすると、AWS は `s3tablescatalog` という名前のフェデレーテッドカタログを作成し、AWS アカウントとリージョン内のすべての S3 テーブルバケットを自動的に検出してマウントします。

## Amazon S3 マネジメントコンソールを使用した S3 Tables 統合の有効化
<a name="enable-s3-tables-console"></a>

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 左側のナビゲーションペインで、**[テーブルバケット]** を選択します。

1. **[テーブルバケットを作成]** を選択します。

1. **テーブルバケット名**を入力します。**[統合を有効にする]** チェックボックスがオンになっていることを確認してください。

1. **[テーブルバケットを作成]** を選択します。

Amazon S3 は、そのリージョンでテーブルバケットを自動的に統合します。任意のリージョンでテーブルバケットを初めて統合すると、Amazon S3 はそのリージョンの Data Catalog に `s3tablescatalog`　を作成します。

カタログが作成されると、アカウントとリージョン内のすべての S3 テーブルバケットが子カタログとして自動的にマウントされます。データベース (名前空間) とテーブルを表示するには、Data Catalog のカタログに移動します。

## AWS CLI を使用した S3 Tables 統合の有効化
<a name="enable-s3-tables-cli"></a>

`s3tablescatalog` カタログを作成するには、`glue create-catalog` コマンドを使用します。

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

*region* と *account-id* をお使いの AWS リージョンと AWS アカウント ID に置き換えます。

## 統合の検証
<a name="verify-s3-tables-integration"></a>

カタログを作成したら、子カタログを一覧表示することで、S3 テーブルバケットがマウントされていることを確認できます。

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# S3 Tables カタログへのデータベースとテーブルの追加
<a name="create-databases-tables-s3-catalog"></a>

リージョンの Data Catalog でカタログ、データベース、テーブルを一覧表示および作成するために必要なアクセス許可があることを確認します。AWS アカウントとリージョンで S3 Tables 統合が有効になっていることを確認します。

## S3 Tables カタログへのデータベースの追加
<a name="add-database-s3-tables-catalog"></a>

### データベースの追加 (コンソール)
<a name="add-database-s3-tables-console"></a>

1. [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home) で AWS Glue コンソール を開きます。

1. 左のナビゲーションペインの **[データベース]** を選択します。

1. **[データベースの追加]** を選択します。

1. **[Glue Database in S3 Tables Federated Catalog]** (S3 Tables Federated Catalog の Glue データベース) を選択します。

1. データベースに一意の名前を入力します。

1. S3 Tables のテーブルバケットにマッピングするターゲットカタログを選択します。

1. **[Create Database]** (データベースの作成) を選択します。

### データベースの追加 (AWS CLI)
<a name="add-database-s3-tables-cli"></a>

```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## S3 Tables カタログへのテーブルの追加
<a name="add-table-s3-tables-catalog"></a>

### テーブルの追加 (コンソール)
<a name="add-table-s3-tables-console"></a>

1. [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home) で AWS Glue コンソール を開きます。

1. 左のナビゲーションペインで、**[テーブル]** を選択します。

1. カタログドロップダウンで適切な S3 Tables カタログを選択します。

1. [**Add table**] (テーブルの追加) を選択します。

1. テーブルの一意の名前を入力します。

1. カタログドロップダウンで正しい S3 Tables カタログが選択されていることを確認します。

1. データベースドロップダウンでデータベースを選択します。

1. JSON を入力するか、各列を個別に追加して、テーブルスキーマを入力します。

1. **[テーブルの作成]** を選択します。

### テーブルの追加 (AWS CLI)
<a name="add-table-s3-tables-cli"></a>

```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# S3 Tables カタログオブジェクトの共有
<a name="share-s3-tables-catalog"></a>

IAM アクセスコントロールを使用する場合、同一アカウント共有の AWS Glue リソースリンクを使用して、S3 Tables カタログオブジェクトを他のユーザーと共有できます。クロスアカウント共有では、S3 テーブルバケットを別の AWS アカウントと共有でき、受信者アカウントの IAM ロールまたはユーザーは、共有テーブルバケットを使用して AWS Glue カタログオブジェクトを作成できます。

## リソースリンクを使用した同一アカウント内での共有
<a name="share-s3-tables-resource-links"></a>

リソースリンクを使用すると、AWS Glue デフォルトカタログに表示される `s3tablescatalog` の AWS Glue データベースとテーブルへの参照を作成できます。これは、データアクセスの整理やテーブルの論理グループの作成に役立ちます。

### リソースリンクの作成 (コンソール)
<a name="share-s3-tables-resource-link-console"></a>

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソール を開きます。

1. ナビゲーションペインで、**[カタログ]** を選択します。

1. **[カタログ]** リストで、**[s3tablescatalog]** を選択します。

1. `s3tablescatalog` から共有するテーブルを選択します。

1. **[アクション]** で、**[リソースリンクの作成]** を選択します。

1. **[リソースリンク名]** にリソースリンクの名前を入力します。

1. **[ターゲットデータベース]** で、リソースリンクを作成するデータベースを選択します。

1. (オプション) **[説明]** に説明を入力します。

1. **[作成]** を選択します。

リソースリンクはターゲットデータベースに表示され、`s3tablescatalog` の元のテーブルを指します。

### リソースリンクの作成 (AWS CLI)
<a name="share-s3-tables-resource-link-cli"></a>

データベースリソースリンクの作成:

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

テーブルリソースリンクの作成:

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# S3 Tables 統合の管理
<a name="manage-s3-tables-catalog-integration"></a>

## AWS Lake Formation の有効化
<a name="manage-s3-tables-enable-lf"></a>

データガバナンス要件をスケールする場合は、S3 Tables カタログで AWS Lake Formation を有効にできます。AWS Lake Formation には、きめ細かなアクセスを管理し、タグベースのアクセスを使用してアクセス許可をスケールし、S3 Tables のテーブルへのグループ関連付けなどのユーザー属性に基づいてアクセス許可を付与するデータベーススタイルの許可が用意されています。

AWS Lake Formation マネジメントコンソールに移動して、AWS Glue で S3 Tables カタログの AWS Lake Formation を有効にします。詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Creating an S3 Tables catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)」(S3 Tables カタログの作成) を参照してください。

## S3 Tables 統合の削除
<a name="manage-s3-tables-delete-integration"></a>

Data Catalog でカタログ統合を削除することで、S3 Tables 統合を削除できます。このオペレーションは、Data Catalog 内のメタデータのみを削除し、S3 Tables のリソースは削除しません。

AWS Glue でカタログオブジェクトを一覧表示、編集、削除するために必要なアクセス許可があることを確認します。

### 統合の削除 (コンソール)
<a name="delete-s3-tables-console"></a>

1. [https://console.aws.amazon.com/glue/home](https://console.aws.amazon.com/glue/home) で AWS Glue コンソール を開きます。

1. ナビゲーションペインで、**[カタログ]** を選択します。

1. **[カタログ]** リストで、**[s3tablescatalog]** を選択します。

1. **[削除]** を選択します。

1. カタログを削除すると、Data Catalog 内の関連するカタログオブジェクトもすべて削除されることを確認します。

1. **[削除]** を選択します。

### 統合の削除 (AWS CLI)
<a name="delete-s3-tables-cli"></a>

```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```