CData API Server を Azure App Service にデプロイし、SQL Server で設定を管理する



データベースの上に REST API を構築しようとすると、通常はバックエンドのコードを書き、さらにそれを保守し続ける必要があります。しかも、その API を Azure App Service でホストする場合は、もう 1 つ落とし穴があります。App Service のインスタンスは、ローカルファイルを長期間保持してくれません。アプリを再起動すると、ローカルディスクに保存したものは設定も含めてすべて消えてしまいます。

CData API Server なら、この問題を解決できます。データベースのテーブルから REST / OData エンドポイントを直接生成するので、バックエンドのコードは一切不要です。さらに、設定、接続、API 定義、ユーザーアカウントといった設定情報をすべて、cdata.app.db という 1 つの接続を通じて SQL Server データベースに保存できるため、再起動しても何も失われません。本記事では、SQL Server を設定情報の保存先として、Azure App Service(Linux)上に CData API Server をセットアップしていきます。


前提条件

  1. Azure サブスクリプション
  2. Azure からアクセス可能な SQL Server インスタンス(Azure SQL Database、またはパブリックアクセスを許可したオンプレミス環境)
  3. ローカルマシンにインストールされた Java 17
  4. WinSCP や FileZilla などの FTPS クライアント

Step 1: CData API Server をダウンロード・インストールする

Windows をお使いの場合でも、Cross-Platform (.tar.gz) 版をダウンロードしてください。このビルドには、Azure App Service(Linux)でそのまま実行できる apiserver.jar と webapp/ のファイル一式が含まれています。

  1. CData API Server のページから Cross-Platform (.tar.gz) 版をダウンロードします
  2. アーカイブをローカルフォルダ(例: C:\apiserver-work\)に展開します

展開すると、apiserver.jar、webapp/ フォルダ、lib/ フォルダのほか、いくつかのファイルが確認できます。


Step 2: 設定ファイルを生成・編集する

次に、設定を保持するプロパティファイルを作成しましょう。

  1. ファイルを展開したフォルダでコマンドプロンプトを開き、以下のコマンドを実行します。
  2. java -jar apiserver.jar -GenerateProperties
    同じフォルダに apiserver.properties が作成されます。これで、Azure にアップロードするファイルがすべて揃いました。
    -GenerateProperties フラグで apiserver.properties を生成する
  3. 続いて、API Server の接続先を SQL Server に向けます。任意のエディタで apiserver.properties を開き、以下の 3 つの設定を変更します。
    • Config database connection:設定情報をローカルファイルではなく SQL Server に保存するよう API Server に指示します。
    • cdata.app.db=jdbc:sqlserver://[server]:1433;database=[database_name];user=[username];password=[password];encrypt=true;
    • Data directory:API Server がログやキャッシュなどのランタイムデータを保存する、App Service 上のフォルダです。このパスは App Service の Linux 環境でそのまま使えます。
    • cdata.app.directory=/home/site/apisrv_data
    • Port:Azure App Service はアプリがポート 80 で待ち受けることを前提としているため、デフォルトの 8080 から変更します。
    • cdata.http.port=80

メモ:保存する前に、[server]、[database_name]、[username]、[password] を実際の SQL Server の情報に置き換えてください。API Server は初回起動時にそのデータベース内にテーブルを作成するため、ログインにはテーブル作成権限が必要です。

設定データベース、データディレクトリ、ポートを設定した apiserver.properties

Step 4: Azure App Service を作成する

Azure Portal で新しい Web App を作成し、Basics タブで以下のように設定します。

  1. Publish: Code
  2. Runtime stack: Java 17
  3. Java web server stack: Java SE (Embedded Web Server)
  4. Operating system: Linux
  5. Region: レイテンシを抑えるため、SQL Server と同じリージョンを選択
  6. Pricing plan: Basic B1 以上。Free F1 プランではディスク容量が 1 GB しかありません
  7. Web App の基本設定を入力する
  8. Deployment タブで Basic Authentication をオンにします(FTPS の利用に必要です)
  9. Networking タブでは Public Access をオンのままにします。その他の項目はデフォルトのままで OK です
  10. Networking でパブリックアクセスを有効にする
  11. Review + Create をクリックして、作成を完了します
  12. アプリの作成とデプロイが正常に完了した画面

Step 5: FTPS で API Server のファイルをアップロードする

それでは、アプリのリソースページからファイルを転送していきましょう。

  1. Deployment Center に移動し、FTPS credentials タブを開きます。FTPS エンドポイント、ユーザー名、パスワードをコピーしておきます
  2. Deployment Center の FTPS 認証情報
  3. コピーした認証情報を使い、ポート 21 の明示的 TLS(Explicit TLS)で FTPS クライアントから接続します
  4. 認証情報を使って FTPS クライアントから接続する
  5. リモート側の /site/wwwroot/ に移動し、Azure が配置したプレースホルダーファイルを削除します
  6. webapp/、lib/、apiserver.jar、apiserver.properties を /site/wwwroot/ にアップロードします

App Service には Java 17 が組み込まれているため、jre/ フォルダのアップロードは不要です。

FTPS で API Server のファイルを /site/wwwroot/ に転送する

Step 6: スタートアップコマンドを設定する

次に、JAR の起動方法を App Service に設定しましょう。

  1. App Service で Configuration を開き、Stack settings に進みます
  2. Startup Command フィールドに次のコマンドを入力します:java -jar /home/site/wwwroot/apiserver.jar
  3. Apply をクリックし、App Service を Restart(再起動)します
Stack settings でスタートアップコマンドを設定する

Step 7: API Server にアクセスして管理者アカウントを作成する

ブラウザを開き、App Service の Overview ページに表示されているデフォルトドメイン(yourapp.azurewebsites.net のような URL)にアクセスします。すべて正しく設定できていれば、API Server のアカウント作成ページが表示されます。

デプロイの成功を示す API Server のアカウント作成ページ
  1. 強力なパスワードを設定して、管理者アカウントを作成します
  2. 検証用に、30 日間のトライアルライセンスをアクティベートします

初回起動時に、API Server は設定済みの SQL Server データベース内にテーブルを作成します。以降は、設定やユーザーアカウントがすべてこのデータベースに保存されます。

SQL Server に作成された API Server の設定テーブル

トラブルシューティング

起動時に SQL Server ドライバーのエラーが発生する場合:

  1. Microsoft JDBC Driver for SQL Server をダウンロードし、ZIP を展開します
  2. Java 11 以降向けの JAR(.jre8 ではなく mssql-jdbc-12.x.x.jre11.jar)を選択します
  3. FTPS で /site/wwwroot/lib/ にアップロードし、App Service を再起動します

ページが表示されない場合:

  1. Stack settings のスタートアップコマンドを確認します
  2. apiserver.properties に cdata.http.port=80 が設定されているか確認します
  3. Azure Portal で Log stream を開き、Java のエラーが出ていないか確認します

再起動後に設定が消えてしまう場合:

  1. cdata.app.db の接続文字列を確認します
  2. Azure から SQL Server にアクセスできることを確認します。Azure SQL の場合は、ファイアウォール設定で「Allow Azure services and resources to access this server」をオンにしてください

CData で Azure からリアルタイムな REST API を公開しよう

これで、CData API Server が Azure App Service 上で稼働し、設定情報は SQL Server で管理されるようになりました。あらゆるアプリケーションから、標準的な REST / OData を使ってパブリック URL 経由でデータにアクセスできます。再起動しても設定は保持されるので、必要に応じてスケールアウトすることも可能です。30 日間の無料トライアルをダウンロードして、ぜひお手元のデータでお試しください。ご不明な点がございましたら、サポートチームまでお気軽にお問い合わせください。