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

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

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

関連コンテンツ