App Service on Linuxを少しだけ深堀してみる

## はじめに
App Service on Linuxも、通常のApp Service同様管理ツールとしてKuduが使えます。
これを触ると環境周りの設定等をいろいろ細かく触ったりできるので使えるとすごく便利です。
そこで今回は、App Service on LinuxのKuduをいろいろ触ってどんな情報が拾えるのかなどを見ていきます。

## Kuduへのアクセス
Kuduへのアクセスは、App ServiceのURLを少し書き換えてアクセスします。

https://AppService名.scm.azurewebsites.net

という風にazurewebsitesの前に.scm.を追加するとそのApp ServiceのKuduにアクセスできます。

アクセスすると下図のような画面になります。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/4d638845-2b17-0e89-8409-fdb37c260b7b.png)
また最近では、ポータルからのリンクも用意されています。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/9c064cc6-2a25-efc9-d5db-16f1b63b4c78.png)


## 環境変数を確認してみる
サーバに設定されている環境変数は、一覧で確認できます。
画面上部のEnvironmentからアクセスするページで確認できます。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/85413bd9-b914-426e-bc6a-9b4354d80794.png)

アクセスすると下図のようにずらっといろいろな情報が列挙されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/f37eee78-b165-bdc1-0ebf-d767ca1acb78.png)


## コンソールにアクセスする
Kuduでは、コンソールを使用してある程度サーバを操作できます。
Windows版では、CMDとPowerShellが使用できましたが、Linux版では、Bashが使用できます。
アクセスは、画面上部のDebug console からアクセスします。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/6bb2119e-99df-5cf9-079c-8828429b139f.png)
とりあえずここでコンソールを叩いていろいろやっていきます。

## コンソールの裏側を探る
コンソールに入れたのでとりあえずいろいろ叩いてこのLinuxの正体を探っていきます。
`
uname -a
`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/3cb3ea25-e582-5458-68a4-e5d5ae3c2e32.png)
とりあえずLinuxで、Debianが絡んでいることはわかりました。

`
ps
`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/781313e8-5aa9-2a85-3a8f-2d79f1430a0f.png)

bash、Apacheなどが動いています。
apacheが2ついるのが気になります。

次に気になるのがアプリケーション実行用のコマンド群
まずPHPのビルトインコンテナを設定します。
その状態で
`
PHP
`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/65955927-d090-7145-6668-2da8fae15db8.png)

PHPコマンドはいませんでした。

次にNodeのビルトインコンテナを設定した状態で
`
node
`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/31d2717f-492e-a0e2-4b18-e7418c6b4040.png)

Nodeコマンドはいるっぽいです。
じゃあバージョンを見てみましょう。
ちなみに設定してあるコンテナのランタイムは、Node 6.6.0です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/92ab4654-10c5-f6ff-f1b1-722006e6022a.png)
バージョンが違いました。

次にdotnet coreのコンテナを設定して
`
dotnet
`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/f5ea050f-b2cb-f543-f1aa-3c1825772082.png)
dotnetコマンドもいませんでした。

ここら辺まで叩いて大体皆さんわかったと思いますが、おそらくKuduは、Kudu用のコンテナが立ち上がっていて、その中のコンソールを叩いている状況っぽい雰囲気です。
ということは、ここでいろいろ設定したところでほかに果たして反映されるのかという問題が出ます。
若干Kuduがある必要があるのかよくわからなくなってきました。

次にファイルシステムがどうなっているか見てみます。
`
df
`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/d96c3b53-3a9f-5338-3d43-d20e374a9b52.png)
ごちゃごちゃいろいろ出てきました。

次にマウントしているドライブの確認
`
mount | grep //
`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/fe8759db-ae38-ccf3-b218-c5e226ca96c4.png)
ということで、dfの結果と合わせて、/home以下がマウントされたネットワークドライブになっています。ここら辺は、今までのApp Serviceと同じような感じです。
恐らく、アプリケーションコンテナ、コンテナホスト、Kuduコンテナとそれぞれが共通してこのネットワークドライブを見ているのでKuduでファイルを編集してアプリケーションにも反映させたい場合は、この下にファイルが確実にある必要があります。

## 環境変数を追加してみる
いろいろとコンソールの中身を探ってみましたが、次にポータルから環境変数を追加してみます。
環境変数の追加は、アプリケーション設定の中のアプリ設定にキーと値を追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/d06c5cc4-0093-c077-fb97-059620b68527.png)

追加したら、Kuduのコンソールを叩いてみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/6a626de8-4f42-6e36-f140-c0bd91b2fe3d.png)
追加されました。ここまでは、普通のApp Serviceと同じです。
では、アプリケーションで拾ってみましょう。
一番手っ取り早い方法としてphpinfo()を使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/e5ff543b-2a47-b887-ad84-dbb9227395a9.png)
phpinfo()で拾えたので、この設定は問題なく使用できるようです。


## ファイルを編集したかった
Kuduのbashには、vimがあらかじめインストールされています。

`
dpkg -l
`

で確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/38bbd7af-700c-7ded-ec72-894696fa2f2a.png)
こんな感じです。

そこで、例えばApacheの設定ファイルを書き換えようとVimを立ち上げようとすると、コンソールが固まるので今のところファイルの編集はコンソールからは、厳しそうです。
Apacheのファイルを編集したい場合は、

`
cp -R /etc/apache2 コピー先
`

で適当なところにコピーをして、適当にローカルなどで編集、/etc/apache2 に上書きするとファイルが更新できます。


## Apacheの設定を変更したかった
変更方法は、分かったので変更してみましょう。
デフォルトのKeepAliveのタイムアウト時間は、Apacheの設定を見たところ5秒に設定されています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/ed04fcd5-1a45-2677-f091-590eb47c35c0.png)
phpinfo()で確認しても5秒になってます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/ad97c2cd-0289-0355-6432-333acd0e4a5e.png)

ちょっと5秒は長いのでこれをさっきほどの手順で3秒に書き換えます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/8113c923-8869-56f9-3108-4098ecebfcbd.png)
変更自体はできました。
ここら辺は、権限渡さなくてもいいのにとか思ってましたがなんだかんだできました。
実運用するときは、Windows版みたいにxdtを読み込ませて更新みたいな感じにconfファイルを読み込ませて変更したいですね。
Apacheの設定ファイルを変更したらApacheを再起動したいものです。
Kuduのコンソールでは、sudoコマンドが使えないのでおとなしくApp Serviceを再起動しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/2bfb0cbd-63f6-9665-3210-eebf678351df.png)
再起動後にもう一度phoinfo()を確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/28367/3ca3a96a-d2ee-3b14-847f-4239086aaa29.png)
変わってないですね。

KuduからApacheの設定変更は、今のところできなさそうです。
アプリケーションコンテナにいるApacheと設定が共有できていないからKuduの中で設定を変更しても意味がないとかそういう話な気がします。


## まとめ
Linux版Kuduは、まだまだ発展途上です。正直現状では、Windows版と比べて何もできないに等しいかなという印象を持ちました。また、仕組み的にアプリケーション自体、コンテナごとデプロイするといったアプローチになることが多い気がします。そのためあまりKuduを使うシナリオは多くないのかなという印象です。
今後とも気長に見守っていきましょう。