
こんにちは、シニアプロダクトスペシャリストの宮本です。
本記事ではAPI Server V25 をAWS 上で2台ホスティングし、Application Load Balancer(ALB)を使ったHA 構成を組む方法をご紹介していきます。
構成
API Server をEC2 上にホスティングし、コネクション情報やユーザー情報などの設定情報をRDS MySQL で管理するようにしています。外部からのアクセスはALB 経由とし、それぞれAPI リクエストを各インスタンスに分散されるようにします。

それでは実際に構築していきましょう。
API Server の準備
API Server 自体の説明やインストール方法、ベーシックな使い方は下記記事をご参照ください。
https://www.cdata.com/jp/blog/install-api-apiserver
データベースやSaaSのデータを簡単にREST APIとして公開!~CData API Server ポイント解説~
- データベースやSaaSのデータを簡単にREST APIとして公開
- OData、Swagger/OpenAPIに対応
- セキュリティ、認証、アクセス制御機能を搭載
製品資料を無料でダウンロード
設定情報を外部DB に保存
初期設定ではAPI Server 内部にあるDB に設定情報が保存される仕組みになりますが、HA 構成を組む場合は複数のインスタンスからアクセスすることができるDB に設定情報を保存する必要があります。そのためには、最初にプロパティファイルを生成します。
手順はSSH などでインストール先インスタンスにアクセスし、apiserver.jar が格納されているディレクトリまで移動します。その後、以下コマンドを実行することでプロパティファイルが生成されます。
java -jar apiserver.jar -GenerateProperties
コマンド実行後、同ディレクトリにapiserver.properties が出力されますので開きます。このファイル内では設定情報の保存先変更をはじめ、ポート番号の変更なども行えます。では、cdata.app.db= にコネクション情報を設定して保存しましょう。※今回はMySQL を使用しています

各RDB へのコネクションは以下のような指定でできます。
MySQL:
cdata.app.db=jdbc:cdata:mysql:server=localhost;port=3306;database=mysql;user=MyUserName;password=MyPassword
PostgreSQL:
cdata.app.db=jdbc:cdata:postgresql:server=localhost;port=5432;database=postgresql;user=MyUserName;password=MyPassword
SQL Server:
cdata.app.db=jdbc:cdata:sql:server=localhost;database=sqlserver;user=MyUserName;password=MyPassword
一旦、API Server を起動してみましょう。起動すると、接続先DB に以下のように設定情報が保存されているテーブルが確認できます。

なお、ライセンスアクティベートするよう促されますので、お持ちのライセンスでアクティベートしてください。
公開テーブルの設定(API 生成)
それでは API Server 上で公開テーブルの設定を行いましょう。
API ページを開き、「テーブルを追加」から公開したいテーブルを選択します。

設定後

次はAWS 側の設定を行っていきます。
Route 53 でドメイン取得
Route 53 のダッシュボードを開き、使用可能なドメインを検索してOK であればそのまま購入します。

連絡先を登録して完了です。

証明書の取得
Certificate Manager でサーバー証明書を取得します。「証明書のプロビジョニング」の方をクリックします。

パブリック証明書のリクエストを選択して右下のリクエストボタンをクリックします。

完全修飾ドメイン名を入力した後、サブドメインも使用する予定なので先頭に「*.」を付与したものを追加し次へをクリックします。

ここではDNS の検証を選択して次へ。

証明書のリクエストが完了したら、ACM で DNS 設定を更新するために「Route 53 でのレコードの作成」をクリックします。

作成ボタンをクリックします。

これでドメイン取得と証明書の取得が完了しました。
ターゲットグループの作成
まずは ALB とインスタンスは 1対1 の構成で進めます。
ターゲットタイプはインスタンスを選択します。

ターゲットグループ名、そしてターゲットとなるインスタンスへアクセスする際のポートを指定します。
API Server のデフォルトは8080 です。もし変更されている場合はそれに合わせて指定してください。
ヘルスチェックパスは「/login.rst」を指定しておきます。
あとはターゲットとなるインスタンスを登録します。選択したインスタンスのポートも8080 に変更しておきます。
これでターゲットグループの設定が完了です。
アプリケーションロードバランサー(ALB)を作成
ロードバランサーの管理画面を開き、作成ボタンをクリックします。
ALB(Application Load Balancer) を利用しますので、ALBにある Create ボタンをクリックします。
ロードバランサー名を指定します。
ネットワークマッピングを設定します。
ここでは外部からアクセスする際のプロトコルを指定します。今回はHTTPS とポート443 を設定、アクションのルーティングは「ターゲットグループへ転送」を選択し、対象のターゲットグループを指定します。

今回、証明書はACM から取得したので「ACMから」を選択、またその下に表示される証明書も選択します。

Route 53 でサブドメインを設定
使用するサブドメインを設定します。 Route 53 にてホストゾーンから対象のドメインをクリックします。

レコードを作成をクリックします。

エイリアスをクリックしてサブドメインを設定します。トラフィックのルーティング先にはALB を選択します。そうしますと、リージョンとロードバランサーを選択できるようになりますので、それぞれ対象のリージョン、作成したロードバランサーを選択します。

セキュリティグループのインバウンドルールの設定
HTTPS でのアクセスはALBからのみ許可するようセキュリティグループのインバウンド設定を変更します。インバウンドルールにあるポート:443 にアクセスできる対象が特に制限の無い 0.0.0.0/0 となっています。
この状況では ALB を通さなくても API Server の管理画面が表示できてしまいますので、ソースは自分のセキュリティグループを指定し自己参照で指定します。ALB でも同じセキュリティグループを指定しているので、ALB からのアクセスのみHTTPS でアクセスできるようになりました。
以上で設定が完了となります。
現時点ではインスタンスは1台ではありますが、ALB 経由の API Server を構成できましたので、API Server にアクセスしてみましょう。
シングル構成の API Server にアクセス
先ほど Route53 で指定したサブドメインを使ってアクセスしてみましょう。
API Server にログインでき管理画面が表示できればOKです。あとは、Postman からも公開中エンドポイントを叩いてみましょう。
エンドポイントは、https://xxxxxx/api.rst というURL に直接アクセスすることで確認できます。
API エンドポイントリスト
Postman

これでシングルインスタンスの構成は完了なので、次は2台目のAPI Server を追加していきます。
2台目のAPI Server を作成
一度1台目のAPI Server はインスタンスごと停止させます。
停止が完了しましたら、EC2のインスタンスリストから1台目の API Server がホスティングされているインスタンスを選択し、右クリックで「イメージとテンプレート」→「イメージを作成」でマシンイメージを作成します。完了後はそのイメージを使って新たにVM を作成します。
ターゲットグループにインスタンス追加
設定が完了したら、ALB から参照しているターゲットグループに2台目のインスタンスを追加します。

「保留中として以下を含める」をクリックすると、ターゲットリストに追加されます。
スティッキーセッションの有効化
最後にロードバランサーからユーザーのセッションを特定のターゲットにバインドできるよう設定します。
ターゲットグループを開き、属性タブの編集ボタンをクリックします。

ターゲット選択設定の維持設定をオン、タイプは「ロードバランサーがCookie を生成しました」を選択します。

以上で、2台目の設定も完了しました!
それでは2台目のAPI Server も起動させたら、ロードバランサーのリソースマップを見てみましょう。
どちらにもアクセスできるようになれば、正常のマークが表示されます。
HA 構成の API Server にアクセス
ではシングル構成のときのように管理画面にアクセスしてみましょう。
複数のマシンからPostman などでAPI リクエストを行ってみます。どちらのインスタンスにアクセスされたかは、両方のインスタンスにTeraterm などでSSH 接続して標準出力をみていれば、リアルタイムに確認することができます。
アクセスが分散されていればこれで完了です!
おわりに
いかがでしたでしょうか。AWS 環境にてAPI Server V25 のHA 構成を組むことができました。同じような手順で Auto Scaling 構成なども行うことが可能になります。
今回ご紹介したAPI Server は 30 日間のトライアル利用が可能ですので、是非お試しください!
https://www.cdata.com/jp/apiserve
関連コンテンツ