

# 创建数据来源连接
<a name="connect-to-a-data-source"></a>

要使用 Athena 数据来源连接器，您需要创建 AWS Glue 连接，用来存储有关该连接器和数据来源的连接信息。创建连接时，您需要为数据来源指定一个名称，以用于在 SQL 查询中引用您的数据来源。

您可以使用[控制台](connect-to-a-data-source-console-steps.md)或 [CreateDataCatalog API](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateDataCatalog.html) 操作在 Athena 中创建和配置数据来源连接。

**Topics**
+ [在 Athena 中创建和使用数据来源的权限](connect-to-a-data-source-permissions.md)
+ [使用 Athena 控制台连接数据来源](connect-to-a-data-source-console-steps.md)
+ [使用 AWS Serverless Application Repository 部署数据来源连接器](connect-data-source-serverless-app-repo.md)
+ [为数据来源连接器或 AWS Glue 连接创建 VPC](athena-connectors-vpc-creation.md)
+ [将 ECR 映像拉取到您的 AWS 账户](pull-ecr-customer-account.md)
+ [将连接注册为 Glue Data Catalog](register-connection-as-gdc.md)
+ [启用跨账户联合查询](xacct-fed-query-enable.md)
+ [更新数据来源连接器](connectors-updating.md)

# 在 Athena 中创建和使用数据来源的权限
<a name="connect-to-a-data-source-permissions"></a>

要创建和使用数据来源，您需要以下权限集。
+ AmazonAthenaFullAccess，提供对 Amazon Athena 的完全访问权限，以及对启用查询、写入结果和数据管理所需依赖项的限定访问权限。有关更多信息，请参阅《AWS 托管式策略参考指南》中的 [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html)。
+ 调用 CreateDataCatalog API 的权限。只有在创建与 Glue 连接集成的数据来源时，才需要这些权限。有关示例策略的更多信息，请参阅[创建连接器和 Athena 目录所需的权限](athena-catalog-access.md)。
+ 要使用 Lake Formation 精细访问控制，除上面列出的权限外，还需要以下权限。

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:RegisterResource",
          "iam:ListRoles",
          "glue:CreateCatalog",
          "glue:GetCatalogs",
          "glue:GetCatalog"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

------

# 使用 Athena 控制台连接数据来源
<a name="connect-to-a-data-source-console-steps"></a>

您可以使用 Athena 控制台创建和配置数据来源连接。

**创建数据来源连接**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在导航窗格中，选择**数据来源和目录**。

1. 在**数据来源和目录**页面上，选择**创建数据来源**。

1. 对于**选择数据来源**，请选择想要 Athena 查询的数据来源，同时考虑以下准则：
   + 选择与数据来源对应的连接选项。Athena 具有预构建的数据来源连接器，您可以为 MySQL、Amazon DocumentDB 和 PostgreSQL 等源配置这些连接器。
   + 如果您想查询 Amazon S3 中的数据，但您没有使用 Apache Hive 元存储或本页面上的其他联合查询数据来源选项之一，请选择 **S3 - AWS Glue Data Catalog**。Athena 使用 AWS Glue Data Catalog 在 Amazon S3 中存储数据来源的元数据和架构信息。这是默认的（非联合）选项。有关更多信息，请参阅 [使用 AWS Glue Data Catalog 连接数据](data-sources-glue.md)。有关使用此工作流的步骤，请参阅[在 Athena 中注册和使用数据目录](gdc-register.md)。
   + 选择 **S3 - Apache Hive 元存储**，查询在 Amazon S3 中使用 Apache Hive 元存储的数据集。有关此选项的更多信息，请参阅 [将 Athena 连接到 Apache Hive 元存储](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md)。
   + 如果您想创建自己的数据来源连接器，以便与 Athena 一起使用，请选择**自定义或共享连接器**。有关编写数据来源连接器的信息，请参阅 [使用 Athena Query Federation SDK 编写数据来源连接器](connect-data-source-federation-sdk.md)。

1. 选择**下一步**。

1. 在**输入数据来源详细信息**页面中，对于**数据来源名称**，请输入从 Athena 查询该数据来源时要在 SQL 语句中使用的名称。名称最多可以包括 127 个字符，并且在您的账户中必须是唯一的。它在创建后即无法更改。有效字符包括 a-z、A-Z、0-9、\$1（下划线）、@（at 符号）和 -（连字符）。名称 `awsdatacatalog`、`hive`、`jmx` 和 `system` 是 Athena 预留的名称，无法用于数据来源名称。

1. 如果您选择的数据来源与 AWS Glue 连接集成：

   1. 对于 **AWS Glue 连接详细信息**，请输入所需的信息。连接包含连接到特定数据来源所需的属性。所需的属性因连接类型而异。有关与连接器相关的属性的更多信息，请参阅[可用数据来源连接器](connectors-available.md)。有关其他连接属性的信息，请参阅《AWS Glue 用户指南》中的 [AWS Glue 连接属性](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html)**。
**注意**  
更新 Glue 连接属性时，需要重新启动 Lambda 连接器才能获取更新后的属性。要执行此操作，请编辑环境属性，然后在实际上并未更改任何内容的情况下将其保存。
更新 Glue 连接时，以下属性不会在相应的 Lambda 函数中自动更新。您必须手动为 Lambda 函数更新这些属性。  
Lambda VPC 配置 – `security_group_ids`、`subnet_ids`
Lambda 执行角色 – `spill_bucket`、`secret_name`、`spill_kms_key_id`

   1. 对于 **Lambda 执行 IAM 角色**，请选择下列选项中的一个：
      + **创建并使用新的执行角色** –（默认）Athena 会创建一个执行角色，然后使用该角色代表您访问 AWS Lambda 中的资源。Athena 需要此角色才能创建联合数据来源。
      + **使用现有执行角色** – 使用此选项以选择一个现有的执行角色。对于此选项，请从**执行角色**下拉列表中选择要使用的执行角色。

1. 如果您选择的数据来源未与 AWS Glue 连接集成：

   1. 对于 **Lambda function**（Lambda 函数），请选择 **Create Lambda function**（创建 Lambda 函数）。您选择的连接器的函数页将在 AWS Lambda 控制台中打开。该页面包括连接器的详细信息。

   1. 在 **Application settings**（应用程序设置）项下，请仔细阅读每个应用程序设置的说明，然后输入符合您要求的值。

      您看到的应用程序设置因数据来源的连接器而异。所需的最低设置包括：
      + **AthenaCatalogName**：指明其目标数据来源的小写 Lambda 函数名称，例如 `cloudwatchlogs`。
      + **SpillBucket** – 您的账户中用于存储超出 Lambda 函数响应大小限制的数据的 Amazon S3 存储桶。
**注意**  
溢出的数据不会在后续的执行中重复使用，并且可以安全地删除。Athena 不会为您删除这些数据。要管理这些对象，请考虑添加一个将从 Amazon S3 溢出存储桶中删除旧数据的对象生命周期策略。有关更多信息，请参阅《Amazon S3 用户指南》中的[管理对象的生命周期](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

   1. 选中 **I acknowledge that this app creates custom IAM roles and resource policies**（我确认此应用程序创建自定义 IAM 角色和资源策略）。有关更多信息，请选择 **Info (信息)** 链接。

   1. 选择**部署**。部署完成后，Lambda 函数将显示在 Lambda 控制台中的 **Resource**（资源）部分。

      将数据来源连接器部署到您的账户后，可以将 Athena 连接到此数据来源连接器。

   1. 返回至 Athena 控制台中的**输入数据来源详细信息**页面。

   1. 在 **Connection details**（连接详细信息）部分中，选择 **Select or enter a Lambda function**（选择或输入 Lambda 函数）搜索框旁的刷新图标。

   1. 在 Lambda 控制台上选择刚创建的函数名称。将显示 Lambda 函数的 ARN。

1. （可选）对于**标签**，添加要与此数据来源关联的键值对。有关标签的更多信息，请参阅[标记 Athena 资源](tags.md)。

1. 选择**下一步**。

1. 在**检查并创建**页面上，检查数据来源的详细信息。要进行更改，请选择**编辑**。

1. 阅读 **Athena 将在您的账户中创建资源**中的信息。如果您同意，请选择**我确认 Athena 将代表我创建资源**。

1. 选择**创建数据来源**。**Athena** 将为您创建以下资源。
   + Lambda 执行 IAM 角色
   + AWS Glue 连接（仅限数据来源与 AWS Glue 连接兼容时）
   + Lambda 函数

数据来源此页面的**数据来源详细信息**部分显示了有关新连接器的信息。现在，您可以在 Athena 查询中使用连接器。

有关在查询中使用数据连接器的信息，请参阅 [运行联合查询](running-federated-queries.md)。

# 使用 AWS Serverless Application Repository 部署数据来源连接器
<a name="connect-data-source-serverless-app-repo"></a>

要部署数据来源连接器，您可以使用 [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/) 而不使用 AWS Glue 连接。

**注意**  
我们建议您仅在使用自定义连接器或需要使用早期版本连接器时使用 SAR。对于其他情况，我们建议您使用 Athena 控制台。

您可以使用 AWS Serverless Application Repository 找到要使用的连接器，提供连接器所需的参数，然后将连接器部署到您的账户。部署连接器后，您可以使用 Athena 控制台向 Athena 提供数据来源。

## 将连接器部署到您的账户
<a name="connect-data-source-serverless-app-repo-deploying"></a>

**使用 AWS Serverless Application Repository 将数据来源连接器部署到您的账户**

1. 登录 AWS 管理控制台并打开 **Serverless App Repository (无服务器应用程序存储库)**。

1. 在导航窗格中，选择 **Available applications (可用应用程序)**。

1. 选择 **Show apps that create custom IAM roles or resource policies**（显示创建自定义 IAM 角色或资源策略的应用程序）选项。

1. 在搜索框中，键入连接器的名称。有关预构建的 Athena 数据连接器的列表，请参阅 [可用数据来源连接器](connectors-available.md)。

1. 选择连接器的名称。选择连接器后会打开 AWS Lambda 控制台中 Lambda 函数的 **Application details**（应用程序详细信息）页面。

1. 在详细信息页面的右侧，为 **Application settings**（应用程序设置）填写必填信息。最少的必填设置包括以下项。有关适用于 Athena 所构建的数据连接器的其余可配置选项的信息，请参阅 GitHub 上相应的 [Available connectors](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors)（可用连接器）主题。
   + **AthenaCatalogName**：指明其目标数据来源的小写 Lambda 函数名称，例如 `cloudwatchlogs`。
   + **SpillBucket** – 在您的账户指定一个 Amazon S3 存储桶，用于接收来自超出 Lambda 函数响应大小限制的任何大型响应有效负载的数据。

1. 选中 **I acknowledge that this app creates custom IAM roles and resource policies**（我确认此应用程序创建自定义 IAM 角色和资源策略）。有关更多信息，请选择 **Info (信息)** 链接。

1. 在 **Application settings**（应用程序设置）部分的右下角，选择 **Deploy**（部署）。部署完成后，Lambda 函数将显示在 Lambda 控制台中的 **Resource**（资源）部分。

## 使连接器在 Athena 中可用
<a name="connect-data-source-serverless-app-repo-making-the-connector-available-in-athena"></a>

现在您可以使用 Athena 控制台使数据来源连接器对 Athena 可用。

**使数据来源连接器对 Athena 可用**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在导航窗格中，选择**数据来源和目录**。

1. 在**数据来源和目录**页面上，选择**创建数据来源**。

1. 对于**选择数据来源**，选择您在 AWS Serverless Application Repository 中创建了连接器的数据来源。本教程使用 **Amazon CloudWatch Logs** 作为联合数据来源。

1. 选择**下一步**。

1. 在**输入数据来源详细信息**页面中，对于**数据来源名称**，请输入从 Athena 查询数据来源时要在 SQL 语句中使用的名称（例如 `CloudWatchLogs`）。名称最多可以包括 127 个字符，并且在您的账户中必须是唯一的。它在创建后即无法更改。有效字符包括 a-z、A-Z、0-9、\$1（下划线）、@（at 符号）和 -（连字符）。名称 `awsdatacatalog`、`hive`、`jmx` 和 `system` 是 Athena 预留的名称，无法用于数据来源名称。

1. 在 **Connection details**（连接详细信息）部分中，请使用 **Select or enter a Lambda function**（选择或输入 Lambda 函数）框以选择刚创建的函数名称。将显示 Lambda 函数的 ARN。

1. （可选）对于**标签**，添加要与此数据来源关联的键值对。有关标签的更多信息，请参阅[标记 Athena 资源](tags.md)。

1. 选择**下一步**。

1. 在**审核和创建**页面中，查看数据来源的详细信息，然后选择**创建数据来源**。

1. 数据来源此页面的**数据来源详细信息**部分显示了有关新连接器的信息。现在，您可以在 Athena 查询中使用连接器。

   有关在查询中使用数据连接器的信息，请参阅 [运行联合查询](running-federated-queries.md)。

# 为数据来源连接器或 AWS Glue 连接创建 VPC
<a name="athena-connectors-vpc-creation"></a>

部分 Athena 数据来源连接器和 AWS Glue 连接需要使用 VPC 和安全组。本主题介绍如何创建具有子网的 VPC，以及如何为 VPC 创建安全组。在此过程中，您要检索自己创建的 VPC、子网和安全组的 ID。您需要这些 ID 来配置 AWS Glue 连接或数据来源连接器，以便与 Athena 搭配使用。

**为 Athena 数据来源连接器创建 VPC**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 选择**创建 VPC**。

1. 在**创建 VPC** 页面的 **VPC 设置**下，对于**要创建的资源**，选择 **VPC 等**。

1. 在**名称标签自动生成**下，对于**自动生成**，输入一个值，该值将用于为 VPC 中的所有资源生成名称标签。

1. 选择**创建 VPC**。

1. 过程完成后，选择**查看 VPC**。

1. 在 **Details**（详细信息）部分的 **VPC ID** 中，复制 VPC ID 供之后参考。

现在，您可以检索刚才创建的 VPC 的子网 ID。

**检索 VPC 子网 ID**

1. 在 VPC 控制台的导航窗格中，选择 **Subnets**（子网）。

1. 选择一个子网的名称，该子网的 **VPC** 列包含您记下的 VPC ID。

1. 在 **Details**（详细信息）部分的 **Subnet ID**（子网 ID）中，复制子网 ID 供之后参考。

接着为 VPC 创建安全组。

**为 VPC 创建安全组**

1. 在 VPC 控制台的导航窗格中，依次选择 **Security**（安全）、**Security Groups**（安全组）。

1. 选择**创建安全组**。

1. 在 **Create Security Group**（创建安全组）页面上，输入以下信息：
   + 在 **Security group name**（安全组名称）中，为安全组输入名称。
   + 在 **Description**（描述）中，为安全组输入描述。必须提供说明。
   + 对于 **VPC**，选择您为数据来源连接器创建的 VPC 的 VPC ID。
   + 在 **Inbound rules**（入站规则）和 **Outbound rules**（出站规则）中，分别添加所需的入站和出站规则。

1. 选择**创建安全组**。

1. 在安全组的 **Details**（详细信息）页面中，复制 **Security group ID**（安全组 ID）供之后参考。

## 将 VPC 与 Athena 连接器配合使用时的重要注意事项
<a name="vpc-warning-instructions"></a>

以下说明适用于所有 Athena 连接器，因为所有连接器都可以使用 VPC。

**注意**  
将 VPC 与 AWS Glue 连接配合使用时，您需要设置以下 PrivateLink 端点：  
Amazon S3
AWS Glue
AWS Secrets Manager

或者，您也可以使用公共互联网访问，但出于安全原因，不建议这样做。

**警告**  
使用公共互联网访问可能会使您的资源面临额外的安全风险。强烈建议在 VPC 配置中使用 PrivateLink 端点以增强安全性。

# 将 ECR 映像拉取到您的 AWS 账户
<a name="pull-ecr-customer-account"></a>

Athena Federation Connector 的 Lambda 函数使用存储在 Athena 托管的 Amazon ECR 存储库中的容器映像。要对这些容器映像执行安全扫描，您必须先将其复制到您账户中的 Amazon ECR 存储库。本节提供了有关如何将映像复制到您的存储库以及如何配置 Lambda 函数以使用该映像的分步说明。

## 先决条件
<a name="pull-ecr-customer-account-prereq"></a>
+ Athena Federation Connector：只要使用容器映像，就可以通过任何来源创建连接器。
**注意**  
要验证映像部署，请查看 Athena Federation Connector Lambda 中的“映像”选项卡
+ Docker 已安装且正在运行
+ 已安装 AWS CLI
+ 具有适当拉取权限的账户凭证

## 如何传输映像
<a name="image-transfer-procedure"></a>

1. 从 Athena Federation Connector Lambda 中找到映像 URI  
**Example**  

   ```
   account_id_1.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.15.1
   ```

1. 为 Athena 托管账户生成 Docker 身份验证令牌：

   ```
   aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin athena-managed-registry
   ```

   其中：
   + *regionID* 是您的部署区域（例如 us-east-1）
   + *athena-managed-registry* 是映像 URI 的注册表部分（例如 account\$1id\$11.dkr.ecr.us-east-1.amazonaws.com）

1. 从 Athena 托管账户中拉取映像：

   ```
   docker pull athenaImageURI
   ```

1. 向注册表进行 Docker 身份验证：

   ```
   aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin customer-registry
   ```

   其中 *customer-registry* 是您的 ECR 注册表（例如 account\$1id\$12.dkr.ecr.us-east-1.amazonaws.com）

1. 标记您的存储库拉取的映像：

   ```
   docker tag athenaImageURI yourImageURI
   ```

1. 将映像推送到存储库：

   ```
   docker push yourImageURI
   ```

1. 更新您的 Athena Federation Connector：

   1. 导航至您的 Lambda 函数

   1. 选择**部署新映像**

   1. 输入新的映像 URI

   Athena 联合连接器映像现已位于您的账户中，您可以对该映像执行 CVE 扫描。

# 将连接注册为 Glue Data Catalog
<a name="register-connection-as-gdc"></a>

创建数据来源后，您可以使用 Athena 控制台将该连接注册为 Glue Data Catalog。注册后，您可以使用 Lake Formation 来管理联合数据目录并启用精细访问控制。有关更多信息，请参阅 [Creating a federated catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-fed-catalog-data-source.html)。

您可以注册以下连接器以便与 AWS Glue 集成，从而实现精细访问控制。
+ Redshift
+ BigQuery
+ DynamoDB（预览版）
+ Snowflake（预览版）
+ MySQL
+ PostgreSQL
+ AWS CMDB
+ Timestream
+ Azure Data Lake 存储
+ Azure Synapse
+ IBM Db2
+ IBM Db2 AS/400（Db2 iSeries）
+ DocumentDB
+ Google Cloud Storage
+ HBase
+ OpenSearch
+ Oracle
+ SAP HANA
+ SQL Server
+ TPC-DS
+ Cloudera Hive
+ CloudWatch
+ Cloudwatch Metrics
+ Teradata
+ Vertica

## 先决条件
<a name="register-connection-as-gdc-pre"></a>

在开始之前，您必须完成以下前提条件：
+ 确保您拥有注册相关位置所需的角色和权限。有关更多信息，请参阅《AWS Lake Formation 开发人员指南》中的 [Requirements for roles](https://docs.aws.amazon.com/lake-formation/latest/dg/registration-role.html)。
+ 确保您拥有所需的 Lake Formation 角色。有关更多信息，请参阅《AWS Lake Formation 开发人员指南》中的[将 Data Catalog 连接到外部数据来源的先决条件](https://docs.aws.amazon.com/lake-formation/latest/dg/federated-catalog-data-connection.html)。
+ 您在 Glue 中注册的角色必须具有以下示例中列出的权限。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket",
                  "s3:GetObject"
              ],
              "Resource": [
      "arn:aws:s3:::amzn-s3-demo-bucket/spill-prefix/*",
      "arn:aws:s3:::amzn-s3-demo-bucket/spill-prefix"
              ]
          },
          {
              "Sid": "lambdainvoke",
              "Effect": "Allow",
              "Action": "lambda:InvokeFunction",
              "Resource": "arn:aws:lambda:us-east-1:111122223333:function:lambda_function_name"
          },
          {
              "Sid": "gluepolicy",
              "Effect": "Allow",
              "Action": "glue:*",
              "Resource": [
              "arn:aws:glue:us-east-1:111122223333:connection/<connection_name>",
      "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          }
      ]
  }
  ```

------
+ 您负责确定和管理适当的数据访问权限。在为联合查询使用精细访问控制时，建议您使用 [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) 托管式策略。如果要使用您自己的策略，则必须确保执行联合查询的用户无权访问以下资源。
  + 在 Glue 连接中指定的 Lambda 连接器上的 `lambda:InvokeFunction`
  + IAM 中的溢写存储桶位置访问权限
  + 与联合目录关联的 Glue 连接的访问权限
  + IAM 中的 Lake Formation 角色

## 使用控制台注册连接
<a name="register-connection-as-gdc-steps"></a>

**将连接注册为 Glue Data Catalog**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 在导航窗格中，选择**数据来源和目录**。

1. 从**数据来源**列表中，选择您创建的数据来源以打开**数据来源详细信息**页面。

1. 选择 **Get started with AWS Lake Formation (Amazon SES 入门)**。
**注意**  
选择此选项后，您必须自行管理您的 Lambda 函数。Athena 将不会删除您的 Lambda 函数。

1. 对于**数据目录名称**，请为您的目录提供一个唯一的名称。

1. 选择向 Lake Formation 授予调用该 Lambda 函数的权限的 **Lake Formation IAM 角色**。确保该角色具有[示例](#register-connection-as-gdc-pre)中显示的权限。

1. 在文本框中，键入**确认**以删除 Athena 数据来源，并将其替换为 Glue Data Catalog 注册。
**注意**  
此操作将删除您的 Athena 数据来源，并创建一个新的 Glue Data Catalog 来代替该数据来源。完成此过程后，您可能需要更新访问该数据来源的查询，以改为引用新创建的 Glue Data Catalog。

1. 选择**创建目录并前往 Lake Formation**。这时将打开 Lake Formation 控制台，您可以在其中管理目录并向用户授予对目录、数据库和表的权限。

# 启用跨账户联合查询
<a name="xacct-fed-query-enable"></a>

联合查询允许您使用部署在 AWS Lambda 上的数据来源连接器查询 Amazon S3 以外的数据来源。跨账户联合查询功能允许 Lambda 函数和要查询的数据来源位于不同的账户中。

**注意**  
仅在您尚未将联合数据来源注册到 AWS Glue Data Catalog 时才使用此方法。如果您已将数据来源注册到 AWS Glue Data Catalog，请使用 AWS Glue Data Catalog 跨账户功能和权限模型。有关更多信息，请参阅《AWS Glue 用户指南》中的[授予跨账户访问权限](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html)**。

作为数据管理员，您可以通过与数据分析人员的账户共享数据连接器来启用跨账户联合查询。或者作为数据分析人员，可以通过将数据管理员提供的共享 Lambda ARN 添加到您的账户中来启用跨账户联合查询。对原始账户中的连接器进行配置更改时，更新的配置将自动应用于其他用户账户中该连接器的共享实例。

## 注意事项和限制
<a name="xacct-fed-query-enable-considerations-and-limitations"></a>
+ 跨账户联合查询功能适用于非 Hive 元存储数据连接器，该连接器使用基于 Lambda 的数据来源。
+ 此功能不适用于 AWS Glue Data Catalog 数据来源类型。有关跨账户访问 AWS Glue Data Catalog 的信息，请参阅 [配置 AWS Glue 数据目录的跨账户存取](security-iam-cross-account-glue-catalog-access.md)。
+ 如果来自连接器的 Lambda 函数的响应超过 6MB 的 Lambda 响应大小限制，Athena 会自动对响应进行加密、批处理并溢出到您配置的 Amazon S3 存储桶。运行 Athena 查询的实体必须有权访问溢出位置，Athena 才能读取溢出的数据。我们建议您设置 Amazon S3 生命周期策略，以从溢出位置删除对象，因为查询完成后不需要数据。
+ 不支持跨 AWS 区域 使用联合查询。

## 所需的权限
<a name="xacct-fed-query-enable-required-permissions"></a>

要设置所需的权限，必须同时在账户 A（*444455556666*）和账户 B（*111122223333*）中执行操作。

### 账户 A 的操作
<a name="xacct-fed-query-enable-required-permissions-account-a"></a>

若要让数据管理员账户 A 与数据分析人员账户 B 共享 Lambda 函数，账户 B 需要 Lambda 调用函数和溢出存储桶访问权限。因此，账户 A 应该将[基于资源的策略](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)添加到 Lambda 函数并添加[主体](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)访问 Amazon S3 中其溢出存储桶的权限。

1. 以下策略向账户 A 中的 Lambda 函数授予账户 B 调用 Lambda 函数的权限。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CrossAccountInvocationStatement",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:user/username"
                   ]
               },
               "Action": "lambda:InvokeFunction",
               "Resource": "arn:aws:lambda:us-east-1:444455556666:function:lambda-function-name"
           }
       ]
   }
   ```

------

1. 以下策略允许溢出存储桶访问账户 B 中的主体。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
               "AWS": ["arn:aws:iam::111122223333:user/username"]
               },
               "Action": [
                   "s3:GetObject",
                   "s3:ListBucket"
                ],
               "Resource": [
                   "arn:aws:s3:::spill-bucket",
                   "arn:aws:s3:::spill-bucket/*"
               ]
           }
        ]
    }
   ```

------

1. 如果 Lambda 函数使用 AWS KMS 密钥而不是联合开发工具包提供的默认加密来加密溢出存储桶，则账户 A 中的 AWS KMS 密钥策略必须向账户 B 中的用户授予访问权限，如以下示例所示。

   ```
   { 
       "Sid": "Allow use of the key", 
       "Effect": "Allow", 
       "Principal": 
       { 
          "AWS": ["arn:aws:iam::account-B-id:user/username"] 
       }, 
       "Action": [ "kms:Decrypt" ], 
       "Resource": "*" // Resource policy that gets placed on the KMS key. 
    }
   ```

### 账户 B 的操作
<a name="xacct-fed-query-enable-required-permissions-account-b"></a>

若要让账户 A 与账户 B 共享其连接器，账户 B 必须创建一个名为 `AthenaCrossAccountCreate-account-A-id` 的角色，账户 A 通过调用 AWS Security Token Service [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 操作担任该角色。

1. 使用 IAM 控制台或 AWS CLI 将 `AthenaCrossAccountCreate-account-A-id` 角色创建为自定义信任策略角色。自定义信任策略可委托访问权限并允许其他人在您的 AWS 账户中执行操作。有关具体步骤，请参阅 *IAM 用户指南*中的[使用自定义信任策略创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

   该信任关系应有一个主体，其中的密钥是是 `AWS`，而值是账户 A 的 ARN，如下例所示。

   ```
   ...
   "Principal": 
   { 
      "AWS": ["arn:aws:iam::account-A-id:user/username"]
   }, 
   ...
   ```

1. 同样在账户 B 中，创建允许 `CreateDataCatalog` 操作的如下策略。

   ```
   {
    "Effect": "Allow",
    "Action": "athena:CreateDataCatalog",
    "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*"
   }
   ```

1. 将允许 `CreateDataCatalog` 操作的策略添加到您使用账户 B 创建的 `AthenaCrossAccountCreate-account-A-id` 角色中。

## 与账户 B 共享账户 A 中的数据来源
<a name="xacct-fed-query-enable-sharing-a-lambda-data-source-in-account-a-with-account-b"></a>

获得相应权限后，您可以使用 Athena 控制台中的**数据来源和目录**页面，与其他账户（账户 B）共享您账户（账户 A）中的数据连接器。账户 A 保留对连接器的完全控制权和所有权。账户 A 对连接器进行配置更改时，已更新的配置将应用于账户 B 中的共享连接器。

**注意**  
只能共享 Lambda 类型的数据来源，不能共享使用 AWS Glue 连接的数据来源。有关更多信息，请参阅 [可用数据来源连接器](connectors-available.md)。

**与账户 B 共享账户 A 中的 Lambda 数据来源**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 选择**数据来源和目录**。

1. 在**数据来源和目录**页面上，选择要共享的连接器的链接。

1. 在 Lambda 数据来源的详细信息页面上，选择右上角的**操作**菜单，然后选择**共享**。

1. 在 **与其他账户共享 *Lambda-name*** 对话框中，输入所需信息。
   + 在**数据来源名称**中，输入您要在另一个账户中显示的复制数据来源名称。
   + 在**账户 ID** 中，输入要与其共享数据来源的账户 ID（在本例中为账户 B）。

1. 选择**共享**。您指定的共享数据连接器在账户 B 中创建。账户 A 中连接器的配置更改将应用于账户 B 中的连接器。

## 将共享数据来源从账户 A 添加到账户 B
<a name="xacct-fed-query-enable-add-a-shared-lambda-function-arn-to-your-account"></a>

作为数据分析人员，您可能会从数据管理员那里获得连接器的 ARN 以添加到您的账户中。您可以使用 Athena 控制台的**数据来源和目录**页面，将管理员提供的 Lambda ARN 添加到您的账户中。

**将共享数据连接器的 Lambda ARN 添加到您的账户**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果导航窗格不可见，请选择左侧的扩展菜单。

1. 选择**数据来源和目录**。

1. 在**数据来源和目录**页面上，选择**创建数据来源**。

1. 在**选择数据来源**页面上，选择**自定义或共享连接器**。

1. 选择**下一步**。

1. 在**输入数据来源详细信息**页面上的**连接详细信息**部分中，对于**选择或输入 Lambda 函数**，输入账户 A 的 Lambda ARN。

1. 选择**下一步**。

1. 在**审核和创建**页面上，选择**创建数据来源**。

## 问题排查
<a name="xacct-fed-query-enable-troubleshooting"></a>

如果您收到一条错误消息，指出账户 A 没有在账户 B 中担任角色的权限，请确保正确拼写在账户 B 中创建的角色名称，并且附加了适当的策略。

# 更新数据来源连接器
<a name="connectors-updating"></a>

Athena 建议您定期将所用的数据来源连接器更新为最新版本，以利用新功能和增强功能。更新数据来源连接器包括以下步骤：

# Glue 连接（推荐）
<a name="connectors-updating-gc"></a>

## 查找 Athena Query Federation 最新版本
<a name="connectors-updating-finding-the-latest-version"></a>

Athena 数据来源连接器的最新版本号对应于 Athena Query Federation 最新版本。在某些情况下，GitHub 版本可能比 AWS Serverless Application Repository（SAR）上提供的版本稍微更新一些。

**查找 Athena Query Federation 最新版本号**

1. 访问 GitHub URL [https://github.com/awslabs/aws-athena-query-federation/releases/latest](https://github.com/awslabs/aws-athena-query-federation/releases/latest)。

1. 请注意，主页标题中的版本号格式如下：

   **Athena Query Federation ****版本 v** *year*.*week\$1of\$1year*.*iteration\$1of\$1week*

   例如，**Athena Query Federation 版本 v2023.8.3** 的版本号为 2023.8.3。

## 查找连接器版本
<a name="connectors-find-version"></a>

按照以下步骤确定您当前使用的连接器版本。

**查找连接器版本**

1. 在 Lambda 应用程序的 Lambda 控制台页面中，选择**映像**选项卡。

1. 在“映像”选项卡下，找到“映像 URI”。URI 遵循以下格式：

   ```
   Image_location_account.dkr.ecr.us-west-2.amazonaws.com/athena-federation-repository:Version
   ```

1. 映像 URI 中的版本号遵循 `year.week_of_year.iteration_of_week` 格式（例如 `2021.42.1`）。此数字表示连接器版本。

## 部署新的连接器版本
<a name="connectors-deploy-new-version"></a>

按照以下步骤部署连接器的新版本。

**部署新的连接器版本**

1. 按照以下步骤查找最新 Athena Query Federation 版本，找到所需的版本。

1. 在联合连接器 Lambda 函数中，找到 ImageURI 并将标签更新为所需的版本。例如：

   从：

   ```
   509399631660.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.15.1
   ```

   到：

   ```
   509399631660.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.26.1
   ```

**注意**  
如果您的当前版本早于 2025.15.1，请注意以下重要更改：  
存储库名称已更新为 `athena-federation-repository`
对于此更新之前的版本，可能无法设置命令覆盖。您必须将其设置为复合处理程序。

# 旧连接
<a name="connectors-updating-legacy"></a>

## 查找 Athena Query Federation 最新版本
<a name="connectors-updating-finding-the-latest-version"></a>

Athena 数据来源连接器的最新版本号对应于 Athena Query Federation 最新版本。在某些情况下，GitHub 版本可能比 AWS Serverless Application Repository（SAR）上提供的版本稍微更新一些。

**查找 Athena Query Federation 最新版本号**

1. 访问 GitHub URL [https://github.com/awslabs/aws-athena-query-federation/releases/latest](https://github.com/awslabs/aws-athena-query-federation/releases/latest)。

1. 请注意，主页标题中的版本号格式如下：

   **Athena Query Federation ****版本 v** *year*.*week\$1of\$1year*.*iteration\$1of\$1week*

   例如，**Athena Query Federation 版本 v2023.8.3** 的版本号为 2023.8.3。

## 查找并记下资源名称
<a name="connectors-updating-finding-and-noting-resource-names"></a>

在准备升级时，必须找到并记下以下信息：

1. 连接器的 Lambda 函数名称。

1. Lambda 函数环境变量。

1. Lambda 应用程序名称，用于管理连接器的 Lambda 函数。

**在 Athena 控制台中查找资源名称**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在导航窗格中，选择**数据来源和目录**。

1. 在**数据来源名称**列中，选择指向连接器数据来源的链接。

1. 在**数据来源详细信息**部分的 **Lambda 函数**下，选择指向您的 Lambda 函数的链接。  
![\[选择指向 Lambda 函数的链接。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/connectors-updating-1.png)

1. 在**函数**页面的**函数名称**列中，记下连接器的函数名称。  
![\[记下函数名称。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/connectors-updating-2.png)

1. 选择函数名称链接。

1. 在**函数概述**部分下，选择**配置**选项卡。

1. 在左侧窗格中，选择**环境变量**。

1. 在**环境变量**部分中，记下键及其对应的值。

1. 滚动到页面顶部。

1. 在消息**此函数属于应用程序中。单击此处对其进行管理**，选择**单击此处**链接。

1. 在 **serverlessrepo-*your\$1application\$1name*** 页面中，记下不含 **serverlessrepo** 的应用程序名称。例如，如果应用程序名称为 **serverlessrepo-DynamoDbTestApp**，则您的应用程序名称为 **DynamoDbTestApp**。

1. 留在应用程序的 Lambda 控制台页面上，然后继续执行**查找您正在使用的连接器的版本**中的步骤。

## 查找您正在使用的连接器的版本
<a name="connectors-updating-finding-the-version-that-you-are-using"></a>

按照以下步骤查找您正在使用的连接器的版本

**查找您正在使用的连接器的版本**

1. 在 Lambda 应用程序的 Lambda 控制台页面中，选择**部署**选项卡。

1. 在**部署**选项卡中，展开 **SAM 模板**。

1. 搜索 **CodeUri**。

1. 在 **CodeUri** 下的**键**字段中，查找以下字符串：

   ```
   applications-connector_name-versions-year.week_of_year.iteration_of_week/hash_number
   ```

   以下示例显示了适用于 CloudWatch 连接器的字符串：

   ```
   applications-AthenaCloudwatchConnector-versions-2021.42.1/15151159...
   ```

1. 记录 *year*.*week\$1of\$1year*.*iteration\$1of\$1week* 的值（例如，**2021.42.1**）。这是您的连接器的版本。

## 部署连接器的新版本
<a name="connectors-updating-deploying-the-new-version"></a>

按照以下步骤部署连接器的新版本。

**部署连接器的新版本**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在导航窗格中，选择**数据来源和目录**。

1. 在**数据来源和目录**页面上，选择**创建数据来源**。

1. 选择要升级的数据来源，然后选择**下一步**。

1. 在**连接详细信息**部分中，选择**创建 Lambda 函数**。这将打开 Lambda 控制台，可在其中部署更新后的应用程序。  
![\[AWS Lambda 控制台中的“连接器”页面。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/connectors-updating-3.png)

1. 由于您实际上并不是在新建数据来源，因此可以关闭 Athena 控制台选项卡。

1. 在连接器的 Lambda 控制台页面中，执行以下步骤：

   1. 确保已从应用程序名称中移除了 **serverlessrepo-** 前缀，然后将应用程序名称复制到**应用程序名称**字段。

   1. 将您的 Lambda 函数名称复制到 **AthenaCatalogName** 字段。在某些连接器中，此字段名为 **LambdaFunctionName**。

   1. 将您记录的环境变量复制到其相应的字段中。

1. 选择选项**我确认此应用程序创建自定义 IAM 角色和资源策略**，然后选择**部署**。

1. 要验证您的应用程序是否已更新，选择**部署**选项卡。

   **部署历史记录**部分显示您的更新已完成。  
![\[连接器更新已完成。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/connectors-updating-4.png)

1. 要确认新版本号，您可以像以前一样展开 **SAM 模板**，找到 **CodeUri**，然后在**键**字段中检查连接器版本号。

现在，您可以使用更新后的连接器创建 Athena 联合查询。