watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得

\* IBM Cloud上のSaaS版についての記載です

[watsonx.data](https://www.ibm.com/jp-ja/products/watsonx-data)は「単一の統合データ・プラットフォームですべての企業データを収集、保存、照会、分析するためのデータ管理ソリューションです。オープン・データ・フォーマットに最適化された、柔軟で信頼性の高いプラットフォームを提供します」とのことで、いわゆるデータレイクハウスです。SW版とSaaS版があります。



当記事はwatsonx.data SaaS版のPresto エンジンに外部からアクセスするための事前情報取得方法について説明します。
尚、公式ドキュメントでは[Connecting to Presto server](https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-con-presto-serv)に記述されている内容です。

# 1. Presto エンジンのホスト名とポート番号の取得

### 　1-1  watsonx.dataのサービスインスタンスにログインします
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/33ff0935-f785-15ed-b690-edc2bf4195b2.png)

### 1-2.  左上のナビゲーションメニューから、「インフラストラクチャー・マネージャー」をクリックし、リストビューを選択します。

![ima.ge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3e2194d7-f615-2f37-6616-88669a4dc8ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/cf867f0e-c479-3168-a205-6912ecc1bb19.png)

### 1-3.  「エンジン」タブでアクセスしたいエンジン名をクリックし、詳細を表示します。

### 1-4.  「ホスト」ラベルの下にある「クリップボードにコピー」アイコンをクリックして、ホストの詳細をコピーします。
尚、ポート番号はホスト名の最後にコロンをつけて付加された数字です。

例: 下記の場合は

```
xxxxxxxx.lakehouse.appdomain.cloud:33333
```

- xxxxxxxx.lakehouse.appdomain.cloudがホスト名
- 33333がポート番号

です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/307a92c6-5149-7010-ed4b-09ac5ee047d7.png)

# 2.  IBM API key または　IBM IAM tokenの取得
[ドキュメント](https://cloud.ibm.com/docs/watsonxdata?topic=watsonxdata-con-presto-serv#get-api-iam-token)によるとIBM IAM tokenの方がワークロード的におすすめとのことです。

ただIBM API key は一度取得したら削除するまで使えますが、IBM IAM tokenは作成後1時間有効となり、有効期限があります。どちらも使用可能なので、状況に合わせて選択してください。

## 2-1. IBM API keyの取得
[IBM Cloud APIKEYの作成(取得)方法](https://qiita.com/nishikyon/items/fa8b951267efbe911fe7)に従って取得してください。


## 2-2. IBM IAM tokenの取得
IBM IAM tokenを取得する場合は以下の方法で取得してください。
IBM IAM tokenの取得にはIBM API keyが必要です。「[2-1. IBM API keyの取得](2-1-ibm-api-keyの取得)」でまず取得お願いします。

`<your-api-key>`は「[2-1. IBM API keyの取得](2-1-ibm-api-keyの取得)」で取得した**IBM API key**で置き換えて、以下のcurl コマンドを実行します。
```
curl -X \
POST 'https://iam.cloud.ibm.com/identity/token' \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
--data-urlencode "apikey=<your-api-key>"
```
以下のような出力が返ってきますので、`access_token`の値が、IBM IAM tokenの値になります。下の画像の水色部分です。最初と最後のダブルクォーテーションはIBM IAM tokenの値ではありませんので、使用時は除外してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/d7b3295b-ba19-b083-c9d9-c2eaed268d87.png)

またはpythonで書くと(`<your-api-key>`は「[2-1. IBM API keyの取得](2-1-ibm-api-keyの取得)」で取得した**IBM API key**で置き換えてから実行して下さい)、以下のようになります。
```python
import requests
import sys

endpoint = 'https://iam.cloud.ibm.com/identity/token'
headers = {}
headers ['content-type'] = "application/x-www-form-urlencoded"
params = {}
params['grant_type'] = "urn:ibm:params:oauth:grant-type:apikey"
params['apikey'] = "<your-api-key>"

try:
    r = requests.post(endpoint,  headers=headers, data=params)
except Exception as err:
    print("RESTful call failed. Detailed information follows.")
    print(err)
    sys.exit()

try:
    access_token = r.json()['access_token']
    #print(r.json())
except:
    print("RESTful call did not return an access token.")
    print(r.json())
    sys.exit()


print (access_token)
```
`access_token`という変数に入ります。

以上で、watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報
- ホスト名
- ポート番号
- IBM API key
- IBM IAM token
が取得できました。


# 3. 関連リンク
- [watsonx.data SaaS版のPresto エンジンに Presto CLI からアクセス](https://qiita.com/nishikyon/items/2f3ecaa13fe0e7cb4e5c)
- [watsonx.data SaaS版のPresto エンジンにpythonからアクセス](https://qiita.com/nishikyon/items/b5afeb5263a37957c00d)
- [watsonx.data SaaS版のPresto エンジンにDBeaverからアクセス](https://qiita.com/nishikyon/items/3aa33e5501570bc12827)