Azure Web AppでFlask使ってみようとしたが失敗した話（Dockerに至るまで）

# はじめに
APIを経由するだけのサーバープログラム的なやつが欲しいなーと思ってみたが、IaaSでWebサーバーのインフラ用意するのは面倒だし、PaaSで環境を用意してみようと思いました。

が、結局は普通のWebAppではうまくいかず、Docker使っちゃった的な失敗ネタです。

# なんでAzure?
AmazonならElasticBeanstalk・・・・ちょっと見てみたら設定がややこしくEC2で環境作ったほうが簡単そうで本末転倒感もありやめました。
GoogleはAppEngineは~~色々苦い思い出があり~~プログラム的にPython3が使えないのがつらい
AzureのWebAppは5ステップくらいの操作でWebサーバー用意できるのがいいと思いました。

# なんでPython?なんでFlask?
ちょっとした文字処理するプログラムなので、学習コストの低めなPythonにしました。
高機能なWebサーバーになるわけでもないのでDjangoは機能多すぎだし
Bottleと悩んだがFlaskの~~マイクロサービスの流行りに乗ってみたい~~シンプルにも作れるしライブラリとかで拡張できるのがいいと思いました。

# 環境
- Azure：Web App
- Python：3.7.0

# ローカル環境の準備
## 仮想環境の作成
以下のコマンドを入力

```python
python3 -m venv env
```
Flaskで使う専用環境ができました。

（参考）仮想環境で作業するためのコマンド

```python
.\env\Scripts\activate
```

が、自分はVisualStudioCodeで開発していて、バージョン切り替え機能を使ったので上記はやってませーん

## Flaskインストール

以下のコマンドを入力

```python
pip install flask
```

## ローカルで実行

Hello World的なものを書いてmain.pyで保存してみた。

```python
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
  return 'Hello, World!'

if __name__ == '__main__':
  app.run()
```

Flaskのローカル環境を実行してみる。
<img width="300" alt="スクリーンショット 2018-08-03 18.05.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/168956/161320fa-f583-810a-eafc-5169fbd7ce8f.png">

想定通り

# Azure環境の準備　
## WebAppの用意
なんとなく、Azure Cloud Shell使いました。
起動方法がこちら
<img width="670" alt="スクリーンショット 2018-08-03 20.15.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/168956/205ab1ab-892a-8537-60e0-fed393a8f983.png">


WebApp作成までに実行したコマンドです

```shell
#デプロイユーザー名とパスワード
az webapp deployment user set --user-name <ユーザー名> -password  <パスワード>

#リソースグループ
az group create --name <リソースグループ名> --location "<ロケーション>"

#プラン名作成
az appservice plan create --name <プラン名> --resource-group <リソースグループ名> --sku FREE

#Webアプリ作成
az webapp create --resource-group <リソースグループ名> --plan <プラン名> --name <Webアプリ名> --runtime "python|3.4" --deployment-local-git
```

アクセスしてみました。
<img width="300" alt="スクリーンショット 2018-08-03 18.06.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/168956/24a792ea-7c25-707d-fc0e-c3ae6d363215.png">

順調順調♪

## Azure Web Appへデプロイ

gitにて以下のコマンドを実施

```shell
git remote add azure https://<デプロイユーザー名>@<Webアプリ名>.scm.azurewebsites.net:443/<Webアプリ名>.git
```

AzureWebAppへデプロイ後。
<img width="300" alt="スクリーンショット 2018-08-03 18.06.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/168956/261acb05-7b4e-6e16-5c1d-aadf43821200.png">

あれ・・・・？動いてない？

こうなるはずだったんだが。。。。。
<img width="300" alt="スクリーンショット 2018-08-03 18.15.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/168956/497a2aad-94d7-a328-d67d-055a6c5cf5bc.png">

# なぜ動いてくれないか確認してみた

Azureで用意しているコンソールに接続してみたが、ローカルとWebAppのファイル構成がなんか違う。。。
自分の開発環境がMacでWebAppがWindows2012ベースだから？と思ってみたりもしたが、割と普通のWebAppではPythonのライブラリインストールできない問題もあったり、そもそも・・・・

Python3.6.4までしかサポートしてないやん

<img width="400" alt="スクリーンショット 2018-08-03 20.30.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/168956/88e0a297-bd71-7df1-c7ab-d24997d4eeeb.png">

あ、、、、自分の環境は3.7.0

WebAppでPython使う場合、デフォのバージョンがPython3.4らしく、それ以外は色々カスタマイズが必要のようで、結局設定が面倒だなーと悶々としながらぐぐっていたら

**Web App for Containers！？**

Dockerを動かせるWeb Appらしいが、Dockerなのに仮想マシンいらないの？
だし、環境はコンテナ化されていて、なんかいいとこ取り感もあって、期待してみたが力尽きたので次回書きます。

# 参考文献
https://microsoftou.com/azure-flask/#toc6
https://qiita.com/ShikaTech/items/8217eded8bf757847b53