VNet Integrationを利用してWeb apps とAzure Databaseを接続してみる
現在Web apps - Azure Database間はAzureのデータセンターネットワークを通じ接続する仕様となっているかと思いますが、先日プレビューで公開された
New App Service VNet Integration feature
を利用してVNet、サービスエンドポイント経由で接続できるかやってみました。
イメージ的には以下の通りです。
準備
まずは各リソースを用意します。 Web apps(App Service)はWin版をS1で設定。Azure DatabaseはMySQL版を汎用プランで設定しました。
VNetはサブネットをWeb appsのみ用意します。 Azure Databaseとサービスエンドポイント経由で接続するため、サービスの設定をお忘れなく。
VNet統合設定
VNetの追加(プレビュー)からVNet, サブネットをそれぞれ選択し、設定します。
完了後はこちら。
Azure Database VNet追加
続いてAzure DatabaseのVNetルールに先程のサブネットを追加します。
ファイアウォール規則も追加してみました。 ※SSLは簡略化のためオフにしてますが、要件に合わせて設定ください。
接続確認
以下テストスクリプトを用意し、Webappsの公開ディレクトリ(wwwroot)直下に配置します。
<?php // データベース接続チェック // 接続情報は予め仕込んだアプリケーション設定から取得しております。 $dbc = mysqli_connect(getenv('CUSTOMCONNSTR_db_host'), getenv('CUSTOMCONNSTR_db_user'), getenv('CUSTOMCONNSTR_db_password'), getenv('CUSTOMCONNSTR_db_name')); //echo ($dbc); if (!$dbc) { die('db connection failed \n'.mysql_error()); } echo('DB connect success!! <br>'); // userテーブルからユーザ名を取得する $sql = "select user from user;"; if ($result = $dbc->query($sql)) { while ($row = $result->fetch_assoc()) { echo $row["user"]. "<br>"; } // 結果セットを閉じる $result->close(); } if (mysql_close($dbc)){ echo 'disconnect success!! \n'; } ?>
ブラウザでアクセスしてみます。 ユーザ一覧が取得できてますね。
ちなみに外部からアクセスできないか確認してみます。
$ mysql -h vnetintegrationtest.mysql.database.azure.com -u vnetintegration@vnetintegrationtest -p Enter password: ERROR 9000 (HY000): Client with IP address 'x.x.x.x' is not allowed to connect to this MySQL server.
もちろんですが、できないですね。
2019/1/28時点でまだプレビュー段階ですが、GAが待ち遠しいです。 Webapps - Azure Database間をよりセキュアに接続したい要件などありましたら検討してみてはいかがでしょうか。