Amazon S3 Tables と AWS 分析サービスの統合 - Amazon Simple Storage Service

Amazon S3 Tables と AWS 分析サービスの統合

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

注記

この統合では、AWS Glue および AWS Lake Formation サービスが使用され、AWS Glue リクエストとストレージのコストが発生する可能性があります。詳細については、AWS Glue の料金を参照してください。

S3 テーブルでクエリを実行する場合は、追加料金が適用されます。詳細については、使用しているクエリエンジンの料金情報を参照してください。

統合の前提条件

テーブルバケットを AWS 分析サービスと統合するには、次の前提条件が必要です。

重要

テーブルを作成するときは、テーブル名とテーブル定義にすべて小文字を使用してください。例えば、列名がすべて小文字であることを確認します。テーブル名またはテーブル定義に大文字が含まれている場合、テーブルは 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 カタログが作成されるようにもなりました。

プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上しているため、移行することをお勧めします。更新された統合に移行するには、「更新された統合プロセスへの移行」を参照してください。

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

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

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

    [テーブルバケットを作成] ページが開きます。

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

  5. [テーブルバケットを作成] を選択します。Amazon S3 は、そのリージョンでテーブルバケットを自動的に統合しようとします。

任意のリージョンのテーブルバケットを初めて統合すると、Amazon S3 はユーザーに代わって新しい IAM サービスロールを作成します。このロールにより、Lake Formation はアカウント内のすべてのテーブルバケットにアクセスし、AWS Glue Data Catalog のテーブルへのフェデレーションアクセスが可能になります。

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

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

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

    aws s3tables create-table-bucket \ --region us-east-1 \ --name amzn-s3-demo-table-bucket
  2. Lake Formation がテーブルリソースにアクセスできるようにする IAM サービスロールを作成します。

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

      JSON

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

      aws iam create-role \ --role-name S3TablesRoleForLakeFormation \ --assume-role-policy-document file://Role-Trust-Policy.json
    2. 次のポリシーを含むファイルを 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
  3. 以下を含むファイルを 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
  4. 次のカタログを含むファイルを 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
  5. 次のコマンドを使用して、s3tablescatalog カタログが AWS Glue に追加されたことを確認します。

    aws glue get-catalog --catalog-id s3tablescatalog

AWS 分析サービス統合プロセスが更新されました。プレビューリリースで統合を設定した場合は、現在の統合を引き続き使用できます。ただし、更新された統合プロセスではパフォーマンスが向上しているため、以下の手順を使用して移行することをお勧めします。移行または統合プロセスの詳細については、「AWS Lake Formation デベロッパーガイド」の「AWS Glue Data Catalog での Amazon S3 Tables カタログの作成」を参照してください。

  1. https://console.aws.amazon.com/lakeformation/ で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「AWS Lake Formation デベロッパーガイド」の「データレイク管理者を作成する」を参照してください。

  2. 以下の手順で s3tablescatalog カタログを削除します。

    • 左側のナビゲーションペインで、[カタログ] を選択します。

    • [カタログ] リストで s3tablescatalog カタログの横にあるオプションボタンを選択します。Actions メニューで、Delete を選択します。

  3. 以下の手順で s3tablescatalog カタログのデータロケーションの登録を解除します。

    • 左側のナビゲーションペインで、[管理] セクションに移動し、[データレイクのロケーション] を選択します。

    • s3tablescatalog データレイクロケーション (s3://tables:region:account-id:bucket/* など) の横にあるオプションボタンを選択します。

    • [アクション] メニューで、[削除] を選択します。

    • 表示される確認ダイアログボックスで、[削除] を選択します。

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

注記

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

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