はじめに
前回、Azureが提供しているモバイルアプリ開発のプラットフォーム「Azure Mobile Apps」のチュートリアルを使って、ToDoアプリを作ってみました。
チュートリアルでは、(ほぼ)公式ドキュメントに沿ってポチポチしていくだけでアプリが完成してしまいましたので、今回は自分が作ったものがどんなシステムなのか?について調べていきたいと思います!
▼前回の記事はこちら
システム構成と費用
まずはAzure上にどんなリソースが作られたのか?それはどれくらいお金がかかるのか?について調べてみました。
システム構成はこんな感じでした!
ひとつずつ見ていきましょう。
リソースグループ
App ServiceやSQLデータベースといった「リソース」たちをまとめて管理するためのグループです。リソースグループにはお金はかかりません。App Service プラン
App Service(アプリケーションの本体)を入れておく箱のようなものです。一つのVMと考えた方が分かりやすいかもしれません。 App Serviceプランは従量課金制で、コア数やRAM容量といったスペックで値段が変わります。稼働している時間に応じて金額が決まるので、不要な時は停止させておくのがよさそうです。
今回はF1:Free プランで作成されていたため、お金はかかりません。App Service
アプリケーションの本体です。先ほど登場したApp Serviceプランに対して課金が行われるため、App Serviceにはお金はかかりません。SQL Server
クラウド版のSQL Server(Microsoft社が提供しているRDBMS製品)(がインストールされたVMのようなもの)です。次に出てくるSQLデータベースに対して課金が行われるため、SQL Serverにはお金はかかりません。SQL データベース
データベース本体です。「vCoreベース」と「DTUベース」という2つの購入モデルがあります。今回作成されたのは購入モデルがDTUベース・サービスレベルがBasicのデータベースが作成されていたので、¥1.04/時間(1ヵ月稼働させると¥730くらい)課金されます。
こちらはリソースを停止させていても 課金が発生してしまうリソースなので、不要になったらすぐに削除するのがよさそうです。
ちょっと脱線・・・
SQLデータベースの、サービスレベルBasicで使用できる「5DTU」はどのくらいの性能か気になったので少し実験してみたところ、こんな感じでした。操作 件数 かかった時間 INSERT 10万件 タイムアウト INSERT 1万件 65秒 DELETE 10万件 48秒 DELETE 1万件 4秒 SELECT 10万件 16秒 SELECT 1万件 1秒 10万件のINSERTではタイムアウトしてしまいましたが、個人や少人数で使う分には全然問題なさそうですね。
また、今回作成されたインスタンスではストレージ容量が最大1GBに設定されていますが、レコード数10万件で使用容量が23MB(使用率2.3%くらい)、20万件で34MB(使用率3.3%くらい)と、かなり余裕がありました。こちらも遊んでみる分には十分と言えそうです。
またまた脱線・・・
上記でSQLデータベースの性能(クエリ実行速度)について調べたら、アプリの実行速度も気になってきましたので、DBに入れる件数を変えて、アプリ起動から何秒でToDoリストが表示されるのかも調べてみました。
その結果、1,000件では7秒、1万件では27秒かかりました。
(では10万件なら5分前後か……?)と思って10万件で実行したところ、30分経っても表示されず、ギブアップ。App Serviceの限界なのか、端末側のアプリの限界なのか、はたまた別の原因か……。またの機会に調査したいと思います…!
通信とセキュリティ
続いては、システム内でどのような通信が行われているのかについて調査してみました。
App Service
App Serviceのインスタンスを作成すると自動的に、受信用の静的グローバルIPアドレスが1個、送信用の静的グルーバルIPアドレスが複数個割り振られます。(参考4)
インバウンドルールはデフォルトだとアクセス制限なし(All Allow)になっているので、必要に応じて設定する必要があります。
App Serviceで直接設定することもできますし、Azure Front Door(Azureが提供しているLBとCDNとWAFを統合したみたいなサービス)(参考5)と連携させてそこで設定することもできます。
アウトバウンドルールもデフォルトでは制限がありません。
設定をしたい場合は、App Service自体にはその仕組みがないので、NATゲートウェイやネットワークセキュリティグループ等のサービスを連携させる必要があります。
「SQL Databaseとのやりとりをプライベートな接続にしたい」といったときには、Vnet統合を利用するのも一手です(参考6)。
※今回のチュートリアルで作成した「F1:Free」のApp Serviceプランでは、アウトバウンドルールを設定することができないため、設定する場合はApp Serviceプランをアップグレードする必要があります。
SQL Server
パブリックネットワークアクセスを利用する場合、デフォルトではパブリックIPアドレスのアクセスは許可されていません。しかし、例外としてAzureサービスおよびリソースからのアクセスは許可されています。
または、パブリックアクセスを完全に無効化し、プライベートエンドポイントを設定することもできます(参考8)。
おわりに
今回は、チュートリアルに沿って作ったシステムがどんなシステムなのか?について、リソースの種類や使用料金・ネットワークといった観点で調査してみました。
"DTU"や"Vnet統合"といった初めて聞く言葉に戸惑ったりもしましたが、徐々に慣れていってAzureを使いこなせるようになりたいと思います!
ここまで読んでいただきありがとうございました^^
参考
1.リソースグループとは
Azure Resource Manager の概要 - Azure Resource Manager | Microsoft Docs
2.App Service プランの料金
App Service の料金 | Microsoft Azure
3.vCoreベースとDTUベースの購入モデル比較
https://docs.microsoft.com/ja-jp/azure/azure-sql/database/purchasing-models?view=azuresql#understanding-dtus
4.App Serviceに割り振られるIPアドレスについて
受信/送信 IP アドレス - Azure App Service | Microsoft Docs
5.Azure Front Door とは
Azure Front Door | Microsoft Docs
6.Azure SQL Database への Web アプリのプライベート接続
Azure SQL Database への Web アプリのプライベート接続 - Azure Example Scenarios | Microsoft Docs
7.Azure SQL Database のサーバー用の仮想ネットワーク サービス エンドポイントと規則の使用
Azure SQL Database 内のデータベース用の仮想ネットワーク エンドポイントおよび規則 - Azure SQL Database | Microsoft Docs
8.Azure プライベート エンドポイントを使用して Azure SQL サーバーに接続する
チュートリアル: Azure プライベート エンドポイントを使用して Azure SQL サーバーに接続する - Azure portal | Microsoft Docs
9.Azure SQL Databaseの接続アーキテクチャ
Azure SQL Database connectivity architecture - Azure SQL Database and Azure Synapse Analytics | Microsoft Docs