

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用現有 IAM 執行角色將 Athena 連接到 Hive 中繼存放區
<a name="connect-data-source-hive-existing-iam-role"></a>

若要透過使用現有 IAM 角色的 Lambda 函數將您的外部 Hive 中繼存放區連接到 Athena，您可以使用適用於外部 Hive 中繼存放區的 Athena 連接器參考實作。

三個主要步驟如下：

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/)。
+ 您擁有可以指派給 Lambda 函數的 IAM 執行角色。如需詳細資訊，請參閱[允許 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 上 [awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore) 的 Maven 專案 如需有關此專案的詳細資訊，請參閱 GitHub 上對應的 README 檔案或本文件中的 [修改 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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 在導覽視窗中，選擇**函數**。

1. 選擇 **Create function (建立函數)**。

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 函數頁面上，選擇 **Configuration** (組態) 標籤。

1. 從左側的窗格中選擇 **Environment variables** (環境變數)。

1. 在 **Environment variables** (環境變數) 區段中，選擇 **Edit** (編輯)。  
![\[選擇 Edit (編輯) 來編輯 Lambda 函數的環境變數。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-5.png)

1. 在 **Edit environment variables** (編輯環境變數) 的頁面上，使用 **Add environment variable** (新增環境變數) 的選項新增下列環境變數索引鍵和值：
   + **HMS\$1URIS** – 以下列語法在連接埠 9083 上輸入使用 Thrift 通訊協定的 Hive 中繼存放區主機的 URI。

     ```
     thrift://<host_name>:9083
     ```
   + **SPILL\$1LOCATION** – 指定您的 Amazon Web Services 帳戶中的 Amazon S3 位置，如果 Lambda 函數回應大小超過 4 MB，此位置會保留溢出的中繼資料。  
![\[指定 Lambda 函數環境變數的值。\]](http://docs.aws.amazon.com/zh_tw/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)。