Amazon S3 Tables と AWS 分析サービスの統合
このトピックでは、Amazon S3 のテーブルバケットを AWS 分析サービスと統合するために必要な前提条件と手順について説明します。統合の仕組みの概要については、「S3 Tables の統合の概要」を参照してください。
注記
この統合では、AWS Glue および AWS Lake Formation サービスが使用され、AWS Glue リクエストとストレージのコストが発生する可能性があります。詳細については、AWS Glue の料金
S3 テーブルでクエリを実行する場合は、追加料金が適用されます。詳細については、使用しているクエリエンジンの料金情報を参照してください。
統合の前提条件
テーブルバケットを AWS 分析サービスと統合するには、次の前提条件が必要です。
AWSLakeFormationDataAdmin AWS マネージドポリシーを AWS Identity and Access Management (IAM) プリンシパルにアタッチして、そのユーザーをデータレイク管理者にします。データレイク管理者の作成方法の詳細については、「AWS Lake Formation デベロッパーガイド」の「データレイク管理者を作成する」を参照してください。
-
glue:PassConnection
オペレーションのアクセス許可を IAM プリンシパルに追加します。 -
lakeformation:RegisterResource
およびlakeformation:RegisterResourceWithPrivilegedAccess
オペレーションに対するアクセス許可を IAM プリンシパルに追加します。
重要
テーブルを作成するときは、テーブル名とテーブル定義にすべて小文字を使用してください。例えば、列名がすべて小文字であることを確認します。テーブル名またはテーブル定義に大文字が含まれている場合、テーブルは AWS Lake Formation または AWS Glue Data Catalog ではサポートされていません。この場合、テーブルバケットが AWS 分析サービスと統合されていても、テーブルは Amazon Athena などの AWS 分析サービスに表示されません。
テーブル定義に大文字が含まれている場合、Athena で SELECT
クエリを実行すると、次のエラーメッセージが表示されます。「GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.」
テーブルバケットと AWS 分析サービスの統合
この統合は、AWS リージョンごとに 1 回行う必要があります。
重要
AWS 分析サービス統合では、WithPrivilegedAccess
Lake Formation API オペレーションの registerResource
オプションを使用して S3 テーブルバケットを登録するようになりました。この統合により、CreateCatalog
AWS Glue API オペレーションの AllowFullTableExternalDataAccess
オプションを使用して AWS Glue Data Catalog に s3tablescatalog
カタログが作成されるようにもなりました。
プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上しているため、移行することをお勧めします。更新された統合に移行するには、「更新された統合プロセスへの移行」を参照してください。
Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 左側のナビゲーションペインで、[テーブルバケット] を選択します。
[テーブルバケットを作成] を選択します。
[テーブルバケットを作成] ページが開きます。
テーブルバケット名を入力します。[統合を有効にする] チェックボックスがオンになっていることを確認してください。
[テーブルバケットを作成] を選択します。Amazon S3 は、そのリージョンでテーブルバケットを自動的に統合しようとします。
任意のリージョンのテーブルバケットを初めて統合すると、Amazon S3 はユーザーに代わって新しい IAM サービスロールを作成します。このロールにより、Lake Formation はアカウント内のすべてのテーブルバケットにアクセスし、AWS Glue Data Catalog のテーブルへのフェデレーションアクセスが可能になります。
AWS CLI を使用してテーブルバケットを統合するには
以下の手順は、AWS CLI を使用してテーブルバケットを統合する方法を示しています。これらの手順を使用するには、
を実際の情報に置き換えます。user input placeholders
テーブルバケットを作成します。
aws s3tables create-table-bucket \ --region
us-east-1
\ --nameamzn-s3-demo-table-bucket
-
Lake Formation がテーブルリソースにアクセスできるようにする IAM サービスロールを作成します。
-
次の信頼ポリシーを含むファイルを
Role-Trust-Policy.json
という名前で作成します。次のコマンドを使用して IAM サービスロールを作成します。
aws iam create-role \ --role-name
S3TablesRoleForLakeFormation
\ --assume-role-policy-document file://Role-Trust-Policy.json
-
次のポリシーを含むファイルを
LF-GluePolicy.json
という名前で作成します。次のコマンドを使用してポリシーをロールにアタッチします。
aws iam put-role-policy \ --role-name
S3TablesRoleForLakeFormation
\ --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \ --policy-document file://LF-GluePolicy.json
-
-
以下を含むファイルを
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
-
次のカタログを含むファイルを
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
次のコマンドを使用して、
s3tablescatalog
カタログが AWS Glue に追加されたことを確認します。aws glue get-catalog --catalog-id s3tablescatalog
AWS 分析サービス統合プロセスが更新されました。プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上しているため、以下の手順を使用して移行することをお勧めします。移行または統合プロセスの詳細については、「AWS Lake Formation デベロッパーガイド」の「AWS Glue Data Catalog での Amazon S3 Tables カタログの作成」を参照してください。
-
https://console.aws.amazon.com/lakeformation/
で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「AWS Lake Formation デベロッパーガイド」の「データレイク管理者を作成する」を参照してください。 -
以下の手順で
s3tablescatalog
カタログを削除します。-
左側のナビゲーションペインで、[カタログ] を選択します。
-
[カタログ] リストで
s3tablescatalog
カタログの横にあるオプションボタンを選択します。Actions メニューで、Delete を選択します。
-
-
以下の手順で
s3tablescatalog
カタログのデータロケーションの登録を解除します。-
左側のナビゲーションペインで、[管理] セクションに移動し、[データレイクのロケーション] を選択します。
-
s3tablescatalog
データレイクロケーション (s3://tables:
など) の横にあるオプションボタンを選択します。region
:account-id
:bucket/* -
[アクション] メニューで、[削除] を選択します。
-
表示される確認ダイアログボックスで、[削除] を選択します。
-
-
s3tablescatalog
カタログとデータレイクロケーションを削除したので、更新された統合プロセスを使用して、テーブルバケットを AWS 分析サービスと統合する手順に従うことができます。
注記
統合された AWS 分析サービスで SSE-KMS によって暗号化されたテーブルを使用する場合は、ユーザーが使用するロールに、暗号化オペレーションで AWS KMS キーを使用するアクセス許可が必要です。詳細については、「 統合された AWS 分析サービスにおいて暗号化されたテーブルを使用するアクセス許可を IAM プリンシパルに付与する」を参照してください。
IAM プリンシパルを統合すると、テーブルにアクセスするための Lake Formation アクセス許可が付与されます。他の IAM プリンシパルにテーブルへのアクセスを許可する場合は、それらのプリンシパルにテーブルに対する Lake Formation アクセス許可を付与する必要があります。詳細については、「Lake Formation を使用したテーブルまたはデータベースへのアクセスの管理」を参照してください。