はじめに
近年AIツール群の利用やデータ分析のために、Cloudサービスからオンプレミスにあるデータベースに接続するニーズが高まっています。
本記事ではIBM Cloud上での実装例としてIBM Cloudのデータ分析基盤であるCloud Pak For Data as a Service(CP4DaaS)からオンプレミスにあるデータベース(PostgreSQL)への接続方法について記載します。
また、本記事ではオンプレミスの環境へセキュアに接続するためにIBM Cloudの新しいソリューションである"Satellite Connector"を使用しています。
本ソリューションを使用することでオンプレミス側にAgent導入用のLinuxサーバー(冗長構成の場合は2台必要)を用意するだけでセキュアなTLSトンネリングによる接続が可能になります。
本サービスを利用すると非常に簡単に接続が作成できるので、IBM Cloud上でデータ分析やAIツールを利用する際はぜひご利用ください。
本記事ではSatellite Connectorを用いてオンプレミスのデータベースへの接続に関して記載していますが、冗長化などの詳細な記述やContainerへの接続手段について以下の記事、docsも参考になりますので、ぜひご覧ください。
今回は大阪リージョンに建てたVPCをオンプレミス環境と想定し、その中にデータベースを建てて、CP4DaaSから東京リージョンにSatellite Connectorを用いて接続することを目標とします。
構築手順は以下のdocsを参考に進めます。
docs : Satellite コネクターの作成
事前準備
すでに以下の環境は構築済みであることを想定します。
- VPC(大阪リージョン), サブネット(今回は192.168.2.64/26)
- 1のVPCサブネット内のConnector Agent用仮想サーバー(2Core, 4GB, CentOS, 大阪リージョン, floating IP付与済み)
- 1のVPCサブネット内のPostgresql用仮想サーバー(2Core, 4GB, ubuntu, 大阪リージョン)
Agent用サーバーからPostgresqlサーバーへJDBCで接続できるようにあらかじめ設定してあるものとします(CP4DaaSからPostgreSQLへの接続はJDBC接続で行います)。
また、オンプレミス想定のVPC環境はSatellite Connector導入のためのFloating IPしか公開されておらず、データベースに関しては外部との通信は一切できない構成になっております
構築手順
1. Satellite Connectorの注文
まずは東京リージョンでSatellite Connectorを作成します。ポータル画面の検索機能から「Satellite」を検索します。
Satelliteのホーム画面に移行したら、左側メニューの「Connector」を選択し、右上の青い「Connectorの作成」ボタンを選択します。
今回は東京リージョンにConnectorを作成するので、リージョンにjp-tokを指定し、「コネクターの作成ボタン」で作成します。
作成したConnectorを選択すると以下の画面が表示されます。
Connector IDは後ほど使用するのでどこかに記録しておきます。
2. ConnectorAgentの作成
次にAgent用サーバーにConnectorAgentを作成します。
2-1. Agent導入のための準備
まずはじめにConnectorAgentをインストールするため、Agent用サーバーにsshでログインしdockerのインストールを行います。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
systemctl enable docker
systemctl start docker
続いて環境ファイルを作成し、環境変数を設定します。
mkdir -p ~/agent/env-files
vi ~/agent/env-files/env.txt
env.txt
の中身は以下の通りに設定します。
SATELLITE_CONNECTOR_ID=U2F0ZWxsaXRlQ29ubmVjdG9yOiJjazk0dDI0dDFjcGQ4dms0NDg1ZyI
SATELLITE_CONNECTOR_IAM_APIKEY=xxxxxxxxxxx
SATELLITE_CONNECTOR_REGION=jp-tok
SATELLITE_CONNECTOR_TAGS=sample tag
SATELLITE_CONNECTOR_IDはConnector画面で確認できます。APIKEYはポータルのIAMから作成できます。詳しくはdocsを参照ください。
これでConnectorAgentのコンテナを作成する準備ができました。
2-2. Agentの作成
まずはAgentイメージをpullするため、Container Registoryにログインします。パスワード要求にはAPIKEYを入力します。
docker login -u iamapikey icr.io
Password:
Login Succeeded
ログインができたらConnectorAgentのイメージをコンテナレジストリからpullします。
docker pull icr.io/ibm/satellite-connector/satellite-connector-agent:latest
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
icr.io/ibm/satellite-connector/satellite-connector-agent latest 66b5c7f42805 12 days ago 415MB
イメージのpullが確認できたので、コンテナを起動します。
docker run -d --env-file ~/agent/env-files/env.txt icr.io/ibm/satellite-connector/satellite-connector-agent:latest
aaef3d2f49ded9b800d4a2c254e42caa1941de0930547052b705912b8f4a9ccb
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aaef3d2f49de icr.io/ibm/satellite-connector/satellite-connector-agent:latest "/usr/local/bin/node…" 9 seconds ago Up 8 seconds great_colden
docker logs aaef3d2f49de
{"level":30,"time":"2023-10-23T02:29:35.437Z","pid":13,"hostname":"aaef3d2f49de","name":"agentOps","msgid":"A02","msg":"Load SATELLITE_CONNECTOR_ID value from SATELLITE_CONNECTOR_ID environment variable."}
{"level":30,"time":"2023-10-23T02:29:35.438Z","pid":13,"hostname":"aaef3d2f49de","name":"agentOps","msgid":"A02","msg":"Load SATELLITE_CONNECTOR_IAM_APIKEY value from SATELLITE_CONNECTOR_IAM_APIKEY environment variable."}
...
最後の行でログを確認していますが、ちゃんと起動していることがわかります。
また、この時点でSatellite Connectorの画面でもアクティブなエージェントとして作成したコンテナのIDが確認できます。
2-3. ユーザーエンドポイントの設定
次にオンプレミス環境にアクセスするためのエンドポイントをConnector側に作成します。
Connectorメニューから「ユーザーエンドポイント」タブ→「エンドポイントの作成」を選択し、エンドポイントを作成します。
リソース詳細は任意のエンドポイント名、宛先FQDNまたはIP(今回はDBサーバーである192.168.2.73)、宛先ポートはPostgresqlの外部接続ポートである5432番に設定します。
以降は特に設定に変更はなので次にを選択しつづけ、最後に「エンドポイントの作成」を選択するとエンドポイントの作成が完了します。
作成が完了するとConnector画面から作成したエンドポイントが確認できます(c-01.private.jp-tok.link.satellite.cloud.ibm.comの32780番ポート)。このエンドポイントとポートは後ほど使用するので記録しておきます。
2-4. CP4Dプラットフォーム接続の作成
CP4DからPostgresqlのデータが見れるようにプラットフォーム接続を作成します。
CP4Dのホーム画面の左側のメニューから「データ」→「プラットフォーム接続」を選択します。
以下接続の設定を行います。「名前」は接続の名前を任意につけます。
「データベース」にデータベース名を任意に入力し、「ホスト名」はエンドポイントで作成したc-01.private.jp-tok.link.satellite.cloud.ibm.com、「ポート」はエンドポイントアドレスで確認した32780を指定します。
「専用接続」でIBM Cloud Satelliteを選び、最初に作成したConnectorを選択し、「作成」ボタンをクリックしたら作成完了です。
2-5. 接続テスト
Postgresqlへの接続をチェックします。作成した接続を選択し、「接続のテスト」を選択します。「テストが正常に終了しました」と表示されたら正しく接続が作成されています。
2-6. データベースの確認
次に実際にデータベースの中身を確認するためにCP4Dのプロジェクトを作成します。CP4Dのホームから左側の「すべてのプロジェクトの表示」を選択します。
右上の「新規プロジェクト」を選択し、空のプロジェクトを作成します。
作成できたらプロジェクトを開き、試算メニューから「新規資産」を選択します。
プラットフォームから作成したコネクターを選択します。
資産にコネクターが表示されました。次に「資産のインポート」を選択します。
資産のインポートではデータベースの中からテーブルをインポートできます。今回はコネクターから「public」スキーマの「test_table」テーブルを選択します。
資産に先ほどのテーブルが追加されています。
中身も確認することができます。