Windows 版のAPI Server ではCloud Gateway 機能でオンプレミスのRDB をREST API 化してクラウド上のサーバ経由で公開することができました。
オンプレミスの RDB から REST API を自動生成・API Server Cloud Gateway 経由でインターネットに公開 | CData Software Blog
オンプレOracle DB にSSHサーバ経由でGoogleAppsScript からSQLでアクセスしてみた:SQLGateway | CData Software Blog
オンプレOracle DB にCloudGateway 経由でGoogleAppsScript からWEB APIでアクセスしてみた:CData APIServer | CData Software Blog
これと同等のことをConnect Server とautossh を使って実現する方法を紹介します。
検証した環境
オンプレミス側のVM (hosta とします、ユーザはusera とします) はUbuntu 22.04 LTS を使用しました。クラウド側のVM はAWS 上にAmazon Linux 2 のVM (hostb とします、ユーザはuserb とします) を作成して検証しました。
Connect Serverのインストール
CData Connect Serverについては以下の記事もご参照ください。
CData Connect Server - データベースからREST APIを作成&公開する方法 | CData Software Blog
まずhosta 上にConnect Serverをインストールします。
CData Connect Server | セルフホスティング可能なデータ連携プラットフォーム
上記から「Cross-platform」の無償トライアルインストーラを取得します。ダウンロードしたファイル (CDataConnect.tar.gz) をhosta に転送し、以下のようにしてインストールします。「usera@hosta%」はプロンプトです(以下同様)。
usera@hosta% sudo mkdir -p /opt/connect
usera@hosta% cd /opt/connect
usera@hosta% sudo tar xvfz
usera@hosta% sudo bash service
usera@hosta% systemctl enable cdata-connect
usera@hosta% systemctl start cdata-connect
上記でインストール・起動が完了です。以下のコマンドで「Active: active (running) 」のように出力されていれば起動できています。
usera@hosta% systemctl status cdata-connect
ブラウザで http://:8080/ でCData Connect のログイン画面が出ることを確認してください。
sshd の設定
まずhostb 側で外部からの接続をポートフォワードできるよう、以下のように GatewayPorts を yes に設定し、サービスを再起動します。
userb@hostb% sudo vi /etc/ssh/sshd_config
(「#GatewayPort no」となっている行を「GatewayPort yes」に変更し保存)
userb@hostb% sudo systemctl restart sshd
次に、hosta のusera からhostb のuserb に公開鍵認証で接続できるようにします。
usera 用の公開鍵 ($HOME/.ssh/id_pub.rsa) がまだない場合は、以下のようにして生成します。
usera@hosta% ssh-keygen -t rsa
できた $HOME/.ssh/id_pub.rsa の内容を、hostb のuserb の $HOME/.ssh/authorized_keys ファイルに追記します。既に当該ファイルがある場合は上書きではなく追記する必要があることに注意してください。また、当該ファイルが無い場合は、以下のように作成して適切なパーミッションを付与してから追記します。
userb@hostb% mkdir .ssh
userb@hostb% chmod 700 .ssh
userb@hostb% touch .ssh/authorized_keys
userb@hostb% chmod 600 .ssh/authorized_keys
(その後 .ssh/authorized_keys に公開鍵を追記)
上記でhosta のusera がhostb のuserb でssh 接続できるようになります。以下のようにしてパスワード無しで接続できることを確認します。
ssh -R 8080:localhost:8080 userb@hostb
上記でssh 接続が成功すると、hostb 側の8080 番ポートを経由してhosta 側の8080 番ポートへアクセスできるようになります。hostb 側に接続できる端末から http://:8080/ でCData Connect のログイン画面が出ることを確認してください。確認できたら、exit コマンドでいったんssh はログアウトしておきます。
autossh の設定
ここまでできたら、あとはこれをサービス化します。
以下のようにhosta にautossh をインストールします。
hosta@usera% sudo apt-get install autossh
以下のような内容のサービス用ファイル「/etc/systemd/system/autossh.service」を作成します。autossh のオプションや「userb@hostb」やUser/Groupの値等は実際の環境に合わせて変更ください。
[Unit]
Description=AutoSSH to My Server
After=network.target
[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -N -M 0 -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval=180" -o "ServerAliveCountMax=3" -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -R 8080:localhost:8080 userb@hostb
Restart=always
User=usera
Group=groupa
以下のようにサービスを有効化して起動します。
usera@hosta% sudo systemctl enable autossh
usera@hosta% sudo systemctl start autossh
上記でautosshのサービス化・起動は完了です。以下のコマンドで「Active: active (running) 」のように出力されていれば起動できています。
usera@hosta% systemctl status autossh
hostb 側に接続できる端末から http://:8080/ でhosta 側のCData Connect に接続できることを確認してください。
まとめ
本記事では従来Cloud Gateway で実現していたものと同等の機能をautossh のサービス化で実現する方法をご紹介しました。
CData Connect Serverはこちらのページからダウンロード可能です。30日間ご利用いただける無償評価ライセンスがございますので是非実機にてお試しください。
関連コンテンツ