將 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 區域皆必須完成一次這項整合。

重要

AWS 分析服務整合現在會使用 registerResource Lake Formation API 操作中的 WithPrivilegedAccess 選項,來註冊 S3 資料表儲存貯體。整合現在也會使用 CreateCatalog AWS Glue API 操作中的 AllowFullTableExternalDataAccess 選項,在 AWS Glue Data Catalog 中建立 s3tablescatalog 目錄。

如果您設定與預覽版本整合,您可以繼續使用目前的整合。不過,更新的整合程序可提供改善的效能,因此我們建議進行移轉。若要移轉至更新的整合,請參閱 移轉至更新的整合程序

  1. 開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon 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
      { "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
    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 目錄旁的選項按鈕。在操作功能表上,選擇刪除

  3. 執行下列動作,取消註冊 s3tablescatalog 目錄的資料位置:

    • 在左側導覽窗格中,前往管理區段,然後選擇資料湖位置

    • 選取 s3tablescatalog 資料湖位置旁的選項按鈕,例如 s3://tables:region:account-id:bucket/*

    • 動作功能表上,選擇移除

    • 在出現的確認對話方塊中,選擇移除

  4. 既然現在您已刪除 s3tablescatalog 目錄和資料湖位置,您可以依照步驟使用更新的整合程序,將資料表儲存貯體與 AWS 分析服務整合

注意

如果您想要在整合 AWS 分析服務中使用 SSE-KMS 加密資料表,您使用的角色需要具有權限,才能將 AWS KMS 金鑰用於加密操作。如需更多詳細資訊,請參閱 授予 IAM 主體在整合的 AWS 分析服務中使用加密資料表的權限

當您整合 IAM 主體獲得存取資料表的 Lake Formation 許可權後,如果您想要允許其他 IAM 主體存取資料表,您需要將資料表的 Lake Formation 許可權授予這些主體。如需更多詳細資訊,請參閱 使用 Lake Formation 管理對資料表或資料庫的存取