AzureVMの構築からWebDeployでWebAPIを発行する

[SC（非公式）Advent Calendar 2018](https://qiita.com/advent-calendar/2018/unofficial-sc) の16日目です。

#はじめに
Azureの話ですが、クラウドを利用する場合、システムの種類や特性を理解した上で、自分たちの管理する領域をなるべくクラウドベンダーに任せる設計にすることがクラウド上のシステム構築のポイントの一つです。
しかしながら、どうしてもサードパーティ製品をインストールしなければならない場面はでてきます。
最近.NetCore＋AppServiceばかり構築していて、
IISの設定や、ネットワーク周りでつまづいたので、備忘録として投稿します。

#環境
WindowsServer2016
VisualStudio2017
.NetFramework4.7
.NetFramework WebAPI2.0

#Azure上にVMを構築する
Azureのポータルから新規作成-->
Windows Server 2016 DatatCenter のイメージを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/81c5b247-8bff-5124-8e4d-1738868b0f60.png)
リソースグループと仮想マシン名を決めます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/64ab5400-ac36-6b17-87dd-23d211a5806c.png)
基本的にはデフォオルト値でいいですが、
後述の作業のために、RDPのポート(3398)を開けておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/453bc873-39d1-e109-286c-69a0e396b94e.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/540ee680-bc66-cfac-4148-4f9499f6e2d7.png)
VMが作成できたら、リモートデスクトップでログインします。
が、その前に、DNS名を構成します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/6bd1dd00-56f6-bdcc-aaff-b52490db2501.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/c1c53637-4078-499d-f6d9-f9f26b941835.png)
adv20181216というDNS名にしました。
これを設定しておくか、IPを静的にしておかないと、マシンの再起動のたびにIPが変更されるので、
RDPファイルをDLしないといけません。
ではRDPファイルをDLしてリモートデスクトップします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/d5594803-4fe6-3347-9206-7400db79d67c.png)

#WindowsServerへのIISと.NetFrameworkの設定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/5e8c2684-38fd-bb93-5ba7-c7b2ada0ef81.png)
Add roles and features をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/df34741c-abd7-8d16-a999-f2c8834b48d1.png)
Nextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/10927f94-e66a-7bd9-5000-6797136aef1f.png)
Nextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/fee672e9-ab44-bf7a-a80a-b5fd729c9333.png)
Nextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/58fc1ff9-fac2-8c37-63ef-44c05ae8385e.png)
Web Server(IIS)のチェックボックスをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/5aeb2915-4422-67be-abd2-f814b1ddcd7c.png)
Add Featuresをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/42dcee51-99d2-1fb8-68b2-28771a43efaf.png)
Nextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/49a2d11f-9937-709c-f9ad-4b52747b5dd7.png)
ASP.NET 4.6を選択してNextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/fe5fbe44-83c6-4ceb-61aa-821ce003665e.png)
Nextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/73de068b-5762-b4a2-2c5c-2e08f5ecf324.png)
Mangement Sserviceを選択してNextをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/c8d7173c-facb-ae2a-356c-f4270b2ae9f2.png)
必要に応じてサーバーを再起動(意訳)にチェックを入れて
Installをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/4272379c-a378-113e-2224-05a375a66217.png)
インストールが完了したら、Closeをクリック

#WebDeployのインストール
ローカルのVisusalStudioからAzure上のWindowsServerに発行するために、
WindowsServerにWeb Deployをインストールする必要があります。
以下のサイトからダウンロードできます。
https://www.microsoft.com/ja-jp/download/details.aspx?id=43717
※Azure上のWinServerのIEはデフォルトではファイルダウンロードが禁止されていますので、
必要に応じてインターネットオプションの設定を変えてください
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/00363e80-20f7-26a2-673d-0146f9143477.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/7a8baa4a-210e-5025-0e6f-0e606c41943a.png)
WinServerは64bitなので、WebDeploy_amd64_ja-JP.msi をダウンロードしてください
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/9996061b-52c9-65ae-eee7-ca6b2065f69d.png)
ダウンロードしたmsiファイルを実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/2232f8ad-75e6-58a4-03f3-a92af1d47840.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/1858a2d0-0216-b065-437c-93fac2598f07.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/9ad2961c-43a5-d395-357e-1a4cc5f30ccf.png)
セットアップの種類は完全を選択してください
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/33fda136-09a9-6cb5-b43d-a4c165ded140.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/8530681c-91aa-5429-0b55-041d222c123a.png)

#IIS Manager でのサイトの設定
###バインドポートの変更
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/604e1f57-bf75-aa03-ed0f-397d918b537c.png)
Bindingsをクリック
今回は80ポートではなく、8080ポートで接続するので、
バインド先を8080ポートに変更します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/f5768664-2532-a6b3-e05a-bed721037098.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/1a81e277-2934-ce5a-fafd-d69b5dc8b92a.png)

###WebDeployの発行設定
Default Web Site を右クリックしてメニューを表示
Configure Web Deploy Publishingをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/961bdb8b-51ba-194c-4bb1-142c5601bdc6.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/e9783da1-c476-874e-ef8c-8383b19371ce.png)
デフォルトの設定でSetupをクリック
デプロイユーザーはVMを作成した時のadminユーザーになっています。
セキュリティ的に問題がある場合はユーザーを作成して、デプロイ用のユーザーを設定してください。

#ネットワーク設定
###Windowsファイアウォールのポートの解放
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/626081ac-bb67-4379-69cc-abb70c884944.png)
Windowsファイアウォールの受信設定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/05bd0d95-2ffa-f75d-bbe7-98d16fcb7848.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/6402c454-27cd-1017-9d34-f84a516223a9.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/a51afb11-a5e0-cd94-5e26-134fc4677451.png)
8172はWebDeployのデフォルトポートです
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/2e69e9ec-fdbb-9033-cf2b-aa2144d37e27.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/8f5fec35-436c-8683-578f-a7dae79d392d.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/b04919b5-7540-7884-3c5d-9be021517cb1.png)
同じくWebAPI用の8080ポートの受信許可も追加します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/b50cf06f-69cd-06d4-62ea-76a0545b2c2e.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/e34a9501-61da-5720-e208-dae1adb6657d.png)

###ネットワークインターフェースの設定
Azureのネットワークインターフェースの受信設定で、
Webアプリ用の8080ポートとWebDeploy用の8172ポートを受信許可に追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/84cc7828-0fb9-4645-fea5-be78896105e4.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/b11c1650-b27c-50c6-dc1b-29aaefaeb58b.png)

#WebAPI作成とデプロイ
ここからはVisualStudioでアプリを作成していきます。
.NetFrameworkのWebAPIを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/afd60950-bcea-005e-fead-42f8fda84e5c.png)
発行オプションを開きます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/0fa947a8-95c3-ebe5-4a66-f4d21c9d10b2.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/cf4e6247-826e-7b22-774e-d952eb89a2f7.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/92343d2a-0922-7d8d-af0f-0b784d3b95d2.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/94f1f7ca-0f96-aaaf-8be7-3f5a3343e398.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/c42a4e54-3ce2-52d0-bb33-a80bbda52478.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/a168580c-6217-1f97-7e85-c57bef6770f9.png)
保存したら、発行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/c14482fa-6a6a-59c2-1cda-61f83308d82a.png)
証明書エラーが出ますが承諾を押して、進めます。
発行したら、以下の500InternalServereエラーがでます。
リモートデスクトップ上でlocalhost:8080に対してリクエストしてみると、
以下のエラーがでます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/1dc56085-2ae8-84d6-8cd9-4c1ec01572c2.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/aec84e00-8227-f91f-658e-fa70ff1ac20e.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/86098415-4771-d395-4c78-820f6910f85c.png)
「HandlerMapping」「Modules」をRead/Writeに設定します
サーバーの役割のWebServer(IIS)の下層のAppricationDevelopmentの以下の項目にチェックを付けて追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/426b6d3b-67a7-9bdb-fb1b-44ff8733de65.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/8b2dacd6-105b-deff-32d8-acf960bcffc9.png)
再度VisualStudioから発行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/131619/cb3c2839-a94f-f29b-d1a7-aadd13370df2.png)

これで設定は完了です。

#さいごに
今回はMicrosoft.Office.interopを使用しなければならず、DotnetCoreではまだ対応していない(そもそもWindowwsOffice用のライブラリは思想的に違う)ので、.NetFrameworkのWebAPIを用意して、機能的に切り出しました。
マイクロサービスの時代なので、機能ごとに言語や、インフラを選択してk8sなどを使用して管理する方法がDeveloperもOperatorも幸せになれそうです。
WebAPIの技術はどの言語でも勉強していきたいです。