

# 将 Amazon S3 表类数据存储服务与 AWS 分析服务集成
<a name="s3-tables-integrating-aws"></a>

本主题介绍将 Amazon S3 表存储桶与 AWS 分析服务集成的先决条件和过程。有关集成工作原理的概述，请参阅 [S3 表类数据存储服务集成概述](s3-tables-integration-overview.md)。

**注意**  
此集成使用 AWS Glue Data Catalog，可能会产生 AWS Glue 请求和存储成本。有关更多信息，请参阅 [AWS Glue 定价](https://aws.amazon.com/glue/pricing/)。  
在 S3 表类数据存储服务上运行查询需支付额外费用。有关更多信息，请参阅您使用的查询引擎的定价信息。

## 集成的先决条件
<a name="table-integration-prerequisites"></a>

要将表存储桶与 AWS 分析服务集成，需要满足以下先决条件：
+ [创建表存储桶。](s3-tables-buckets-create.md)
+ 向 AWS Identity and Access Management（IAM）主体添加以下 AWS Glue 权限：
  + `glue:CreateCatalog`，这是在数据目录中创建 `s3tablescatalog` 联合目录所必需的
  + `glue:PassConnection` 向调用主体授予将 `aws:s3tables` 连接创建委托给 Amazon S3 服务的权限。
+ [更新到 AWS Command Line Interface（AWS CLI）的最新版本](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。

**重要**  
创建表时，请确保在表名称和表定义中全部使用小写字母。例如，请确保列名称全部为小写。如果表名称或表定义包含大写字母，则 AWS Lake Formation 或 AWS Glue Data Catalog 不支持该表。在这种情况下，Amazon Athena 等 AWS 分析服务将无法看到您的表，即使表存储桶与 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 分析服务集成
<a name="table-integration-procedures"></a>

默认情况下，您可以使用 IAM 访问控制将表存储桶与数据目录和 AWS 分析服务集成，也可以选择使用 Lake Formation 访问控制。

使用 IAM 访问控制进行集成时，您需要 IAM 权限才能访问 Amazon S3 表存储桶和表、数据目录对象以及您正在使用的查询引擎。如果您选择使用 Lake Formation 进行集成，则 IAM 访问控制和 Lake Formation 授权将同时决定对数据目录资源的访问权限。请参阅 [https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)，了解有关 Lake Formation 集成的更多信息。

以下各节介绍如何使用 Amazon S3 管理控制台或 AWS CLI 来配置与 IAM 访问控制的集成。

### 使用 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 将尝试自动在该区域中集成您的表存储桶。

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

**使用 AWS CLI 将表存储桶与 IAM 访问控制集成**

以下步骤展示了如何使用 AWS CLI 来集成表存储桶。要使用这些步骤，请将 `{{user input placeholders}}` 替换为您自己的信息。

1. 创建表存储桶。

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

1. 创建一个名为 `catalog.json` 的文件，其中包含以下目录：

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

   使用以下命令创建 `s3tablescatalog` 目录。创建此目录后，将使用与表存储桶、命名空间和表对应的对象填充 AWS Glue Data Catalog。

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

1. 使用以下命令验证是否在 AWS Glue 中添加了 `s3tablescatalog` 目录：

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

### 迁移到更新的集成流程
<a name="migrate-integrate-console"></a>

AWS 分析服务集成流程已更新，以默认使用 IAM 权限。如果您已经设置了集成，则可以继续使用当前的集成。但是，如果您想将现有集成改为使用 IAM 权限，请参阅 [https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)。您也可以重做集成，以删除 AWS Glue Data Catalog 和 AWS Lake Formation 中的现有设置，然后重新运行集成。这将移除所有现有的 Lake Formation 授权和对于 `s3tablescatalog` 的关联访问权限。

1. 打开 AWS Lake Formation 控制台（网址为 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)），并以数据湖管理员身份登录。有关如何创建数据湖管理员的更多信息，请参阅《AWS Lake Formation Developer Guide》**中的 [Create a data lake administrator](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)。

1. 通过执行以下操作删除 `s3tablescatalog` 目录：
   + 在左侧导航窗格中，选择**目录**。
   + 在**目录**列表中，选择 `s3tablescatalog` 目录旁边的选项按钮。在**操作** 菜单上，选择**删除**。

1. 通过执行以下操作注销 `s3tablescatalog` 目录的数据位置：
   + 在左侧导航窗格中，转到**管理**部分，然后选择**数据湖位置**。
   + 例如，选择 `s3tablescatalog` 数据湖位置（例如 `s3://tables:{{region}}:{{account-id}}:bucket/*`）旁边的选项按钮。
   + 在**操作**菜单上，选择**移除**。
   + 在出现的确认对话框中，选择**移除**。

1. 现在，您已经删除了 `s3tablescatalog` 目录和数据湖位置，可以按照以下步骤，使用更新的集成流程[将表存储桶与 AWS 分析服务集成](#table-integration-procedures)。

**注意**  
如果您想在集成的 AWS 分析服务中使用通过 SSE-KMS 加密的表，则您使用的角色需要拥有使用您的 AWS KMS 密钥进行加密操作的权限。有关更多信息，请参阅 [向 IAM 主体授予在集成的 AWS 分析服务中使用加密表的权限](s3-tables-kms-permissions.md#tables-kms-integration-permissions)。

**后续步骤**
+ [创建命名空间](s3-tables-namespace-create.md).
+ [创建表](s3-tables-create.md).