オンプレミスの RDB から REST API を自動生成・API Server Cloud Gateway 経由でインターネットに公開

by 杉本和也 | 2020年05月22日

f:id:sugimomoto:20200521180342p:plain

こんにちは! CData Software Japan リードエンジニアの杉本です。

今回はCData API Serverの機能でも若干特殊ながら、とても重要な機能である「Cloud Gateway」を解説したいと思います。

CData API Server とは?

CData API Server は3Stepでお好みのRDBやNoSQL、クラウドサービスからREST ful APIを生成して、公開することができるソフトウェアです。

https://www.cdata.com/jp/apiserver/

f:id:sugimomoto:20200521180327p:plain

配置型のソフトウェア製品なので、基本的にはサーバーないしWebアプリをホスティングできる環境を用意して、そこにAPI Serverを構成し、アクセスできるようにする製品です。

f:id:sugimomoto:20200521180335p:plain

なので、インターネット上に公開したAPIを作成したい場合は、クラウドホスティング、オンプレミスの場合はDMZなどに配置する必要が出てきます。

そこで今回紹介する Cloud Gatewayの機能を活用することができます。

Cloud Gateway機能について

Cloud Gateway はクラウド上のSSHサーバーのリバースSSHポートフォワーディングを利用し、CData API Serverをインターネット上に公開する機能です。

http://cdn.cdata.com/help/BWE/jp/odata/Windows-Edition.html#cloud-gateway

f:id:sugimomoto:20200521180342p:plain

API Server がSSH Server と接続を確立した状態で、SSH Server がHTTP/Sリクエストをポートフォワーディングすることにより、API Serverをインターネットアクセスを可能にします。

これにより、ファイアウォールの変更、DMZへの配置、固定IPアドレス・ドメインといった要素をAWSなどのクラウドサービス側に寄せることができ、セキュアにオンプレミスに存在するRDBや基幹システムをクラウド上で扱えます。

今回はこの機能をAWS EC2・Amazon Linux インスタンスで構成する方法を紹介したいと思います。なお、SSHサーバーはお好みのマシンで構いません。

必要なもの

  • CData API Server
  • MySQL(API Server の APIデータソースとして使います)
  • AWS EC2(SSHサーバーとなるマシンであれば、AzureでもGCPでも)
  • Windows マシン(API Server を配置するオンプレミス環境です)

SSHサーバーとなるEC2 インスタンスを構成する

まずはゲートウェイの役割を担うSSH ServerをAWS EC2で構成したいと思います。EC2の場合、SSHがデフォルトで接続できる状態なので、あまり小難しい準備は必要ありません。

今回はAmazon Linux の以下のインスタンスを使用しました。

f:id:sugimomoto:20200521180349p:plain

検証用なので、無償利用枠で構成しています。

f:id:sugimomoto:20200521180357p:plain

必要なポートはSSHと最終的にAPI Serverを公開するポートです。今回は API Serverのデフォルトポートである「8783」を選択しました。

f:id:sugimomoto:20200521180406p:plain

環境が構成できたら、EC2の設定を調整します。EC2 Instance ConnectでSSHアクセスし

f:id:sugimomoto:20200521180413p:plain

「sshd_config」に「GatewayPorts yes」を追加してください。デフォルトではコメントアウト状態で「#GatewayPorts no」になっています。

sudo vi /etc/ssh/sshd_config

f:id:sugimomoto:20200521180419p:plain

以上で、EC2側の準備は完了です。

オンプレミス側 API Server のセットアップ

続いて、オンプレミス側にAPI ServerとMySQLをダウンロード・インストールします。とりあえずローカルでのみ動く、ベーシックなAPIを構成してみましょう。MySQLは予めインストールされていることを想定しています。

詳細な手順を見たい方はこちらをどうぞ。

以下URLからWindows版のAPI Server をダウンロード、インストールしてください。

https://www.cdata.com/jp/apiserver/download/

CData API Server にログインし「設定」→「接続」の画面に移動し、データソース一覧の中から「MySQL」を選択します。

f:id:sugimomoto:20200417223617p:plain

あらかじめ設定したLocalhost MySQLの接続情報を入力し、テスト接続で接続状況を確認した上で、設定を保存しましょう。

f:id:sugimomoto:20200417223655p:plain

次にリソースを追加するために「設定」→「リソース」へ移動し、「リソースを追加」をクリックします。

f:id:sugimomoto:20200417223724p:plain

接続先の一覧から先程登録したMySQL接続を選択すると

f:id:sugimomoto:20200417223753p:plain

対象のテーブル一覧が出てきます。ここから任意のテーブルを選択して

f:id:sugimomoto:20200417223817p:plain

あとは、保存をクリックすれば対象のテーブルがそのままREST APIとして生成されて公開されます。

f:id:sugimomoto:20200417223838p:plain

APIページに行くと、テーブルリソースが追加され、API Reference を確認できます。

f:id:sugimomoto:20200521180429p:plain

実際にエンドポイントにアクセスしてみると、GETリクエストが実行されて、データを取得できました。

f:id:sugimomoto:20200417223948p:plain

Cloud Gatewayの構成

最後にCloud Gatewayの構成を行います。

タスクメニューのAPI Serverアイコンを右クリックして「Server Options」を選択します。

f:id:sugimomoto:20200521180437p:plain

Server Options画面の「Cloud Gateway」タブから設定を行うことができます。

「Enable Cloud Gateway」にチェックを入れて、EC2に接続するために必要な情報を入力します。

  • Host:構成したAWS EC2のホスト名を入力します。
  • Port:デフォルトは22です。
  • Authentication Type:Public Key
  • User:Amazon Linux ですとデフォルトは「ec2-user:です。
  • Certificate:予め作成しておいたAWS EC2接続用の証明書ファイルを選択します。

f:id:sugimomoto:20200521180513p:plain

設定後、「Test Connection」をクリックして以下のようなメッセージが表示されればOKです。

f:id:sugimomoto:20200521180519p:plain

最後に「Service」タブに戻り「Run as a Windows Service」のチェックボックスをOFFにして、「Save Changes」をクリックします。クリック後、API Serverの再起動が始まるので、正常に起動すればOKです。(始まらない場合はStartボタンをクリックしてください)

f:id:sugimomoto:20200521180524p:plain

EC2からAPI Serverにアクセスしてみる

あとはEC2のホストアドレスにポート番号:8783を付与すれば、CloudGatewayがポートフォワーディング処理を実施して、API Serverへのアクセスを提供してくれます。

f:id:sugimomoto:20200521181129p:plain

また、デフォルトではBaseURLがローカルホストになっているので、API Serverのサーバー設定タブからAWS EC2 の BaseURLを指定しておきましょう。

f:id:sugimomoto:20200521180908p:plain

おわりに

いかがでしたでしょうか。これによりクラウドサービス・アプリケーションから手軽にオンプレミスのデータへのアクセスを提供することができるようになります。

構成がちょっとむずかしい、よくわからない所がある、などありましたら、どうぞお気軽にテクニカルサポートまで聞いてみてください。

テクニカルサポートへの問い合わせは以下のサポートフォームで受け付けています。

https://www.cdata.com/jp/support/submit.aspx

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。