【忙しい人のための Webinar さっくりまとめ】既存 .NET アプリの Azure への移行とクラウドネイティブ アプリへのモダナイズ

みなさんごきげんよう。Microsoft App Innovation チームです。

Webinar でとり上げている概要をかいつまんでご紹介するとともに、親和性の高い学習ツール（Microsoft Learn）のラーニングパスをご紹介する「Webinar さっくりまとめ」をお届けします。

第二弾は、以下の Webinar のサマリ―です。

https://info.microsoft.com/JA-AzureApp-WBNR-FY21-10Oct-30-AzureAppInnovation-SRDEM48516_LP02OnDemandRegistration-ForminBody.html?Dev_QT=PET3035062

> **ちなみに** : Webinar にお申込みいただくと、デジタルイベント（セッション）とスライド資料へのリンクが添付されたメールが届きます。

> スライド資料には今回ご紹介しているサービスや機能の詳細ページ（ [Docs.com](https://docs.microsoft.com/ja-jp/?Dev_QT=PET3035062) ）へのリンクも掲載していますので、気になったものに関しては [Docs.com](https://docs.microsoft.com/ja-jp/?Dev_QT=PET3035062) や [Microsoft Learn](https://docs.microsoft.com/ja-jp/learn/?Dev_QT=PET3035062) をご活用ください。 

#どんなセミナー？

このウェブセミナーでは、「既存 .NET アプリの Azure への移行とクラウド ネイティブ アプリへのモダナイズ」と題して、以下 3 つのトピックについて説明しています。

- Microsoft Azure で .NET アプリケーションを実行するためのプラットフォームとしてのサービス
- 移行と、移行のために開発が必要となった場合に使用するツール
- 既存のアプリケーションの状態に合わせたホスティングオプション
 

※ 今回の Webinar では、"モダンなクラウドアプリ"を実現するために、クラウド利用のメリットを最大限に生かす PaaS や FaaS を利用した Azure のネイティブアプリへの移行方法にフォーカスをおいてご紹介しています。

##【Azure で .NET アプリケーションを実行するためのプラットフォームとしてのサービス】 

前提として、.NET アプリケーションがホストできる Azure のすべてのプラットフォームサービスは以下の 3 パターン。

- サービスとしてのインフラストラクチャ：IaaS
- サービスとしてのプラットフォーム：PaaS
- サービスとしての関数：FaaS
 

###IaaS（ [Azure Virtual Machines] (https://docs.microsoft.com/ja-jp/azure/virtual-machines/?Dev_QT=PET3035062)）

クラウド上の仮想マシンでシステムをホストするシンプルなサービス。オンプレミス上の仮想マシンであればそのまま移行できるので既存システムのリフト＆シフトするのに非常に向いている半面、仮想マシンから 、OS ミドルウェアまで自分で定期的に管理を行う必要があり、クラウド利用のメリットを生かしきれていない側面もあります。（今回の Webinar では詳細な移行方法は割愛します。） 

###PaaS（ [App Serivice](https://docs.microsoft.com/ja-jp/azure/app-service/?Dev_QT=PET3035062)、[Azure Container Instances](https://docs.microsoft.com/ja-jp/azure/container-instances/?Dev_QT=PET3035062)、[Azure Kubernetes Service (AKS)](https://docs.microsoft.com/ja-jp/azure/aks/?Dev_QT=PET3035062) など ）

アプリケーションの実行環境。クラウドベンダーが提供するもので、利用者はアプリケーションをデプロイして利用するだけなので、OS やミドルウェアのセキュリティパッチの適用、アップデートなどの管理業務が必要なくなり、ビジネス本来の作業に注力することができる点がメリットとしてあげられます。 

###FaaS（ [Azure Functions](https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-overview?Dev_QT=PET3035062) ）

イベント駆動型で何らかのアクションをトリガーとしてオンデマンドで動作するもの。PaaS のようにサービスが常に動作しているわけではないので課金は実際に稼働した分のみで、高負荷の場合にはスケーリングも自動で行われる PaaS よりも管理が簡素化されています。

オンプレミスで動作している既存の Web アプリケーションをそのまま FaaS 化することはできないので作り直す必要がありますが、用途と機能が合致すれば多くのメリットが生まれます。

**アプリケーション以外で移行を考慮しなければいけないもの**は下記の 2 つ。

- データ
- ディスク

###データベース

Azure には用途に合わせた様々なマネージドデータベースが用意されています。

-　[Azure SQL Database](https://azure.microsoft.com/ja-jp/services/azure-sql/?Dev_QT=PET3035062)
-　[Azure Cosmos DB](https://azure.microsoft.com/ja-jp/services/cosmos-db/?Dev_QT=PET3035062)
-　[Azure Database for PostgreSQL](https://azure.microsoft.com/ja-jp/services/postgresql/?Dev_QT=PET3035062)
-　[Azure Database for MySQL](https://azure.microsoft.com/ja-jp/services/mysql/?Dev_QT=PET3035062)
-　[Azure Database for MariaDB](https://azure.microsoft.com/ja-jp/services/mariadb/?Dev_QT=PET3035062)
-　[Azure Cache for Redis](https://azure.microsoft.com/ja-jp/services/cache/?Dev_QT=PET3035062)

Cosmos DBは Mongo DB や Cassandra、Garmin、Azure Storage テーブルといった一般的な NoSQL API 向けのワイヤープロトコルを実装しているので、アプリケーションからはもちろん、使い慣れた No SQL クライアントツールを使用することが可能です。

参考：[NoSQL データベースとリレーショナル データベースの違いについて](https://docs.microsoft.com/ja-jp/azure/cosmos-db/relational-nosql?Dev_QT=PET3035062)

DB システムを移行するのにシステムやミドルウェアの構築が必要がないので、データの移行さえ済んでしまえばシステム的なメンテナンスはフリーで本来の利用に注力することができますね！ 

###ストレージ

クラウド上の Web アプリケーションでのファイルアクセスについては、ファイルの格納場所を含め、クラウドストレージサービスを利用するというのが一般的になっています。

Azure のストレージサービスである [Azure Storage](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-introduction?Dev_QT=PET3035062) には暗号化、バックアップ、ディザスタリカバリ機能、REST API といったクラウド利用ならではのメリットをあらかじめ備えたものが用意されていて、データの格納についても [Blob](https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-blobs-introduction?Dev_QT=PET3035062)  やストレージテーブルなど目的に合わせた選択が可能になっています。

Blob や Azure Storage を利用する際は、.NET アプリケーションのプロジェクトに Azure SDK を追加することで .NET のオブジェクトとして扱うことができるようになります。

アプリケーションのロジックで意図的にディスク上のファイルの読み書きを行っているなどの特殊なケースの場合や ASP.NET アプリケーションを仮想マシン以外で構想した、ネットワーク共有されたフォルダにアクセスする必要がある場合は、現在プレビュー中で公開されている [Azure Files](https://docs.microsoft.com/ja-jp/azure/storage/files/storage-files-introduction?Dev_QT=PET3035062) が有用です。 

**その他にアプリケーション本体以外で移行を考慮しなければいけないもの**

- 認証
- プラットフォームを含むアプリケーションの監視

###認証

[Active Directory](https://docs.microsoft.com/ja-jp/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview?Dev_QT=PET3035062) で管理されている一般的なオンプレミス環境だと AD との相互信頼が存在するので、ユーザーアクセスの制御について認証なし、または Windows 認証で問題なく済むことがほとんどです。アプリケーションを Azure 移行して引き続き同じ認証ベースを引き継ぎたい場合は Azure Active Directory で認証を有効にする必要があります。 

###監視

ASP .NET アプリケーションを Windows サーバー上の IIS とホストしている場合は、アプリケーションへのアクセスログは IIS の Web サーバーログとして自動的に取得されています。Azure の PaaS である App Service でホストする場合は Log Analytics を有効にする必要があります。Log Analytics は単に Web サーバーログを取得するだけではなく、プラットフォーム全体のテレメトリを取得してログとして保存してくれます。.NET をはじめ、Node.js、JAVA、Python アプリケーション に用意されている Application Insights を追加することによってより詳細な監視を行うことも可能です。

>[Application Inshight](https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/app-insights-overview?Dev_QT=PET3035062)：アプリケーションのパフォーマンス監視サービス。これを追加することでパフォーマンスの異常を自動的に検知してくれたり、組み込まれている分析ツールを使用して問題を診断して、ユーザーがアプリを使用して実行している捜査を把握できたりする。パフォーマンスやユーザビリティを継続的に向上させる上で役立つように設計されている。 

##移行と、移行のために開発が必要となった場合に使用するツール

既存の .NET アプリケーションを Azure に移行するには、最新の Visual Studio と [Azure SDK](https://docs.microsoft.com/ja-jp/dotnet/azure/sdk/azure-sdk-for-dotnet?Dev_QT=PET3035062) を使用します。

**Visual Studio をインストールして構成する際のポイント**

インストールオプションで下記 3 つを選択する。

- ASP.NET
- Web 開発
- Azure 開発のワークロード

>すでに Visual Studio をインストール済の方は Visual Studio インストーラを起動して構成を再度行うことができます。これは既存の ASP.NET アプリケーションを App Service に配置するために使用します。 

アプリケーションの配置に Visual Studio を使用しない場合はあらかじめ Azure 側で App Service のインスタンスを作成して、GitHub もしくは Azure のプライベートリポジトリからアプリケーションのプロジェクトを取得するように構成したあと、目的のリポジトリに対してアプリケーションのプロジェクトをプッシュすることで配置することも可能です。

>アプリケーションからのファイルアクセスの部分を Azure Storage Blob にアクセスするように変更したり、 Application Insights のエージェントを追加するといった Azure のリソースを操作するための変更を行う場合は Visual Studio の Azur SKD for .NET が必要。

Visual Studio を使用すると、Azure SDK の入手やソースコードの編集、Azure の App Service インスタンスの作成からアプリケーションの配置まで一貫した作業ができるのでおすすめです。


##既存のアプリケーションの状態に合わせたホスティングオプション

.NET アプリケーションを移行するクラウド上のプラットフォームとしておすすめの PaaS。この PaaS サービスにも選択肢があります。 

- [App Serivice](https://docs.microsoft.com/ja-jp/azure/app-service/?Dev_QT=PET3035062)
- [Windows コンテナー](https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/about/?Dev_QT=PET3035062)

この 2 つの特色と.NET アプリケーションの移行先としての選択する場合のそれぞれの指針については下記のとおりです。また、これらのホスティングオプションを使っての Azure 上での公開方法については Webinar 内にてデモを交えてご紹介しています。 

###Azure App Service

アプリケーション自身が、Windows サーバーや IIS に対する依存関係がないクリーンな ASP.NET Web アプリである場合。この場合は App Service を選択するのが最も良い選択となります。

長所：PssS の継続的なメンテナンスやさまざまなツールが Azure 側でそろっている

短所：すべてのアプリでランタイムがサポートされているわけではない（一部のアプリではリファクタ

必要条件：サービス移行アシスタントの[準備チェックリスト](https://github.com/Azure/App-Service-Migration-Assistant/wiki/Readiness-Checks?Dev_QT=PET3035062)にアクセスして、注意すべき点を確認すること。

**Windowsコンテナー**

App Service では賄えないぐらいの依存関係がプラットフォームとある場合。

Windows コンテナーを使用すると [Docker](https://azure.microsoft.com/ja-jp/services/kubernetes-service/docker/?Dev_QT=PET3035062) の Windows イメージにすべての依存関係を含めることができるので、その辺が解決できます。もちろん App Service でも可能でありますが、アプリを最新化してクラウド DevOps をしたい場合にも Windows コンテナーを選択することになります。

長所：.NET と C# Noコードリファクタリングがほとんど不要（ App Service でも同様。改めてクラウドのリソースを新たに使ったりしない限りはそのままコードを動かすことができる）

短所： Docker のスキルが必要

必要条件：開発環境に [Windows Docker] (https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-docker/configure-docker-daemon?Dev_QT=PET3035062) や [Docker Engine](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/cloud-infrastructure-services.docker-windows-2019?Dev_QT=PET3035062) の用意が必要。

>既存の.NET アプリケーションを Windows コンテナーに移行するには Docker Hub に用意されている Windows サーバーの Docker イメージを利用します。（ Windows Server Core と Windows Nano Server ）

.NET Framework を使ったアプリケーションがホストするのであれば Windows Server Core 一択。

Windows Server Core は.NET Framework の 3.5 と 4.x をサポートしているので、このバージョンの .NET Framework を使っているアプリケーションであれば Windows Server Core を Docker イメージ上でホストすることができる。

Visual Studio を使う方法と Docker ファイルをつくって、Docker のコマンドでコンテナー化してそれを Azure にプッシュしていくという 2 つの方法がある。 

##おわりに

移行のためのアセスメントツールも用意されています。

**[App Service Migration Assistant](https://azure.microsoft.com/ja-jp/blog/introducing-the-app-service-migration-assistant-for-asp-net-applications/?Dev_QT=PET3035062)**

>HTTP エンドポイントをスキャンすることで .NET で作られた Web サイトを Azure App Service に容易に移行できるかどうかを評価してくれる。Migrate to Azure Service というのも使用できるので合わせてどうぞ！


また、今回ご紹介した内容についておススメの Microsoft Learn ラーニングパスは下記のとおりです。お時間のあるときにぜひ一度お試しください！

- [アプリケーションとインフラストラクチャの移行とモダン化](https://docs.microsoft.com/ja-jp/learn/modules/app-and-infra-migration-and-modernization/?Dev_QT=PET3035062)
- [ASP.NET アプリを Azure に移行する](https://docs.microsoft.com/ja-jp/learn/paths/migrate-dotnet-apps-azure/?Dev_QT=PET3035062)
- [Visual Studio で Azure 関数を開発、テスト、デプロイする](https://docs.microsoft.com/ja-jp/learn/modules/develop-test-deploy-azure-functions-with-visual-studio/?Dev_QT=PET3035062)
- [Azure App Service を使ってコンテナー化された Web アプリをデプロイして実行する](https://docs.microsoft.com/ja-jp/learn/modules/deploy-run-container-app-service/?Dev_QT=PET3035062)