ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

Azure FunctionsのFlex ConsumptionがPublic Previewになった

以前から話は聞いていたAzure FunctionsのFlex ConsumptionがPreviewになった。

techcommunity.microsoft.com

使い勝手や価格面は従量課金、機能面はElastic Premium、という感じ。

ドキュメント眺めたり、ポータルからポチポチ触ってみたのでその感想。

learn.microsoft.com

learn.microsoft.com

デプロイできるリージョン

まだ日本には来てない。
アジアエリアはEast Asiaを使おう。

$ az functionapp list-flexconsumption-locations --output table
Name
---------------------
eastus
northeurope
southeastasia
eastasia
eastus2
southcentralus
australiaeast
northcentralus(stage)
westus2
uksouth
eastus2euap
westus3
swedencentral

ネットワーク機能

VNET統合ができるようになった。
Flex ConsumptionなFunction Appの関数コードからVNET内のリソースにアクセスできるし、VNET内のリソースをトリガーに関数実行もできる。

これは今まで、専用App Service PlanかElastic Premiumでしかできなかったので、割とインパクトがある。

なお、統合先のサブネットには Microsoft.App/environments への移譲が設定されるので下回りのアーキテクチャーが透けて見える。

あと「private networking」という言葉でまとめられているのか、はっきり書いていないけど、Private Endpointも使えるようになっている。

なので、OutboundもInboundもVNETに制限することができるようになった。

ストレージアカウントとの連携

コードのデプロイ先になるストレージアカウントとの連携設定が変わった。

learn.microsoft.com

今まで環境変数に書かれた接続文字列を直接参照していたが、ARM Template内のfunctionAppConfigというところを参照して、そこに書かれた環境変数を見る、という形になっている。

ここにデプロイパッケージを保存するBlobコンテナーのURLとその認証方法が書かれている。
今まで同様、接続文字列でストレージアカウントを指定する場合は authentication の中の、

  • typeStorageAccountConnectionString
  • storageAccountConnectionStringNameに接続文字列を設定した環境変数(アプリ設定)名

を入れる。

他にも設定周りで、ランタイムの情報がこのfunctionAppConfigに移った。

learn.microsoft.com

あとdaprConfigという気になる設定も見える。
これもContainer Apps由来だろうか。 けど、特に言及がないので、今後に期待。

ストレージへIDで接続してみる(動作保証外)

ちなみにこのauthentication/typeは今のところstorageAccountConnectionStringだけがサポート対象らしい。

Currently, only storageAccountConnectionString is supported.

ただ Azure CLIとしてはStorageAccountConnectionStringの他に、SystemAssignedIdentityUserAssignedIdentityが設定できるので、やらない手はない。
learn.microsoft.com

まずFlex ConsumptionなFunction AppでSystem Assigned Managed Identityをオンにする。
その後、--deployment-storage-auth-type SystemAssignedIdentity指定でAzure CLIのコマンドを実行してみると、そのManaged Identityに対して自動的にStorage Blob Data Contributorロールを付与してくれる。

あとAzureWebJobsStorageはデプロイパッケージのストレージ設定とは別なので、これについてはこのドキュメントに書いてある設定をしておく。 learn.microsoft.com これは前からある設定方法。

ストレージアカウント側でアカウントキーアクセスを無効にして、Function Appの環境変数から接続文字列を一掃した状態でfuncコマンドからデプロイしてみると、問題なくデプロイができた。
デプロイした関数も問題なく動いた。

ただし繰り返すけど、「今のところstorageAccountConnectionStringだけがサポート対象」なので、あくまでお試し、ということで。

スケール機能

これもウリの一つだろうけど、どう比較したらいいかわからんから試してない。

けど速いらしい。

(追記)実行時間

実行時間はデフォルトで30秒、最大はUnlimitedと、Elastic Premium/専用App Serviceプランと同等。
learn.microsoft.com

(追記)実行環境

というか、OSやコンテナー周りのサポート。
OSはLinux限定。コンテナーのサポートもなし。

この辺りが on Container Appsとの違いになるかも。

(追記) その他プランごとの比較表

おそらくサポートしてないもの

サポート終了が明記されてないので想像だけども。

SSH/Kudu Console

まずKuduを開くメニューがない。
従来のLinux ConsumptionプランもKuduのWebコンソールにアクセスできなかったけど、VNET統合のところで書いたように、基盤がApp ServiceからContainer Appsに変わっているっぽいので、Kuduの役割は大分削減されデプロイ系のAPIのみに絞ったのでは、と想像。

Log Stream

Kuduの役割が変わったので、ログストリーミングのAPI /api/logstreamもなくなった、とこれも想像。
ログ周りはApplication Insightsを使え、ということかな。

この辺りがパッと見で気づいたポータルから見えないものたち。

App Service 認証/EasyAuth

まだEasyAuthが動かない。

設定はできるが、認証せずにHTTPトリガーの関数が実行できてしまう。

中の人曰く、そう遠くないうちにできるらしい。

その他の注意事項はコチラ

learn.microsoft.com

デプロイメントスロットが使えなかったり、まだGitHub Actions/Azure PipelinesからのCDに対応してない、というのが書いてある。

(追記)上記のEasyAuthが未サポートであることも書いてあった。

所感

従量課金でできることがだいぶ増えて、ほぼこのプランだけでいいのでは、と思った。
GAに期待。

これらの変更は、下回りのバリエーションを App Service基盤だけでなくContainer Apps (based on AKS)を加えたことで出来たのかな、と想像。
一方で、元サポートの人としては、下回りのバリエーションがトラブルシューティングの切り分けや製品知識、サポートチーム間の連携に影響しそうな気もする。

大変でしょうが頑張ってください。

その他のアップデート

Build 2024で他にもいろいろ発表があってここにまとまっている。

techcommunity.microsoft.com

techcommunity.microsoft.com

news.microsoft.com