【ASP.NET】EC2（Windows Server）にASP.NETアプリケーションをWebデプロイする

# はじめに
## 対象読者
* ASP.NETで作成したWebアプリケーションのデプロイ方法を知りたい方
* ローカルフォルダへの発行ではなく、Web配置の方法を知りたい方
* IISの設定方法を知りたい方

特に2つ目のWeb配置を行う方法はあまりまとまっていなかったので、本記事をご活用いただければ幸いです。
また、EC2を使わない場合もIISの設定やデプロイの方法は共通したものになるので、参考になるかと思います。

## やること全体像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/a6fa7a9b-cef6-f542-bab6-2374735e2497.png)

## 動作環境
**開発マシン**
* Windows 11 Home（23H2）
* .NET 8.0（SDK 8.0.204）
* Visual Studio 2022

**サーバ**
* Windows Server 2022（21H2）
* IIS（10.0.20348.1）
* .NET 8.0（ASP.NET Core Runtime 8.0.7）

# EC2
## インスタンスの作成
AWSコンソールにログインし、EC2 > インスタンス > インスタンスの起動から、今回は「My Windows Server」という名前で、Windows Server環境のインスタンスを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/3df920d3-a706-d347-fa1c-bccadff6e93d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/3df0c058-e144-b7af-8ed2-f1d7ccbc023c.png)

キーペアを作成し設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/db32ff35-0633-0ede-25cd-18e10f67773f.png)

その他設定は特に変更せず、インスタンスを起動します。

## ポート設定
今回は、アプリケーションへのアクセスに81番ポートを、Web配置によるアクセスに8172番ポートを使用するため、これらのポートを開放するよう設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/65bef3ca-7f4d-be0d-a050-d89441fe08c4.png)

EC2 > インスタンスから、対象のインスタンスを選択し、セキュリティグループを編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/1b88ed1a-0367-3e24-d034-a9cb4b176ed3.png)

インバウンドルールの編集を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/0db321ed-c719-0f60-e055-c0228d840522.png)

TCPポート81番,8172番を開放します。（HTTP(S)はTCPを使用するため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/2735d4e0-b74f-4572-4890-78ee57b72fe5.png)

保存して、ポート設定は以上になります。

## インスタンスへ接続
EC2 > インスタンスから、対象のインスタンスに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/eb596924-436c-daca-80de-d49964bebe4c.png)

リモートデスクトップで接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/6b6ef63b-a531-c2ab-002f-dc6ddb23b404.png)

初めに作成したキーペアを使用して、パスワードを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/74c97510-da5f-5221-aea7-8aa6d5048194.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/83d45dd9-6a53-ce6e-271e-d993393e2904.png)


リモートデスクトップファイルを実行し、取得したパスワードを使用してログインすれば完了です。

必要に応じて、Windowsの設定言語を日本語に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/7de34baf-8762-c9fa-8d39-f73f2add448a.png)

# サーバ側
## 必要なコンポーネントのインストール
### IIS
サーバーマネージャーから、役割と機能の追加を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/ca7edc76-a57c-7ef5-1847-ec23c9168416.png)

インストールの種類、サーバーの選択はデフォルトのままで次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/7483e752-e291-b4b0-521f-4153fffde697.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/f415006f-9501-4455-8ebd-a315bf675431.png)

サーバーの役割から、Webサーバー(IIS)を選択し次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/eee3203f-7e98-36dd-afab-833c38758fb1.png)

機能から、.NET Framework 4.8 Features > ASP.NET 4.8を選択し次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/9ac6ceeb-da61-7987-2f84-3d7c2f372280.png)

Webサーバーの役割(IIS)では、そのまま次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/b73c0a32-10fd-2c71-a5fe-6b04e2e1bf6e.png)

役割サービスから、Webサーバー > アプリケーション開発 > ASP.NET 4.8を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/3dd4321b-4c35-2535-61d2-44247087ad61.png)

また、管理ツール > 管理サービスも選択し次へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/bc264fbe-dcc4-20ef-f57e-298121ddc3f3.png)

インストールして完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/f79fa007-6f8e-7b02-9888-d8ffadba9e69.png)

### Web Deploy
Web配置を行うために、以下サイトからWeb Deployツールをダウンロードします。
https://www.iis.net/downloads/microsoft/web-deploy

今回は、最新のv4.0（webdeploy_amd64_ja-JP.msi）をダウンロードしました。

ダウンロードしたインストーラを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/124b67e1-24bf-ca62-37c3-9b14e0c98ff7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/913b2dde-f12b-86d4-9836-e531661b5e16.png)

セットアップの種類は完全を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/6d621b95-2951-99f6-06bb-dfcc38ee6502.png)

インストールして完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/73ecbded-cc5e-55ec-2cc1-bd6b50ad47e0.png)

### .NET Core ホスティングバンドル
IISでASP.NETアプリケーションを動かすために、以下サイトから.NET Core ホスティングバンドルのインストーラをダウンロードします。
https://learn.microsoft.com/ja-jp/aspnet/core/host-and-deploy/iis/hosting-bundle?view=aspnetcore-8.0

今回は、最新のv8.0.7（dotnet-hosting-8.0.7-win.exe）をダウンロードしました。

ダウンロードしたインストーラを実行して完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/b0f08d1b-86d6-af87-08b0-be016cbadd35.png)

## IISの設定
### IISマネージャーユーザー作成
IISマネージャーを開き、IISマネージャーユーザーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/7df4497f-9ae2-a27c-264a-980da984221f.png)

ユーザーの追加を選択し、任意のユーザーを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/768db7ed-2f11-e794-f238-3520b1244043.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/965a46f9-13b3-bca2-2f1b-9449244d5cbb.png)

### サイト作成
サイトを右クリックし、Webサイトの追加を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/fa7950fd-5a16-fc6f-75e6-29b885354232.png)

今回は、以下の通りWebサイトを作成します。
サイト名：Web Deploy Sample Site
物理パス：C:\WebDeploySample（フォルダ作成済み）
ポート：81
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/65346325-2cfe-f5da-101b-cb455f9c9c34.png)

### Web配置による発行の有効化
作成したサイトを右クリックし、展開 > Web配置による発行の有効化を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/25964b71-0a3d-37ba-82b5-bf3b2d5a7a30.png)

先ほど作成したユーザーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/fa349f72-75c4-72ef-cb21-ba7df3bb4e80.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/cc4c962f-392e-9841-2fbc-b5c519f7d90f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/575d6bf2-1847-62ea-2c82-9cb7e8d419f9.png)

設定を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/ebebad89-23e6-4294-9e5a-1ed602213066.png)

結果が出力されたら、ダイアログを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/823a3500-4ea9-5f3d-9dec-0329e9ba353e.png)

発行の設定ファイルが作成されている（デフォルトだとデスクトップ）ので、開発マシン側の設定で使用するために控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/0bbb389c-3f26-540d-bb00-52b0fd8661d0.png)

## ポート設定
サーバの81番ポートを開放するよう設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/74259f55-567c-eb77-2a24-0b534227f5ee.png)

サーバーマネージャーから、ツール > セキュリティが強化されたWindows Defenderファイアウォールを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/89614816-a9cd-7409-59ac-1a03f94b1a3b.png)

受信の規則から、新しい規則を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/d883b869-f7c7-a1fe-e481-9f1b286e12f6.png)

ポートを選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/beaf8aa7-93fc-504a-8617-42c7b4230762.png)

TCPポート81番を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/cc0b1c3d-5d74-759c-445e-af321b6951a4.png)

接続を許可するを選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/ca409e97-7e2b-d268-0ca5-22ce4e1c7f3f.png)

プロファイルはデフォルトのままとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/8ad147cb-51ff-4bf6-b34a-c9d9fe838fb5.png)

最後に名前を付けて完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/35481c89-1dfb-9c6d-4257-3d711cb60fc6.png)

:::note info
8172番ポートは開放しないのか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/1f15583f-939e-9248-93e8-80b07005637d.png)
先の手順でIISのインストールを行った際に、管理ツール > 管理サービスをインストールしていれば、自動で開放してくれているので別途設定は不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/d4ae4254-9f6c-9a6b-afc9-55d147f1a477.png)
:::

# 開発マシン側
## ASP.NETアプリケーションの作成
Visual Studioを起動し、ASP.NET Core Webアプリを作成します。
（今回はRazor Pagesアプリケーションを使用しますが、MVC／Blazor／Web APIでもデプロイの手順は同様です）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/691cd8c0-1a4a-01a2-4e06-9f2a14951c00.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/b4fbc920-8c6c-d783-4ae6-3a75d74455d9.png)

## デプロイ
ビルド > 発行を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/aae4ab57-4087-82fb-35e8-4919b1a99bb1.png)

Webサーバー(IIS)を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/2335a0ff-4c19-ddf5-85ec-74d31575319b.png)

Web配置を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/a349174c-52f6-30ce-1bf0-f90d6b60f125.png)

サーバ側の設定で控えておいた発行の設定ファイルを参考に、接続情報を入力します。
（今回はIPアドレスでアクセスします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/7eb88e46-2a56-c28f-2e0a-8136b69c124a.png)

接続の検証を行った場合は、セキュリティ証明書のエラーが発生しますが、同意するを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/bd2520ec-bf10-c2b1-abc5-55c24652552c.png)

完了を選択しダイアログを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/5d15e175-168f-396a-e802-01677de1eba9.png)

発行を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/711d4b8a-98c3-2733-df3a-5b49c4d4e270.png)

発行が完了すると自動でブラウザが立ち上がり、無事にアクセスできていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/373a5e78-b204-fbb2-ed8c-54d70c5708c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/c4504b6f-b4ae-63a1-ac72-0a81f60ad913.png)

以上でデプロイ完了です！

# 補足
## Web配置でデフォルトの8172番ポート以外を使用する
ここまでの手順を参考に、
* EC2のセキュリティグループを編集し、任意のポートを開放
* サーバのファイアウォールの設定から、任意のポートを開放

これらに加えて、以下の通りサーバの設定を変更すれば完了です。

IISマネージャーを開き、管理サービスを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/251f75f7-61a8-7d4e-37e3-44f0a8e8cd1e.png)

任意のポートに変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257421/1e052c46-d47e-5933-1ee4-50ff37a4e99a.png)

# おわりに
ASP.NET、およびAWS（触り始めほやほやです。。）の学習を通じて、本記事を書いてみました。
特にIISまわりについて、どのような仕組みでASP.NETアプリケーションが動いているのか、大変勉強になりました。

ただ、主にAWSやネットワークまわりで誤った記載があるかもしれませんので、その時はご教示いただけますと幸いです。
その他、実用的でない箇所などはご容赦ください。

ご一読いただき、ありがとうございました！