スコープ
ASP.NETアプリケーションからASP.NET CoreにそしてオンプレからAzureにモダナイゼーションすることを想定しています。
そもそもモダナイゼーションとは?
CAFによれば、クラウド移行の方法は3通りある。
1つがマイグレーション
2つ目がモダナイゼーション
3つ目がイノベーション
というような手法である。
マイグレーションとは?
マイグレーションとはざっくり言えばこれまでのオンプレシステムからクラウドに最小限の変更で移行することを目的としたものです。
変更を少なくするためにIaaSを選択することが多くなります。
クラウド移行することで費用の明確化だとか、ハードウェアを手放すというような効果があります。
モダナイゼーションとは?
モダナイゼーションとはアプリケーションの近代化を目指し、運用の手間をより下げるとか自動化を目指すといったことを目的にしたものです。また、アプリケーションフレームワークも最新化することを検討します。
このようにすることで最新の機能を取り入れやすい構造にするとともに、技術的負債を返済するということも考えていきます。
イノベーションとは
これまでのアプリケーション構造を再設計してクラウドネイティブアプリケーションとして再設計します。たとえば、マイクロサービスとして設計します。
今回はモダナイゼーションのお話
というわけでだいたいモダナイの目的は以下のようになります。
- コストの明瞭化(主にクラウドに移行する場合)
- 最新の機能を使用したい(AIなど)
- セキュリティの問題
- パフォーマンスの問題
リソース選択をしていこう
まずはAzureにどんなリソースあるの?
Azureのそれぞれのリソースの特徴を知って目的に合ったものを選択できなければなりません。
そのためには、たとえWeb開発者といえどもAzureの知識が全くないということはあり得ません。
そのために勉強をしましょうというわけでAzureの知識地図を読みましょう。良い本です。
AzureCAFを読もう
Azureの導入戦略について書かれたドキュメントです。
この中に何をどのように考えてAzureを導入していったらよいのかということが書かれています。もちろん、モダナイにおけるさまざまなリソース選択についてのヒントがあります。
AzureCAFではモダナイズするときはPaaSを採用すべきということが明確にうたわれています。
アーキテクチャーセンターを読もう
モダナイに限らずさまざまなAzure設計パターンがノウハウがちりばめられています。
Azureを使うのなら一度は目を通すことをお勧めします。
ソリューションのコントロールと生産性のバランス
コントロールと生産性のバランス | ソリューション | 説明 |
---|---|---|
最大のコントロール | AKS, Azure Red Had OpenShift | インフラのコントロール運用はやや大変 |
バランス | Azure App Service, Azure Spring Apps, AzureFunctions | コードの開発に重点インフラの自動化 |
最大の生産性 | Power Apps, Power Automate | リードタイムを最短化 |
コンピューティングリソースの選択
Azure App Service
第一選択肢
コードベース・コンテナーともにまずはApp Serviceを考える。
コンテナーの場合はAzure Container Appsとの比較になる。
かならず、実運用ではPremiumプランを選択する。
Azure Static Web Apps
バックエンドはAzure Functionsを組み合わせて使うことを検討する。
もし、バックエンドがWebAPIになる場合は、初めからApp Serviceにデプロイしたほうがいいかも。
とはいえ、広く公開する静的サイトを構築するにはCDN付きのサービスとしておすすめ。
バッチどうするの?
小規模なバッチではWebJobsかAzure Functionsかの2択と考えられる。
Functionの考慮事項としてはその実行時間が30分で収まるかどうかというところ。
これ以上の実行時間になる場合はDurable Fuctionsを検討
データベースの選択
PaaS選択で迷うのがSQL Serverからの移行になる。
SQL DatabaseとManaged Instanceと2つあるのでどちらを選択したらよいのかというところだ。
まずは、SQL Databaseを検討する。
こちらのほうが、より自動化が進んでいるからである。
これで満たせない要件がある場合にManaged Instanceを選択する。
たとえば、どうしてもJSTで運用したいとか、なにか管理系の何かが欲しいとかそういう場合です。
DevOpsするためのツールを導入する
ソース管理やCI/CDに関するもの、問題管理やらテストに関するツールを導入することを指します。
おおよそ、モダナイをするにあたって必須レベルでやりたいことは自動テストや継続的デプロイと呼ばれるようなCIやCDに関する領域だろう。
思いつく代表的なものだけで、GitHub、GitLab、Azure DevOpsといったようなものが思いつく。
しかしながら、CI/CD領域においては歴史が長いのでそれぞれの製品で致命的な差がないというのが事実。
そうなってくるとほかのところで差別化が図られているGitHubが第一選択肢として思い浮かべる。なにしろ、GitHub Copilotの存在が強い。開発系のエンジニアとしてはGitHub Copilotを使用しない日がないレベルだからだ。
そうすると、あえてほかのソース管理システムを選択する理由がなくなってきてしまう。
もちろん、ほかの要件によってプロジェクト管理を重点に置くのならAzure DevOpsというのもありかもしれない。
まとめ
現時点で、ベースラインとして考えらえるようなチョイスとは以下の通り。
- Azure App Service
- SQL Database
- GitHub
もちろん、実際のアプリケーションはほかにもストレージであったりイベント送信であったり様々なサービスを組み合わせて構築すると思うが上に示したようなロジックや資料をあたって必要なものをチョイスしていくことができるかとおもいます