以前から話は聞いていたAzure FunctionsのFlex ConsumptionがPreviewになった。
使い勝手や価格面は従量課金、機能面はElastic Premium、という感じ。
ドキュメント眺めたり、ポータルからポチポチ触ってみたのでその感想。
デプロイできるリージョン
まだ日本には来てない。
アジアエリアは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に制限することができるようになった。
ストレージアカウントとの連携
コードのデプロイ先になるストレージアカウントとの連携設定が変わった。
今まで環境変数に書かれた接続文字列を直接参照していたが、ARM Template内のfunctionAppConfig
というところを参照して、そこに書かれた環境変数を見る、という形になっている。
ここにデプロイパッケージを保存するBlobコンテナーのURLとその認証方法が書かれている。
今まで同様、接続文字列でストレージアカウントを指定する場合は authentication
の中の、
type
にStorageAccountConnectionString
storageAccountConnectionStringName
に接続文字列を設定した環境変数(アプリ設定)名
を入れる。
他にも設定周りで、ランタイムの情報がこのfunctionAppConfig
に移った。
あとdaprConfig
という気になる設定も見える。
これもContainer Apps由来だろうか。
けど、特に言及がないので、今後に期待。
ストレージへIDで接続してみる(動作保証外)
ちなみにこのauthentication/type
は今のところstorageAccountConnectionString
だけがサポート対象らしい。
Currently, only storageAccountConnectionString is supported.
ただ Azure CLIとしてはStorageAccountConnectionString
の他に、SystemAssignedIdentity
とUserAssignedIdentity
が設定できるので、やらない手はない。
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トリガーの関数が実行できてしまう。
中の人曰く、そう遠くないうちにできるらしい。
今のところはサポートされてませんが、そのうちすぐ来ると思います。
— 牛尾剛『世界一流エンジニアの思考法』(文藝春秋)🎸Tsuyoshi Ushio (@sandayuu) 2024年5月21日
その他の注意事項はコチラ
デプロイメントスロットが使えなかったり、まだGitHub Actions/Azure PipelinesからのCDに対応してない、というのが書いてある。
(追記)上記のEasyAuthが未サポートであることも書いてあった。
所感
従量課金でできることがだいぶ増えて、ほぼこのプランだけでいいのでは、と思った。
GAに期待。
これらの変更は、下回りのバリエーションを App Service基盤だけでなくContainer Apps (based on AKS)を加えたことで出来たのかな、と想像。
一方で、元サポートの人としては、下回りのバリエーションがトラブルシューティングの切り分けや製品知識、サポートチーム間の連携に影響しそうな気もする。
大変でしょうが頑張ってください。
その他のアップデート
Build 2024で他にもいろいろ発表があってここにまとまっている。