ibm-lh-clientの設定

## はじめに
ibm-lh-clientパッケージには、watsonx.dataへのアクセスや、watsonx.dataと連携するアプリケーションを開発するための便利なユーティリティとライブラリが含まれています。

ここでは ibm-lh-clientパッケージを使用してwatsonx.dataのPrestoへ接続するためのエンジンの登録方法を紹介します。

## 環境
使用したサーバ環境は以下になります。
・Red Hat OpenShift Container Platform 4.14
・IBM Cloud Pak for Data (CP4D) 5.0.3
・IBM watsonx.data 2.0.3
・Presto (Java) v0.286
使用したクラアント環境は以下になります。
・Red Hat Enterprise Linux release 8.10 (Ootpa)
・Podman version 4.9.4-rhel

## 事前準備
ibm-lh-clientを設定する前に、ibm-lh-clientをインストールして下さい。ibm-lh-clientのインストールについて、次のQiita記事をご参照ください: [ibm-lh-clientのインストール](https://qiita.com/Xu_Mingqin/private/f8d86eea20a08b214588 )。この記事では、ibm-lh-clientパッケージを`${HOME}/watsonxdata`ディレクトリの下にインストールしました。
## 設定手順

### 1.必要情報収集
今回ibm-lh-clientパッケージで次の作業を行います。
  - connect-lhを使用してPrestoエンジンを登録設定する
  - cert-mgmtを使用してSSL接続証明書を作成する
  - watsonx.dataへの接続を設定する

そのために、まずは必要な情報を収集します。

#### (1)watsonx.dataのusernameとpasswordの確認
usernameは、watsonx.dataソフトウェアまたはIBM Cloud Pak for Data (CP4D)上のwatsonx.dataを使用できるユーザーです。passwordはそのユーザーのパスワードです。


#### (2)Prestoエンジンのhost名の確認
確認方法1: watosnx.dataのインフラストラクチャー・マネージャーで、Prestoエンジンの外部ホストを確認します。この外部ホストは今回使うhost名です。
![Screenshot 2024-10-08 at 14.14.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894284/33ebd6e7-9e1a-879c-f8de-7d14b8375197.png)


![Screenshot 2024-10-08 at 14.20.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894284/109786d8-4841-77db-2772-32aa13d39b93.png)


確認方法2: ocコマンドをインストールしてあれば、ocコマンドでもPrestoエンジンのhost名を取得可能です。以下の出力の`ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com`はhost名です。
```
[user01@client ~]$ oc get route ibm-lh-lakehouse-presto-01-presto-svc
NAME                                    HOST/PORT                                                                                               PATH   SERVICES                                PORT   TERMINATION   WILDCARD
ibm-lh-lakehouse-presto-01-presto-svc   ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com          ibm-lh-lakehouse-presto-01-presto-svc   8443   reencrypt     None
```
#### (3)Prestoエンジンのportの確認
今回デフォルトのportを使います。watsonx.dataソフトウェアおよびIBM Cloud Pak for Data (CP4D)上のwatsonx.dataのデフォルトportは443です。
#### (4)watsonx.dataのinstance_nameの確認
IBM Cloud Pak for Data (CP4D)のページで`インスタンス`をクリックし、次のページを開くとインスタンスの名前(instance_name)`lakehouse`を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894284/19f913d4-4210-6d76-c85e-3ed1d6a99aca.png)

![Screenshot 2024-10-11 at 14.14.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894284/1627ed64-c7ae-6ee6-65fd-2567973bf552.png)

### 2.Prestoエンジンを登録設定する

次にibm-lh-clientパッケージのconnect-lhを使用して、接続情報を登録します。connect-lhの構文は次の通りです。
```
connect-lh --op=add \
--name=<alias> \
--host=<host> \
--port=<port> \
--username=<username> \
--password=<password>
```
以下の例では、Prestoエンジンに`PRESTO01`という別名をつけます。
```
[user01@client ~]$ cd ${HOME}/watsonxdata
[user01@client watsonxdata]$cd ibm-lh-client
[user01@client watsonxdata]$cd bin
[user01@client bin]$./connect-lh --op=add --name=PRESTO01 --host=ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com --port=443 --username=cpadmin --password=XXXX
registering engine PRESTO01 ..
registered PRESTO01.

```
以下のコマンドで、現在登録されているPrestoエンジンをリストできます。
```
[user01@client bin]./connect-lh --op=list
PRESTO01
```

### 3.cert-mgmtを使用してSSL接続証明書を作成する

ここでは、cert-mgmtを利用してSSL接続証明書を作成します。詳細については、[cert-mgmt](https://www.ibm.com/docs/en/SSDZ38_2.0.x/wxd-client/topics/lh_client_utilities.html#lh_client_utilities__certificate)を確認してください。cert-mgmtの構文は以下の通りです。

```
./cert-mgmt --op=add --host=<hostname> --port=<port>
```
以下の例では、上の[必要情報収集](https://qiita.com/Xu_Mingqin/private/dd129b02168ee7658cc0#1必要情報収集)で収集したhost名とportを使います。
```
[user01@client bin]$ ./cert-mgmt --op=add --host=ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com --port=443
importing certificate ..
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R11
verify return:1
depth=0 CN = XXXXX.ocp.techzone.ibm.com
verify return:1
DONE
Certificate was added to keystore
ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com:443, Sep 30, 2024, trustedCertEntry,
Certificate fingerprint (SHA-256): C8:94:5D:AC:70:EA:14:37:AB:43:68:4A:FA:35:AD:E8:2B:87:60:15:D3:7D:45:16:4D:ED:DB:B2:81:82:93:FA
/mnt/infra/tls/truststore.jks updated.
```
注意点：`IBM watsonx.data on IBM Cloud` に接続する場合、このステップはスキップできます。

### 4.watsonx.dataへの接続を設定する
watsonx.dataのタイプに応じて、異なるコマンドを利用します。詳細については、[Setting up the ibm-lh utility:Configure connectivity to watsonx.data.](https://www.ibm.com/docs/en/watsonx/watsonxdata/2.0.x?topic=utilities-setting-up-lh-utility#taskwork-ibm-lh__steps__1)を確認してださい。今回は`IBM watsonx.data on Cloud Pak for Data`を利用しているので、以下のコマンドを利用します。
```
./ibm-lh config add_cpd --name <instance_name> --host <hostname> --port <port>
```
以下の例では、上の[必要情報収集](https://qiita.com/Xu_Mingqin/private/dd129b02168ee7658cc0#1必要情報収集)で収集したinstance_name、host名とportを使います。
```
[user01@client bin]$ ./ibm-lh config add_cpd --name lakehouse  --host=ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com --port=443
{'component': 'config', 'action': 'add_cpd', 'name': 'lakehouse', 'host': 'ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com', 'port': '443'}

Config file updated with Host : ibm-lh-lakehouse-presto-01-presto-svc-cpd-operands.apps.XXXXX.ocp.techzone.ibm.com and Port : 443

```
以上、この4つのステップで、ibm-lh-clientの設定が完了しました。


## 参考資料
ibm-lh-clientの設定について、[Setting up the ibm-lh utility](https://www.ibm.com/docs/en/watsonx/watsonxdata/2.0.x?topic=utilities-setting-up-lh-utility)を参考してください。