しばやん雑記

ASP.NET Core とメイドさんが大好きなフリーランスのプログラマーのブログ

Ignite 2019 で発表された Azure App Service のアップデート

Surface Pro X を買うためにハワイに行ってたのでキャッチアップが遅れましたが、個人的な興味を持っている App Service 周りに関して Ignite 2019 での発表を軽くまとめました。

App Service Team のブログに関連するセッションリストが載っているので楽です。まあ少ないです。

数は少ないですが、結構良い感じの機能が追加されているので GA が楽しみという感じです。

Azure Monitor Integration (Preview)

これまで Local File storage / Blob / Table に書き出し設定が行えていたログ回りを、Azure Monitor の標準的な仕組みが使えるようになりました。

Blob に書き出す以外にもストリーム処理に適している Event Hub にも書き出せます。

Best practices and tips for operating and monitoring apps on Azure App Service

設定すると Blob の場合はコンテナが設定した項目別に作られて、その中は結構深いパスになっていますが日付時間別で細かく区切られて保存されます。中身は JSON なので扱いやすいです。

f:id:shiba-yan:20191110030022p:plain

IIS ログや Azure Functions のログも簡単に転送できるので、Event Hub と組み合わせて Anomaly Detection に利用するとかも出来るのではないかと。

App Service はかなり初期のサービスなので、こういった今となっては標準的な仕組みに乗っかるのが遅れ気味ですが、Key Vault 連携など徐々に対応が進んできています。

Health Check (Preview)

昔から ARM にプロパティがあることは知っていましたが、上のセッションでひっそりと紹介されていました。Kudu の Wiki にもページがあったみたいですが、アナウンスが無いと気が付かないやつです。

これまでも App Service は動いているインスタンスに問題があったときには、自動で他の正常なインスタンスへフェイルオーバーしてくれましたが、この Health Check を設定すればアプリの問題をトリガーに LB からの切り離しと復旧を行ってくれるようになります。

現在は 2 分間隔のチェックで 5 回連続失敗した場合に切り離しが行われるらしいですが、もうちょっとカスタマイズ出来るようになってほしい感があります。

ヘルスチェックが通らない場合は 1 時間に最大で 1 インスタンス、1 日に最大 3 インスタンスまでが入れ替えされます。GA までにはこの辺りの挙動は変わると思われます。

Health Check の結果は Metrics から確認できます。値が微妙に分かりにくいですが % になっています。

f:id:shiba-yan:20191110030640p:plain

上のグラフでは 100% 成功しているということになります。Split でインスタンス別に見れるのも良いですね。

Regional VNET Integration (Preview)

割と長い間プレビューが続いている新しい VNET Integration ですが、12 月の GA 予定が発表されました。そして Linux での対応は来年頭になるらしいです。

Web app network security made easy

同じサブネットに複数の App Service Plan を追加できないのは割と罠っぽいですが、将来的には改善されそうな気配ですね。Azure DNS Private Zone 対応もまだみたいです。

この新しい VNET Integration を使うことで Service Endpoint や Express Route と組み合わせることができるようになるので、これまでは ASE が必須だった構成を普通の App Service で組むこと可能です。

GA 後には VNET と Service Endpoint を組み合わせた App Service の構成が定番になると思っています。

Private Link (多分 Private Preview)

上のセッションでは VNET Integration と同時に App Service での Private Link についてもデモが行われました。今のところは Private Preview のようです。

Service Endpoint で良いのではと思いますが、プライベート IP でアクセスできるのは大きいですね。

Azure Portal では項目が出てこないですが、ARM Explorer などを使うと怪しい設定があります。

f:id:shiba-yan:20191110192117p:plain

適当にいじれば使えるのかもしれないですが、当然ながら自己責任で試す形になります。

App Service Managed Certificate (Preview)

無料で証明書が発行できる Managed Certificate がプレビュー公開されました。Zone Apex に対応していないので微妙に使い勝手が悪いです。

既に証明書は発行しているので、6 か月後にちゃんと更新されるのかを見守っています。

Azure Functions Premium Plan (GA)

Premium Plan が GA して、ほとんどのリージョンで使えるようになっています。Japan East / West の両方で使えるので、これまで Consumption や Premium V2 を使っていた場合は、Premium Plan に変えることでパフォーマンス改善が図れます。

スケーリングは Function App 単位なので、複数の Function App を 1 つの Premium Plan に乗せると Cold start を避けつつも柔軟なスケーリングを行えるので便利になっています。

全体としてのコストを圧縮できるケースもありそうです。

Azure Functions v3 (Preview)

既にリリースはされていましたが、.NET Core 3.0 ベースになった Azure Functions v3 が発表されました。GitHub や Jeff のブログを読めば簡単に試すことができます。

これで .NET Standard 2.1 になった Entity Framework Core 3.0 が使えると思ったのですが、Metadata Generator 周りでエラーになってしまったので試せていません。

一応 Issue は上がっているので直るとは思いますが、地味に根が深そうな感じがしています。

Durable Functions v2 (GA)

Durable Entities / Durable HTTP が新規追加された Durable Functions v2 がリリースされました。v1 からの移行はインターフェース名や名前空間の変更があるので多少作業量は多いです。

実際に v1 から v2 に移行した際の Pull Request を参考までに紹介しておきます。

Durable Entities と Durable HTTP については既に試しているので一緒に紹介します。Durable HTTP は非同期 HTTP API を利用する際には結構便利だったので、使っていきたいです。

Ignite での発表全体から見ると App Service はあまりアップデートが無かったですが、重要な機能が多かったので既存のアプリケーションで使っていきたいと思います。

とりあえずは VNET Integration が 12 月に GA する前に色々な構成を試しておく予定です。Health Check の詳細な挙動も ASP.NET Core の Health Check API と組み合わせて検証してみたいところです。