

# 使用现有 IAM 执行角色将 Athena 连接到 Hive 元存储
<a name="connect-data-source-hive-existing-iam-role"></a>

要借助使用现有 IAM 角色的 Lambda 函数将外部 Hive 元数据仓连接到 Athena，您可以将 Athena 的 Athena 连接器引用实现用于外部 Hive 元数据仓。

这三个主要步骤如下所示：

1. **[克隆和构建](#connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function)**：克隆 Athena 引用实现并构建包含 Lambda 函数代码的 JAR 文件。

1. **[AWS Lambda 控制台](#connect-data-source-hive-existing-iam-role-aws-lambda-console)** – 在 AWS Lambda 控制台，创建 Lambda 函数，为其分配现有 IAM 执行角色，然后上载您生成的函数代码。

1. **[Amazon Athena 控制台](connect-data-source-hive-existing-lambda.md)** – 在 Amazon Athena 控制台中，创建一个数据来源名称，您可以使用该名称在 Athena 查询中引用外部 Hive 元存储。

如果您已拥有创建自定义 IAM 角色的权限，则可以使用更简单的工作流程，该工作流程使用 Athena 控制台和 AWS Serverless Application Repository 创建和配置 Lambda 函数。有关更多信息，请参阅 [将 Athena 连接到 Apache Hive 元存储](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md)。

## 先决条件
<a name="connect-data-source-hive-existing-iam-role-prerequisites"></a>
+ Git 必须安装在您的系统上。
+ 您必须先行安装 [Apache Maven](https://maven.apache.org/)。
+ 您有一个 IAM 执行角色，可以将其分配给 Lambda 函数。有关更多信息，请参阅 [允许 Lambda 函数访问外部 Hive 元存储](hive-metastore-iam-access-lambda.md)。

## 克隆并构建 Lambda 函数
<a name="connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function"></a>

Athena 参考实现的函数代码是一个位于 GitHub 上的 Maven 项目，具体地址为 [awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore)。有关项目的详细信息，请参阅 GitHub 上相应的自述文件或本文档中的 [修改 Athena 外部 Hive 元存储连接器](datastores-hive-reference-implementation.md) 主题。

**克隆和构建 Lambda 函数代码**

1. 输入以下命令以克隆 Athena 引用实现：

   ```
   git clone https://github.com/awslabs/aws-athena-hive-metastore
   ```

1. 运行以下命令为 Lambda 函数构建 `.jar` 文件：

   ```
   mvn clean install
   ```

   项目构建成功后，以下 `.jar` 文件将在项目的目标文件夹中创建：

   `hms-lambda-func-1.0-SNAPSHOT-withdep.jar`

   在下一部分中，您将使用 AWS Lambda 控制台将此文件上载到 Amazon Web Services 账户。

## 在 AWS Lambda 控制台中创建和配置 Lambda 函数
<a name="connect-data-source-hive-existing-iam-role-aws-lambda-console"></a>

在本节中，您将使用 AWS Lambda 控制台创建一个使用现有 IAM 执行角色的函数。为函数配置 VPC 后，您可以上载函数代码并配置该函数的环境变量。

### 创建 Lambda 函数
<a name="connect-data-source-hive-existing-iam-role-create-the-lambda-function"></a>

在此步骤中，您将在 AWS Lambda 控制台中创建一个使用现有 IAM 角色的函数。

**要创建使用现有 IAM 角色的 Lambda 函数**

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

1. 在导航窗格中，选择**函数**。

1. 选择**创建函数**。

1. 选择**从头开始创作**。

1. 在 **Function name**（函数名称）中，输入 Lambda 函数的名称（例如 **EHMSBasedLambda**）。

1. 对于 **Runtime**（运行时），请选择 **Java 8**。

1. 在 **Permissions**（权限）下，展开 **Change default execution role**（更改默认执行角色）。

1. 对于 **Execution role (执行角色)**，选择 **Use an existing role (使用现有角色)**。

1. 对于 **Existing role**（现有角色），请选择 Lambda 函数将用于 Athena 的 IAM 执行角色（此示例使用名为 `AthenaLambdaExecutionRole` 的角色)。

1. 展开 **Advanced settings**（高级设置）。

1. 选择 **Enable Network**（启用网络）。

1. 对于 **VPC**，请选择您的函数将有权访问的 VPC。

1. 对于 **Subnets**（子网），选择 Lambda 要使用的 VPC 子网。

1. 对于 **Security groups**（安全组），选择 Lambda 要使用的 VPC 安全组。

1. 选择**创建函数**。AWS Lambda 控制台，然后打开函数的配置页面并开始创建函数。

### 上载代码并配置 Lambda 函数
<a name="connect-data-source-hive-existing-iam-role-upload-and-configure"></a>

当控制台通知您已成功创建函数时，您就可以上载函数代码并配置其环境变量。

**上载 Lambda 函数代码并配置其环境变量**

1. 在 Lambda 控制台中，确保您位于指定函数页面的 **Code**（代码）选项卡上。

1. 对于 **Code source**（代码源），选择 **Upload from**（上传格式），然后选择 **.zip or .jar file**（.zip 或 .jar 文件）。

1. 上载您之前生成的 `hms-lambda-func-1.0-SNAPSHOT-withdep.jar` 文件。

1. 在 Lambda 函数页面上，选择**配置**选项卡。

1. 从左侧窗格中选择 **Environment variables**（环境变量）。

1. 在 **Environment variables (环境变量)** 部分中，选择 **Edit (编辑)**。  
![\[选择 Edit（编辑）为 Lambda 函数编辑环境变量。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-5.png)

1. 在 **Edit environment variables**（编辑环境变量）页面上，使用 **Add environment variable**（添加环境变量）选项，添加以下环境变量键和值：
   + **HMS\$1URIS** – 使用以下语法，输入 Hive 元数据仓主机的 URI，该主机在端口 9083 使用 Thrift 协议。

     ```
     thrift://<host_name>:9083
     ```
   + **SPILL\$1LOCATION** – 在 Amazon Web Services 账户中指定 Amazon S3 位置，以便在 Lambda 函数响应大小超过 4MB 时保存溢出元数据。  
![\[为 Lambda 函数环境变量指定值。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-6.png)

1. 选择**保存**。

此时，您已准备好将 Athena 配置为使用 Lambda 函数连接到 Hive 元数据仓。要查看步骤，请参阅[配置 Athena 使用部署的 Hive 元存储连接器](connect-data-source-hive-existing-lambda.md)。