しばやん雑記

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

Hack Azure! #5 - Geek of Azure Serverless フォローアップ

Ignite 2021 では特にアップデートがなく、なかなか話す機会が無かった Azure App Service や Azure Functions といった代表的な Azure Serverless なサービスについて、Hack Azure! #5 で話をしました。

これまでは大体ゲストを呼んで話していましたが、App Service / Azure Functions に関しては呼ぶ必要がないのでは?と思ったので、自分たちで話しています。

スライドを作っている最中はめっちゃ面白い内容と思っていたのですが、実際に喋ってみると地味でマニアックな内容が多かったので少し反省しています。

個人的には一度完全なフリーディスカッションで 1~2 時間話してみたいと思っているので、いつか機会があればやってみたいところです。

自分は色々な話をしたがるタイプでコロコロ話題が変わるので、出たとこ勝負も面白いかなと思っています。

使用したスライド

今回のスライドはリンクが動かないと厳しいので Azure Storage に HTML でアップロードしています。

リンクがない部分はちゃんとしたドキュメントが無い割に、実際には利用できる系のアップデートです。

Twitter まとめと YouTube アーカイブ

セッション中にハッシュタグ付きでツイートされたものと、ライブ配信のアーカイブは既に公開済みです。

ライブ配信の方は今回も大平さんが頑張ってくれたので、いい感じにツイートも一緒に見られるようになっています。セッションの内容と同期して見られるのが良いですね。

最後の方は Azure Serverless の回ということで App Service / Azure Functions 関係なく CDN や Cosmos DB の話もねじ込んでいます。若干無理やり感あったかなとは思っています。

App Service / Azure Functions 最新情報の入手

App Service / Azure Functions に関しては最近は大規模イベントでの発表がほぼ無い印象ですが、アップデート自体はガンガン行われています。公式情報を得る場合は以下の 3 つを押さえておくと良い感じです。

特に Azure Functions に関してですが、最近は定期的に YouTube で配信されている Azure Functions Live での発表がメインになっています。新機能と予定されているアップデートの両方が発表されることが多いです。

それぞれを追うのが面倒な時は、最低限ブチザッキを見るようにしておけば公式情報は追えます。

ブチザッキは公式からの発表以外は載せないらしいので、ひっそりとドキュメントが更新されていた系は載らないです。ドキュメント系の更新も書いて欲しい。

Key Vault Reference のアップデート

Secret Version 無しで指定すると、いい感じに最新バージョンをチェックして更新するようになってくれましたが、個人的にはアクセス制限された Key Vault への対応のが欲しかったものになります。

今回の配信では Private Endpoint からしかアクセスできない Key Vault を用意して、Regional VNET Integration などを有効化した Azure Functions Premium Plan から Key Vault Reference 経由でのアクセスを試していました。Private Endpoint の利用方法は以下のエントリを参照してください。

Azure Portal や Kudu から該当の App Settings / Connection Strings を見ると、ちゃんと Key Vault から値を解決できていることが確認できます。

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

ドキュメントが更新されていないので詳細は分かっていませんが、仕組みから考えると Premium Plan のイベントベースでの高速スケールを利用する場合は Runtime Scale Monitoring の有効化が必要な気がしています。

Azure Functions の .NET 5 サポートと今後

配信中にも話したように .NET 7 からは Azure Functions の .NET 実行環境は In-Process から Isolated Process に変更になります。変更は多くなるとは思いますが、その頃には .NET Isolated Worker も成熟していると思うので安心して使えるようになっているはずです。

今のところパフォーマンスは 2 倍ぐらい In-Process の方が良いですが、まだ Worker 側の最適化は行われていないらしいので差は今後縮まっていくでしょう。

Isolated Process への変更理由としては以前書いたように、ランタイムが使っているアセンブリとアプリケーションが使っているアセンブリでバージョンが異なることで競合が発生することが多いので、完全に分けることで根本的な対応を行いたいようです。

ランタイムから独立したプロセスとして実行されるので、バージョン問題は発生しなくなるはずです。

Visual Studio からデバッグが簡単に出来ないのはかなり辛いので、この辺りの対応が終われば移行方法などを含めた確認をしていきたいと思っています。

HttpTrigger での Open API 定義生成

自分の記憶では Visual Studio 16.9 ぐらいから追加されたと思っているのですが、HttpTrigger の追加時に Open API サポートを有効に出来るようになっています。

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

実体としては以下の拡張機能がインストールされるだけではありますが、Azure Functions の HttpTrigger 実装から Open API 定義を実装したいことは多かったので期待しています。

元々は Cloud Advocate の人が個人で作っていたものを公式化したもののようです。CLI を使ってビルド時に生成出来そうな雰囲気もあるので楽しみです。

バックエンド Storage Account の閉域化

Azure Functions は Regional VNET Integration への対応で、ほぼ全ての通信を VNET や Private Endpoint 経由に出来るようになりましたが、最後まで出来なかったのが AzureWebJobsStorage の閉域化でした。

Web Worker が該当 Storage Account が持っている Files を SMB でマウントする仕組みなので、ここを VNET 経由にするのはかなり難しいとは思っていましたが、去年 West Europe で Early Preview が開始されました。

それが最近になって West Europe 以外でも使えるようになったみたいです。ドキュメントも独立したページにリライトされているので、GA が近いか既にしているのかなと思っています。

この機能に関してはアップデートが発表されそうなので待つ予定です。

Azure Storage SDK のアップデート関連

Azure Storage SDK は何回かアセンブリ名や名前空間を含めた変更が行われていますが、今では v12 と呼ばれている SDK のみがサポートされている状態です。この辺りは以前書いたので参照してください。

要約すると Azure Functions と Azure Storage SDK の関係は以下の通りになります。

  • めっちゃ古い ← 一部でまだ残っている
    • WindowsAzure.Storage
  • 古い ← 現状
    • Microsoft.Azure.Storage.*
    • Microsoft.Azure.Cosmos.Table
  • 新しい ← 移行作業が進行中
    • Azure.Storage.*
    • Azure.Data.Tables

ランタイム側と Storage 拡張の両方で作業が進んでいますが、重要なのは Storage 拡張側の方になります。

多くの場合は気にする必要はないと思いますが、Binding で CloudBlockBlob などを直接使うようにしていると、拡張のアップデートを行ったタイミングで影響を受けます。まだ拡張自体がプレビューなので大丈夫ですが、正式リリース後には注意が必要になります。

Static Web Apps について

Static Web Apps に関しては三宅さんのブログを読んでおけば全て理解できる感じです。今回のメインは Static Web Apps CLI なので、後編が公開されるのを読みながら待ちましょう。

CLI は以下のリポジトリで非常にアクティブに開発されていて、Issue / PR もいい感じに処理されているようなので、気になる点があればフィードバックすると良いと思います。

App Service Authentication 周りもローカルで再現できるのはかなり便利そうなので、正直なところ App Service / Azure Functions 向けにも同じような機能が欲しいです。