IBM Db2 REST サービスをpodmanで動かす

Db2にはRESTサービスでアクセスできる仕組みがあります。 IBM Db2 REST サービスはコンテナイメージで提供されているので、Docker(もちろんpodmanもですが）やKubenates, Openshift等のコンテナ環境で動作させる必要があります。

[Db2のマニュアル](https://www.ibm.com/docs/ja/db2/11.5?topic=endpoints-downloading-rest-service)にはDocker前提のセットアップ方法しか載っていません。なのでDokerの場合は[Db2のマニュアル](https://www.ibm.com/docs/ja/db2/11.5?topic=endpoints-downloading-rest-service)通りに実施すれば(たぶん)OKです。

Docker Desktopは[ご存知のようにちょっと大きめの会社に対して有償になりました](https://www.docker.com/pricing/faq)ので、有償化対象の会社のPCでちょっと(無償で！）試してみたい！　という場合は、別の無償で使えるコンテナエンジンで動かす必要があります。


当記事は Db2ドキュメントの[「IBM Cloud Container Registry からの IBM Db2 REST サービスのダウンロード」](https://www.ibm.com/docs/ja/db2/11.5?topic=endpoints-downloading-rest-service)の手順のpodman版です。IBM Db2 REST サービスを**podman**で動かす手順について説明します。Macで確認しました。

尚、ここではpodmanのMacへの導入方法は記載しませんが、`podman`, `Mac`, `導入`あたりでググれば、手順はでてきます。

# 1. 前準備
## 1-1:　IBM Cloudのアカウントの準備
イメージが[IBM Cloud Container Registry(icr.io)](https://cloud.ibm.com/docs/Registry?topic=Registry-public_images)にあるので、IBM Cloudのアカウントでのログインが必要です。
IBM Cloudのアカウントをお持ちで無い場合は、[作成](https://cloud.ibm.com/registration)をお願いします。クレジットカード情報の登録が必要です。

## 1-2: APIKEYの取得
以下を参考にIBM Cloud APIKEYを取得しておいてください。

- [IBM Cloud APIKEYの作成(取得)方法](https://qiita.com/nishikyon/items/fa8b951267efbe911fe7)

# 2. IBM Cloud Container Registry(icr.io)へのpodmanでのログイン
ちなみにここがpodman独特の部分です。他はdockerコマンドをpodmanに置き換えるだけでたぶん動作します。
以下のコマンドでIBM Cloud Container Registry(icr.io)へのpodmanへログインします

```sh
podman login icr.io -u iamapikey -p <1-2で取得したAPIYKEY>
```

実行例

```sh
$ podman login us.icr.io -u iamapikey -p abcd_efg1hijk-xxxxxxxxxxxx-XX-XXXXXX
Login Succeeded!
```

# 3. Db2 REST サービス・コンテナー・イメージの取得
以下のコマンドを実行します。

```sh
podman pull icr.io/obs/hdm/db2rest:latest-amd64
```

取得できているか、以下のコマンドで確認します。

```sh
podman images
```
実行例:

```sh
$ podman images
REPOSITORY                        TAG           IMAGE ID      CREATED      SIZE
localhost/db2jupyter              latest        809ebfe7b284  6 days ago   3.58 GB
docker.io/jupyter/scipy-notebook  python-3.9.7  4a1360d27048  6 days ago   3.07 GB
icr.io/obs/hdm/db2rest            latest-amd64  43d504e56e41  2 weeks ago  330 MB
```

`icr.io/obs/hdm/db2rest`のイメージがあればOKです。

# 4. Db2 REST サービス・コンテナー・イメージの起動
とりえあずバックグラウンドで起動させます。
ライセンス条項は自動acceptとしています。ライセンス条項を読んでacceptしたい場合は、`LICENSE=accept`を`LICENSE=view`に変更してください。


### **SSL接続必須の設定で起動(通常):**

```sh
podman run -d -p 50050:50050 -e LICENSE=accept --name=db2rest icr.io/obs/hdm/db2rest:latest-amd64
```

デフォルトはアクセスにSSL必須です。しかしデフォルトの自己証明書はブラウザーによっては受け付けてくれなかったり(ChromeはNG)、curlコマンドの場合は`--insecure`オプションが必要です。
正しい証明書を設定したい場合は以下の手順に従って`podman run`してみてください(未確認)。
[IBM Db2 REST サーバーの TLS 証明書の指定](https://www.ibm.com/docs/ja/db2/11.5?topic=endpoints-providing-tls-certificate)

### **SSL接続なしの設定で起動:**
学習用やテストなのでSSL不要、APIドキュメントだけみるのでSSL不要、という場合は、`podman run`の際に
`-e DB2REST_USE_HTTP=true`
をつけて起動すると、SSLなしの接続が可能になります( **逆にSSLありでは接続できませんので注意してください**）。


```sh
podman run -d  -p 50050:50050 -e LICENSE=accept -e DB2REST_USE_HTTP=true --name=db2rest icr.io/obs/hdm/db2rest:latest-amd64
```

尚、上記コマンドの前にすでにdb2restコンテナーを起動中の場合は、一旦コンテナー停止して削除してから実行してください

```sh
podman stop db2rest
podman rm db2rest
```

`-e DB2REST_USE_HTTP=true`をつけて起動すると、Chromeでも`http://localhost:50050/docs`でアクセスしてREST APIのAPIドキュメントが参照できます。

その他詳細はDb2マニュアル
[REST エンドポイント](https://www.ibm.com/docs/ja/db2/11.5?topic=applications-rest-endpoints)
を参照してください。
基本Dockerコマンドで書かれている部分はpodmanに置き換えれば大丈夫な場合が多いです。

# 5. まとめ
Db2 REST サービスは別途コンテナ環境に導入・設定が必要です。マニュアルにはDockerでの導入しか記載されていませんが、podman、OpenShiftなど標準的なコンテナ環境で動作しますので、基本Dockerコマンドを環境特有のコマンドに置き換えてやってみてください。
Db2 REST API v1のドキュメントは`localhost:50050/docs`にブラウザーでアクセスすることで参照可能です。インターネット上にはこのv1のDb2 REST APIのドキュメントはないようです(v4はありますがDb2 on Cloud用です)。

以上です。