しばやん雑記

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

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

App Service は Build や Ignite に合わせてアップデートを発表することは少なく、むしろずれて発表することの方が多い傾向にあるのですが、今回はアップデートのまとめブログが公開されていました。

先日も Availability Zones 対応が発表されましたが、イベントとは全く関係ないタイミングだったので Ignite で少し触れるかなと思いましたが、そんなことはなかったです。

とはいえ Ignite 前に発表されたものも多いので、今回のメインは ASEv3 での Windows Containers サポートと Service Connector だったのかなと思っています。

例によって自分が気になったアップデートのみ深堀したので、メモを兼ねて残しておきます。

Azure Portal 上での UX 改善

最近は Authentication や Networking の設定画面が大きく改善されて使いやすくなりましたが、その流れはまだ続いているようで TLS/SSL settings が今回プレビューで新しくなっています。

まだ途中のようで、証明書をドメインにバインドする機能は新しい方には実装されていないので、現行の画面を使う必要があります。今は完全に証明書管理機能だけが提供されています。

いつ追加されたかは分からないですが、ついに Azure Portal の App Service Authentication 設定から OpenID Connect Provider を追加できるようになりました。これまでは ARM API を使う必要がありました。

地味に設定項目は多いので、検証時には Azure Portal からサクッと追加できた方が便利です。

新しい言語バージョンのサポート

最新の言語バージョンに対応する際に一般的になってきた Early Access ですが、以下の言語バージョンのサポートが行われるようです。

.NET 6 は来週の .NET Conf で GA するので、間もなく GA バージョンが利用可能になるはずです。

  • .NET 6 RC 2
  • Node.js 16 LTS
  • Python 3.10
  • Java 17

Node.js 16 LTS が利用可能になったと書いていましたが、Azure Portal からは選択できませんでした。ARM レベルでは linuxFxVersionNODE|16-lts を指定すれば 16.6.1 が利用可能になりましたが、v16 が LTS になったのは 16.13.0 からのはずなので、まだテスト中の気配があります。

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

.NET 6 のように Early Access 中にバージョンが上がるのは良くあることなので、Node.js 16 LTS も Early Access が終わる前には正しい LTS バージョンに更新されると思います。

そろそろ Java に関しては Microsoft がビルドしたバージョンが提供されてもおかしくないと思っています。

VNET Integration / Managed Identity で ACR にアクセス

以前から Web App for Container では Private Endpoint を経由した Azure Container Registry のアクセスは出来ていたようですが、Managed Identity との組み合わせがサポートされたようです。

App Service Team ブログの該当記事も大幅に変更が加えられています。

毎回 ACR を作成する度に Admin user を有効にするのが面倒ですし、セキュリティ的にもあれなので Managed Identity と RBAC で解決できるのなら有効化しておきたい部分です。

Service Connector の追加

個人的には地味に便利だと思ったのが Service Connector です。現在は限定されたリージョンでのみ利用可能ですが、Azure Portal や Azure CLI を使って App Service や Azure Spring Cloud に必要なサービスの接続情報を管理できます。

様々なサービスと連携可能な Azure Functions では、App Settings に様々な接続文字列を登録する必要がありますが、その登録は非常に面倒な作業です。特に最近では Identity-based connections のサポートで、Managed Identity と RBAC の設定も必要になっていて複雑さを増しています。

Service Connector はその当たりの設定を自動化しつつ、必要なサービスを管理できるようになるので、特に Azure Portal を使ってリソースを作成する際に便利に使えます。

実際に Managed Identity を使って Azure Storage への Connection を作成してみました。ターゲットリソースと接続名を指定すれば大体 OK です。

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

Client Type は今のところ .NET だけのようですが、接続情報が App Settings に設定されるだけなので言語やフレームワークに依存する部分ではありません。

次は認証の種類を選択します。Azure Storage のような Managed Identity に対応しているサービスでは、デフォルトで System Assigned Managed Identity が推奨されるようになっています。

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

Managed Identity を選ぶ時は予め App Service 側で有効にしておかないとエラーになりました。

新しい Connection を作成すると、ターゲットリソースの RBAC に自動的に App Service が追加されます。最低限必要なロールが設定されるようなので、必要に応じて変更すればよいと思います。

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

機能としてはシンプルなんですが、初めて Azure Functions を利用する際の障壁となりがちなのが接続情報の設定周りなので、Service Connector でその当たりを簡単に出来ると捗りそうです。

Service Connector の仕組みが知りたい方はドキュメントが用意されているので、目を通してくと良いです。そんなに大したことをやっているわけではないのですが、リソースと紐づけて App Settings が管理可能になったというのは重要ですね。

個人的には Azure Functions の Binding / Trigger で直接 Connection 名を設定できるようになってほしいと思いました。Twitter で呟いたら PM からメールが来たので、その旨をフィードバックしておきました。