

# Amazon S3 Tables と AWS 分析サービスの統合
<a name="s3-tables-integrating-aws"></a>

このトピックでは、Amazon S3 のテーブルバケットを AWS 分析サービスと統合するために必要な前提条件と手順について説明します。統合の仕組みの概要については、「[S3 Tables の統合の概要](s3-tables-integration-overview.md)」を参照してください。

**注記**  
この統合では、AWS Glue および AWS Lake Formation サービスが使用され、AWS Glue リクエストとストレージのコストが発生する可能性があります。詳細については、[AWS Glue の料金](https://aws.amazon.com/glue/pricing/)を参照してください。  
S3 テーブルでクエリを実行する場合は、追加料金が適用されます。詳細については、使用しているクエリエンジンの料金情報を参照してください。

## 統合の前提条件
<a name="table-integration-prerequisites"></a>

テーブルバケットを AWS 分析サービスと統合するには、次の前提条件が必要です。
+ [テーブルバケットを作成します。](s3-tables-buckets-create.md)
+ [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLakeFormationDataAdmin.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLakeFormationDataAdmin.html) AWS マネージドポリシーを AWS Identity and Access Management (IAM) プリンシパルにアタッチして、そのユーザーをデータレイク管理者にします。データレイク管理者の作成方法の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[データレイク管理者を作成する](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)」を参照してください。
+ `glue:PassConnection` オペレーションのアクセス許可を IAM プリンシパルに追加します。
+ `lakeformation:RegisterResource` および `lakeformation:RegisterResourceWithPrivilegedAccess` オペレーションに対するアクセス許可を IAM プリンシパルに追加します。
+ [ () を最新バージョンに更新します。AWS Command Line InterfaceAWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)

**重要**  
テーブルを作成するときは、テーブル名とテーブル定義にすべて小文字を使用してください。例えば、列名がすべて小文字であることを確認します。テーブル名またはテーブル定義に大文字が含まれている場合、テーブルは AWS Lake Formation または AWS Glue Data Catalog ではサポートされていません。この場合、テーブルバケットが AWS 分析サービスと統合されていても、テーブルは Amazon Athena などの AWS 分析サービスに表示されません。  
テーブル定義に大文字が含まれている場合、Athena で `SELECT` クエリを実行すると、次のエラーメッセージが表示されます。「GENERIC\$1INTERNAL\$1ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.」

## テーブルバケットと AWS 分析サービスの統合
<a name="table-integration-procedures"></a>

Amazon S3 Tables は AWS Glue Data Catalog (データカタログ) と統合され、カタログを Lake Formation データロケーションとして登録します。この登録は、Lake Formation コンソールから、またはサービス API を使用して設定できます。ロケーションを登録するときは、そのロケーションに対する読み取り/書き込み許可を、Lake Formation に登録されたロールに付与する IAM ロールを指定する必要があります。Lake Formation は、統合された AWS のサービスに一時的な認証情報を供給するときに、その役割を引き受けます。

プリンシパルタグに基づいて IAM ユーザーと IAM ロールを制限する IAM または S3 Tables リソースベースのポリシーがある場合は、Lake Formation が Amazon S3 データにアクセスするために使用する IAM ロール (LakeFormationDataAccessRole など) に同じプリンシパルタグをアタッチし、このロールに必要なアクセス許可を付与する必要があります。これは、タグベースのアクセスコントロールポリシーが S3 Tables 分析統合で正しく機能するために必要です。

この統合は、AWS リージョンごとに 1 回設定する必要があります。

**重要**  
AWS 分析サービス統合では、`WithPrivilegedAccess` Lake Formation API オペレーションの `registerResource` オプションを使用して S3 テーブルバケットを登録するようになりました。この統合により、`CreateCatalog` AWS Glue API オペレーションの `AllowFullTableExternalDataAccess` オプションを使用して AWS Glue Data Catalog に `s3tablescatalog` カタログが作成されるようにもなりました。  
プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上しているため、移行することをお勧めします。更新された統合に移行するには、「[更新された統合プロセスへの移行](#migrate-integrate-console)」を参照してください。

### S3 コンソールの使用
<a name="integrate-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 はユーザーに代わって新しい IAM サービスロールを作成します。このロールにより、Lake Formation はアカウント内のすべてのテーブルバケットにアクセスし、AWS Glue Data Catalog のテーブルへのフェデレーションアクセスが可能になります。

### の使用AWS CLI
<a name="integrate-cli"></a>

**AWS CLI を使用してテーブルバケットを統合するには**

以下の手順は、AWS CLI を使用してテーブルバケットを統合する方法を示しています。これらの手順を使用するには、`user input placeholders` を実際の情報に置き換えます。

1. テーブルバケットを作成します。

   ```
   aws s3tables create-table-bucket \
   --region us-east-1 \
   --name amzn-s3-demo-table-bucket
   ```

1. Lake Formation がテーブルリソースにアクセスできるようにする IAM サービスロールを作成します。

   1. 次の信頼ポリシーを含むファイルを `Role-Trust-Policy.json` という名前で作成します。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
            {
              "Sid": "LakeFormationDataAccessPolicy",
              "Effect": "Allow",
              "Principal": {
                "Service": "lakeformation.amazonaws.com"
              },
              "Action": [
                  "sts:AssumeRole",
                  "sts:SetContext",
                  "sts:SetSourceIdentity"
              ],
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": "111122223333"
                }
              }
            }
          ]
      }
      ```

------

      次のコマンドを使用して IAM サービスロールを作成します。

      ```
      aws iam create-role \
      --role-name S3TablesRoleForLakeFormation \
      --assume-role-policy-document file://Role-Trust-Policy.json
      ```

   1. 次のポリシーを含むファイルを `LF-GluePolicy.json` という名前で作成します。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "LakeFormationPermissionsForS3ListTableBucket",
                  "Effect": "Allow",
                  "Action": [
                      "s3tables:ListTableBuckets"
                  ],
                  "Resource": [
                      "*"
                  ]
              },
              {
                  "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket",
                  "Effect": "Allow",
                  "Action": [
                      "s3tables:CreateTableBucket",
                      "s3tables:GetTableBucket",
                      "s3tables:CreateNamespace",
                      "s3tables:GetNamespace",
                      "s3tables:ListNamespaces",
                      "s3tables:DeleteNamespace",
                      "s3tables:DeleteTableBucket",
                      "s3tables:CreateTable",
                      "s3tables:DeleteTable",
                      "s3tables:GetTable",
                      "s3tables:ListTables",
                      "s3tables:RenameTable",
                      "s3tables:UpdateTableMetadataLocation",
                      "s3tables:GetTableMetadataLocation",
                      "s3tables:GetTableData",
                      "s3tables:PutTableData"
                  ],
                  "Resource": [
                      "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
                  ]
              }
          ]
      }
      ```

------

      次のコマンドを使用してポリシーをロールにアタッチします。

      ```
      aws iam put-role-policy \
      --role-name S3TablesRoleForLakeFormation  \
      --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \
      --policy-document file://LF-GluePolicy.json
      ```

1. 以下を含むファイルを `input.json` という名前で作成します。

   ```
   {
       "ResourceArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
   
       "WithFederation": true,
       "RoleArn": "arn:aws:iam::111122223333:role/S3TablesRoleForLakeFormation"
   }
   ```

   次のコマンドを使用してテーブルバケットを Lake Formation に登録します。

   ```
   aws lakeformation register-resource \
   --region us-east-1 \
   --with-privileged-access \
   --cli-input-json file://input.json
   ```

1. 次のカタログを含むファイルを `catalog.json` という名前で作成します。

   ```
   {
      "Name": "s3tablescatalog",
      "CatalogInput": {
         "FederatedCatalog": {
             "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
             "ConnectionName": "aws:s3tables"
          },
          "CreateDatabaseDefaultPermissions":[],
          "CreateTableDefaultPermissions":[],
          "AllowFullTableExternalDataAccess": "True"
      }
   }
   ```

   次のコマンドを使用して `s3tablescatalog` カタログを作成します。このカタログを作成すると、テーブルバケット、名前空間、テーブルに対応するオブジェクトが AWS Glue Data Catalog に入力されます。

   ```
   aws glue create-catalog \
   --region us-east-1 \
   --cli-input-json file://catalog.json
   ```

1. 次のコマンドを使用して、`s3tablescatalog` カタログが AWS Glue に追加されたことを確認します。

   ```
   aws glue get-catalog --catalog-id s3tablescatalog
   ```

### 更新された統合プロセスへの移行
<a name="migrate-integrate-console"></a>

AWS 分析サービス統合プロセスが更新されました。プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上しているため、以下の手順を使用して移行することをお勧めします。移行または統合プロセスの詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[AWS Glue Data Catalog での Amazon S3 Tables カタログの作成](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)」を参照してください。

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[データレイク管理者を作成する](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)」を参照してください。

1. 以下の手順で `s3tablescatalog` カタログを削除します。
   + 左側のナビゲーションペインで、**[カタログ]** を選択します。
   + **[カタログ]** リストで `s3tablescatalog` カタログの横にあるオプションボタンを選択します。**Actions** メニューで、**Delete** を選択します。

1. 以下の手順で `s3tablescatalog` カタログのデータロケーションの登録を解除します。
   + 左側のナビゲーションペインで、**[管理]** セクションに移動し、**[データレイクのロケーション]** を選択します。
   + `s3tablescatalog` データレイクロケーション (`s3://tables:region:account-id:bucket/*` など) の横にあるオプションボタンを選択します。
   + **[アクション]** メニューで、**[削除]** を選択します。
   + 表示される確認ダイアログボックスで、**[削除]** を選択します。

1. `s3tablescatalog` カタログとデータレイクロケーションを削除したので、更新された統合プロセスを使用して、[テーブルバケットを AWS 分析サービスと統合する](#table-integration-procedures)手順に従うことができます。

**注記**  
統合された AWS 分析サービスで SSE-KMS によって暗号化されたテーブルを使用する場合は、ユーザーが使用するロールに、暗号化オペレーションで AWS KMS キーを使用するアクセス許可が必要です。詳細については、「[統合された AWS 分析サービスにおいて暗号化されたテーブルを使用するアクセス許可を IAM プリンシパルに付与する](s3-tables-kms-permissions.md#tables-kms-integration-permissions)」を参照してください。

IAM プリンシパルを統合すると、テーブルにアクセスするための Lake Formation アクセス許可が付与されます。他の IAM プリンシパルにテーブルへのアクセスを許可する場合は、それらのプリンシパルにテーブルに対する Lake Formation アクセス許可を付与する必要があります。詳細については、「[Lake Formation を使用したテーブルまたはデータベースへのアクセスの管理](grant-permissions-tables.md)」を参照してください。

**次のステップ**
+ [ 名前空間を作成します。](s3-tables-namespace-create.md).
+ [テーブルの作成](s3-tables-create.md).