AzureのWebAppsを使ってAPIサーバーとクライアントサーバーを発行する備忘録

# はじめに
AzureのWebAppsを使って発行する機会がありました。
WebAppsをAPIサーバー側とクライアントサーバー側と2つ立てて発行する方法を今回学んだので備忘録。(仕事で作成したものの備忘録なので、キャプチャと説明が少なくわかりにくいところがあるかもしれませんが、あくまで備忘録なのでご了承ください。。)

# 環境
- windows10
- Visual Studio2019 (サーバーサイドの開発に使用。.net core3.1で開発)
- Visual Studio Code(クライアントサイドの開発に使用。Angular8で開発)

# APIサーバーを作る
## AzureポータルからWebApps作成
VisualStudioから直接作成することもできるのですが、今回はAzureポータルで先に作成してからVisual Studioを使って発行したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/8b3f85d7-7e26-ff17-26e4-8f6d876a8a93.png)

名前などを適当に入力。
今回私はAPIサーバー側に.NET Core 3.1を採用していましたが、ランタイムストックは「ASP.NET4.7」を選択。


タグとかApplication Insightsを付けたい人とかは別タブがあると思うので、そちらで選択したら、最後に作成ボタンを押して作成。

作成が終わったら必要な部分の設定をしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/5285bda9-5d80-a73a-7154-87ab58129af5.png)
ここでDBの接続文字列の設定をしています。
なお、AzureSQLDatabaseののせ方は本記事に記載していないため、ご了承ください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/91f8f28c-a842-c60f-09a1-efafb7256a39.png)
また、↑これを設定することで標準時刻を日本時刻にすることができます。
これを設定しないとDBに落ちる時刻が日本時刻にならないといったトラブルがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/5a70243d-07a5-f60b-0e28-70f7b0cd9419.png)
スタックは.NET Coreに


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/e92ae80d-1e8a-2c88-1842-039d1fe7f16e.png)
赤枠のは消してもいいみたい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/cab27524-2e1c-833c-b1cd-2268b0eb839b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/32b26abe-695c-80b8-2582-f3602a0d9022.png)

↑ここにこの後作成するクライアントサイドのAppServiceのURLを記述します。

設定が終わったら、Visual Studio2019を使用して発行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/9d852d44-481c-aeed-b417-f94eac0c892c.png)


ユーザー名とPWはここを見るとあります。↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/4303b356-b060-87f2-0a49-266440a09d77.png)




# クライアントサーバーを作る
Visual Studio Codeの拡張機能を使う方法と、FTPツールを使う方法2つ試しました。
兎にも角にもまず最初にクライアントサイドのAppServiceを作成。
作成方法はサーバーサイドと同じです。
(ランタイムストックはASP.NETを選択したようなNodeを選択したような記憶があります。。曖昧で申しわけない。。)
先輩メモによるとWindowsでないとweb.configの設定見たりとかIIS的なことができないためにwindowsを選択できるランタイムストックにする必要があったようです。

設定値はサーバーサイドと基本的に同じですが、違う部分だけ載せます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/3d8aba9c-a085-f01e-f42e-fa64d247dc4f.png)
クライアントサイドにはDBの接続文字列情報を記載する必要はなし！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/a90d39d1-f989-251a-a48b-205ddfd8f783.png)


CORSの設定は必要なし。

※作成したクライアントサイドのURLをサーバーサイドのCORSに設定するのは忘れずに。

## Angular(クライアント)側のコードをビルド
[Angularのドキュメント](https://angular.jp/guide/build)に従って、ビルドします。
ここで、environment.prod.tsの「apiUrl」にサーバーサイドのURLを設定します。

## web.configの追加

```
<configuration>
    <system.webServer>
        <rewrite>
          <rules>
                <rule name="Index Rule" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Redirect" url="/index.html" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
```
上のは例です。こんな感じのweb.configを追加します。windowsでは必須みたいです。

## Visual Studio Codeの拡張機能を使用して発行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/6a063d8b-bf15-8466-a32c-2cb42d4f37d5.png)
これを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/e7e8023a-aa18-764a-74ce-fcffac2c1c20.png)
インストールすると、Azureマークが右端にできて、vscodeから簡単にDeployできちゃいます。

## FTPツールを使用して発行
[FileZilla](https://filezilla-project.org/)というのを使いました。クライアントの方です。

インストールできたら、FileZillaを起動。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/2a81e278-45ea-b095-a871-763fa1994d99.png)

サイトマネージャーをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/ed7787db-d6a5-1c34-4f15-930fecc7cbec.png)

ホスト、ユーザー名、PWはクライアント側のWebAppsのここを参考に↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/6c256839-4e4c-1223-e89f-22a5c6588a0a.png)
※FileZillaのホスト＝FTPSエンドポイント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201826/49e9ae79-9e59-40d5-a5bc-ddf5e54f06c6.png)
ローカルサイトの先ほどビルドしたファイルをリモートサイトにアップロードすれば完了です。
ファイルを全選択して右クリックをするとアップロードを選択できます。

# さいごに
やっぱりPaaSは楽でいいですね