何と大晦日に App Service on Linux がアップデートされたことが Twitter で流れていました。海の向こうでは正月休みとかいう概念は無いみたいですね。
Nazim 氏とはメールで何回もやり取りしましたが、めっちゃいい人でした。
#Azure #AppService on #Linux updated with overlapped recycling and xdebug for PHP https://t.co/Ts7GFsjw6B
— Nazim Lala (@nazimlala) December 30, 2016
xdebug 対応はまあいいとして、メインは overlapped recycling です。これまでイメージをアップデートすると、既存のコンテナを削除してから新しく起動していたようで、アップデート中は 500 を返していました。
適当に PHP で HOSTNAME を返すだけのコードを書いて、リクエストを投げて ID が切り替わるのを確認してみました。40x / 50x の時は例外になるので確認できます。
ポータルからイメージを変えても、500 などを返すことなく ID が変わりました。環境変数 HOSTNAME で返ってくるのは、多分 Docker Container の ID です。
調べた範囲だと 1 サイトでの構成はこんな感じです。推測ですけど。
Antares Server は Apache で動いている ILB っぽいです。おそらく App Service チームの自作。そして App と Kudu の IP アドレスは不定なので、使わないようにしましょう。
172.17.0.1 の素性は curl から叩いてみると簡単にわかります。
単純な LB だけではなく、もっといろいろな機能が実装されている感じがします。
ちなみに App Service on Linux で使われている Mono で動作する Kudu やビルトインイメージの Dockerfile などが GitHub で公開されています。
今は /home のマウントがカスタムイメージの時だけ狂うバグがあるので、ここの Dockerfile をそのまま使っても動かすことはできないです。バグとしては認識されているので多分直ります。
バグが直ればカスタムランタイムをもっと柔軟に作れるようになるので待ってます。