

# 既存の IAM 実行ロールを使用して Hive メタストアに Athena を接続する
<a name="connect-data-source-hive-existing-iam-role"></a>

既存の IAM ロールを使用する Lambda 関数を使用して外部 Hive メタストアを Athena に接続するには、外部 Hive メタストア用の Athena コネクタのリファレンス実装を使用できます。

以下は、3 つの主なステップです。

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 ロールを作成するアクセス許可がすでにある場合は、Lambda 関数の作成と設定に Athena コンソールと AWS Serverless Application Repository を使用する、よりシンプルなワークフローを使用できます。詳細については、「[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 実行ロールがある。詳細については、「」を参照してください[外部 Hive メタストアへの Lambda 関数アクセスを許可する](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>

このステップでは、既存の IAM ロールを使用する関数を AWS Lambda コンソールで作成します。

**既存の IAM ロールを使用する Lambda 関数を作成する**

1. AWS マネジメントコンソール にサインインして AWS Lambda コンソール ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) を開きます。

1. ナビゲーションペインで、[**Functions**] (関数) を選択します。

1. **関数の作成** を選択します。

1. **Author from scratch** (製作者を最初から) を選択します。

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. **[詳細設定]** を展開します。

1. **[Enable Network]** (ネットワークの有効化) を選択します。

1. **[VPC]** で、関数がアクセスする VPC を選択します。

1. **[Subnets]** (サブネット) には、Lambda が使用する VPC サブネットを選択します。

1. **[Security groups]** (セキュリティグループ) には、Lambda が使用する VPC セキュリティグループを選択します。

1. [**Create function**] (関数の作成) をクリックします。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. [**環境変数**] セクションで、[**編集**] を選択します。  
![\[[Edit] (編集) をクリックして Lambda 関数の環境変数を編集します。\]](http://docs.aws.amazon.com/ja_jp/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** - Lambda 関数のレスポンスサイズが 4 MB を超える場合、スピルオーバーメタデータを保持するために Amazon Web Services アカウントの Amazon S3 ロケーションを指定します。  
![\[Lambda 関数環境変数の値を指定します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-6.png)

1. **[保存]** を選択します。

これで、Lambda 関数を使用して Hive メタストアに接続するように、Athena を設定するための準備ができました。手順については、「[デプロイ済みの Hive メタストアコネクタを使用するように Athena を設定する](connect-data-source-hive-existing-lambda.md)」を参照してください。