IISで実行していたASP.​NET Web FormsアプリケーションをApp Service(Windows Container)環境へ移行する

2021.08.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

私はプライベートでKenticoをたまに触るのですが、Kenticoはバージョンや構成によっては ASP.NET Web Formsで構築されている場合があります。

どうにかしてクラウドネイティブに近づけていきたいものです。どうせなら。

各クラウドベンダーには色々な移行オプションが用意されていますが、本日はVisual Studioの基本的なDockerサポート機能とAzureデプロイ機能を使い、コンテナ化とACRへのデプロイを試してみました。

ビルドマシンはWindows10 or Server 2019 で Windows Container が動作する環境を前提にしています。

Dockerサポートの追加

ASP.NET Web Formsで作成された古いWebアプリケーションがターゲットである想定です。

Visual Studio 2019 でソリューションを開きます。
ソリューションエクスプローラーでプロジェクトを右クリックし、追加->Dockerサポートを選択します。
すると、Dockerファイルが追加されます。

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat 

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

この時点でプロジェクトの実行オプションにDockerが追加されていると思います。
試しに実行してみるとコンテナのビルドから実行まで行われ、ローカルでコンテナ環境が実行されます。

複雑な構成を行っていなければ一旦これで最低限のコンテナ化は完了です。

Azure Container Registry(ACR) へプッシュ

Visual Studioの公開機能でACRへプッシュすることが可能です。

ACRリソースが存在していなければ作成も可能です。

Pushが完了したら、AzureポータルにアクセスしACRを確認してみましょう。
イメージが登録されていると思います。

このままだと実はApp Service作成時にエラーになります。
Azureポータルからリソースを作成する場合はレジストリーのAdminユーザーを有効化する必要があります。
ACR管理画面のアクセスキー設定から有効化しておきましょう。

App Serviceを作成します。
先程プッシュされたACRのコンテナイメージを指定して作成します。
注意点としては以下のオプションを指定することくらいでしょうか。

  • 公開:Dockerコンテナー
  • オペレーティング・システム:Windows

デプロイされたら、参照から表示してみましょう。
最初、表示まで数分時間がかかると思います。

無事App Service (Windows Container) へのサイト移行が完了しました。

まとめ

汎用的な操作でGUIベースで簡単な内容だと思いますので、手元に古のASP.NET Web Formsのアプリを持っている方は是非試してみてください。
簡単な検証が出来たので近々、Kenticoで試してみたいと思います。