App Service on Linuxを使ってみる

## はじめに
Azure App Serviceは、所謂PaaSです。既存のこのサービスは、ホストされているサーバがWindows Serverだったため、Windowsでは実行できないようなもののデプロイは基本的にできない構成でした。
最近になって、このホストOSがLinuxになったものがようやく登場し、今までAzureのPaaSの恩恵を受けられなかったアプリケーションをデプロイできる可能性が出てきました。
そこで今回は、その新しいApp Serviceをざっくりと扱う方法についてまとめます。

## App Serviceの作成
とりあえずApp Serviceを作成しましょう。
ポータルでApp Service on Linux で検索すると下図のようなやつが出てくるのでそれを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/42fbcd30-5a5a-0b22-4160-391011d5d1f4.png)
作成時は、基本的に通常のApp Serviceと同じような感じです。
Linux版は、App Service Planが通常版とは独立しているので別途新規作成します。
作成は、下図のような感じです。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/f752f711-7de2-d5db-0172-bc7c72144158.png)
2016年12月現在、選択できるリージョンは、

* West Europe
* Southeast Asia
* West US

の3つに限られます。また、デフォルトでは、West Europeが選択されます。

次に、初期状態でアプリケーションを実行するコンテナを選択します。
Azureが提供してくれるコンテナとDocker Hubからのデプロイとその他のプライベートリポジトリからデプロイする方法の3パターンが用意されています。
今回は、ビルトインで提供されている.Net Core v1.0を使用します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/e283b860-16f7-5172-70e5-2bd7c7b2441c.png)

今回の構成は下図のような感じです。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/ddcfba98-7c3e-3912-1f6a-bfe3c30f5edc.png)

作成が終わったら設定画面から通常のApp Serviceと同じようにアクセスできますが、.Net Coreのコンテナのみ2016年12月現在App Serviceの一番最初の画面が表示されず真っ白な画面が表示されます。(バグか仕様か不明)

## ソースコードの準備
今回は、Visual Studio 2015 Update3で.NET Core v1.0のプロジェクトを作成します。

![image](https://qiita-image-store.s3.amazonaws.com/0/28367/8107ea26-419e-4350-21b8-8b49ff6cf3e6.png)

テンプレートは、Webアプリケーションを選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/28367/6d2c826e-e5ed-4693-3802-1664f791e139.png)

作ったテンプレートを実行すると下図のような感じです。

![image](https://qiita-image-store.s3.amazonaws.com/0/28367/9c746ef0-2a78-18fd-a748-2d2e352709cf.png)

普通に通常の.NET Coreのアプリケーションです。
では、これをApp Service on Linuxにデプロイしてみましょう。

## デプロイする
App Service on Linuxは、現状

* ローカルGit
* GitHub
* FTP

でのデプロイが提供されています。
2016年12月現在、自分のローカルGitからpushを実行しようとしたところ500エラーが返ってきてpush出来ませんでした。バイナリファイルが含まれるとエラーが返ってくるような挙動をしていてどうにもならなかったので、今回は、FTPを使用してデプロイを実行します。

### デプロイ資格情報の設定
はじめにデプロイ資格情報を設定します。
ここでユーザ名とパスワードを設定します。
ここで決めたユーザ名とパスワードがFTPでのデプロイに必要なので適当に作成してください。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/dd475168-916a-3806-1812-b7d22524fa14.png)

### デプロイに必要な情報を取得する
次にFTPデプロイに必要なURLなどを取得します。
ポータルのプロパティからすべて取得できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/28367/6e33b0e7-0e6b-3ffc-9966-eefeaf88cb85.png)

FTPのデプロイユーザは、アプリ名\資格情報のユーザ名 になります。
あとは、FTPホスト名が必要です。

### デプロイする
デプロイは、Visual Studioから行います。
ソリューションエクスプローラーの公開から設定します。
下図の画面で設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/63318aa9-c250-e55b-c9e8-5dfc7c4de8a4.png)

発行方法は、デフォルトでWeb DeployになっているのでFTPに変更します。
その他設定項目は下記のような感じです。

* サーバー : FTPホスト名
* サイトパス : site/wwwroot
* ユーザー名 : デプロイユーザ名
* パスワード : 資格情報のパスワード
* 宛先URL : App ServiceのURL(https://AppService名.azurewebsites.net)

その他構成は、下図のような感じです。
Target Frameworkは、.NETCoreApp,Version=v1.0です。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/88080369-51bb-750d-4eee-8e8a79d691a7.png)

設定が終わったら発行ボタンを押してデプロイします。デプロイ完了まで数分かかるので気長に待ちましょう。

デプロイが終わったらApp ServiceのURLにアクセスしてみましょう。 まだこの段階だと設定がすべて終わっていないので何も表示されないはずです。

## デプロイ後の微調整
App Service on Linuxは、一番最初に読みだされるファイルを明示的に設定する必要があるのでその設定を行います。
下図のようにDockerコンテナーの項目を選択して表示されるスタートアップファイルの欄に入力します。

![image](https://qiita-image-store.s3.amazonaws.com/0/28367/0916516a-3d27-5a75-b494-1b80e9de76f7.png)

ここのファイル名は、アプリケーションにdllになるので特に何も設定していなければプロジェクト名.dllになります。
これを入力して保存を押します。

保存をしたらアクセスしてみましょう。
今度は、アプリケーションが表示されるはずです。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/98a28b41-72bc-9785-ddb5-305bbbb45638.png)


## まとめ
App Service on Linuxは、まだ出てきたばかりのサービスなのでどういう方向性になるのかわかりませんが、コンテナを基軸としているため、自前のアプリケーションをそのままデプロイしていた元々のApp Serviceとは異なり、コンテナでパッケージングしたものをデプロイするモデルになっていくのかなという印象を受けました。

まだまともなドキュメントもほぼ皆無の状態ですが、これからかなり流行る気がするので気長に待ちましょう。