御成門プログラマーの技術日記

Microsoft AzureやAngularなどの技術情報を発信します。

2025年の Microsoft Azure 価格改定の動向をまとめる【現在動きなし】

近年毎年4月に行われている Microsoft Azure の価格改定(値上げ)ですが、2025年の情報をまとめようと思います。

2024年12月現在価格改定についてのお知らせなし→2025年の改定予定はない?

2023年、2024年と価格改定がありましたが、代替の時系列は下記のような動きでした。

  • 前年12月ごろ、Micosoft のブログにて2024年4月にMicrosoft クラウド サービスの日本円における価格改定が行われる旨が発表される
  • 価格改定の一か月ほど前に対象者に対してメールで価格改定のアナウンスが届く

2024年12月現在、Microsoft Azure の価格改定のお知らせは出ておらず、2025年の価格改定は行われるのか不明な状況となっております。

価格改定タイミングは年に2回!?

現時点では2025年のAzureの価格改定は未定ですが、Microsoftは過去に価格改定のタイミングについて下記のようなアナウンスを行っております。

Microsoft は、米ドルに対する通貨の変動を考慮しながら、年に 2 回の定期的な頻度の一部として、現地通貨での価格を引き続き評価します。これにより、世界中のお客様の透明性と予測可能性が向上し、業界で最も一般的な価格設定モデルに移行します。

Consistent global pricing for the Microsoft Cloud - Stories より引用。

年に2度定期的な価格改定のタイミングがあるそうなのでまだ油断はできませんね....

値上げがいつ来ても大丈夫なようにコスト最適化を行っておこう

値上げの波に関しては、どうしようもない部分もあり我々にできるのは値上げに備えて常日頃からサービスコスト最適化を行っておくことしかないと思います。
本ブログでAzure のコスト最適化に関連する記事を過去に公開してありますのでご参照ください。
onarimon.jp

過去のAzure価格改定に関する記事

onarimon.jp

onarimon.jp

Microsoft Cost Management アップデート「Azure Open AI コストビュー」と「Copilotを使ったAOAIのコストシミュレーション」を紹介【2024年11月のアップデート】

2024年11月27日にMicrosoft Azure ブログで公開された「Microsoft Cost Management updates—November 2024(訳: Microsoft Cost Management 更新情報 - 2024年11月)」にて紹介された新機能「Azure Open AI コストビュー」と「Copilotを使ったAOAIのコストシミュレーション」を紹介します。
AI や Copilot が技術の中心として注目されている中、「Azure Cost 最適化」という分野においても Azure Open AI Service 関連のトレンドの波を感じますね。

Microsoft Cost Management updates—November 2024 について

今回の元ネタはMicrosoft 公式のMicrosoft Azure Blog から。
azure.microsoft.com

Microsoft Cost Management の最新情報はここを見るに限る。
ということで1つずつ紹介していきます。

Azure Open AI Service の Azure Open AI ビュー

原文を日本語自動翻訳して引用。

Azure OpenAI のコストをさらに簡単に分析できるように、新しい組み込みビューである Azure OpenAI の提供開始をお知らせします。この新しいビューでは、さまざまな期間 (実績と償却の両方) ですべてのモデルを実行したコストを表示できます。このビューには、購入サブスクリプションが選択したスコープ内にある場合の予約購入のコストも含まれます。

Microsoft Cost Management updates—November 2024 | Microsoft Azure Blog より引用。

Azure Portal から確認できる Microsoft Cost Management のビューで Azure Open AI 専用のビューができたようです。
「Cost Management」→「Reporting + analytics」の「Cost analytics」→「All views(すべてのビュー)」→ 「Azure OpenAI」から確認できます。

「Smart views(スマートビュー)」の「Azure OpenAI」 のボタンを押すとビューが確認できます。

自分がやらかしたOpenAIコストやらかしについて調べたとき

リソースやモデルごとの使用料金が一目でわかる

指定した期間内における Azure OpenAI Service の価格の合計、平均、価格のグラフ、リソースごとやモデルそれぞれの課金詳細を確認できます。予約購入したコストなどもこのビューで確認できるらしいので Azure Open AI Service の使用量確認にはもってこいですね。

Azure OpenAI Service の Copilot コストシミュレーション

次はAzure OpenAI のトークンベースのコスト見積もりを紹介します。以前も紹介しましたが、Microsoft Copilot for Azure の機能で自然言語を利用したコスト関連の分析、集計などが行えるようになりました。

onarimon.jp

例えば、Azure ブログ中では「I want to know the costs of using Azure OpenAI for the last six months.(過去6ヶ月間のAzure OpenAIの利用コストを知りたいです。)」というプロンプトの機能は既に追加されているとのことでした。それに加えて下記のような質問ができるようになったとのことです。

今回、Copilot の機能を拡張し、Azure OpenAI トークンベースのデプロイのコスト見積もりにも対応できるようになりました。

Microsoft Cost Management updates—November 2024 | Microsoft Azure Blog より引用。

今回、Azure OpenAI のトークンベースデプロイコストの見積もりができるようになったとのことです。
例えば以下のような質問です。 「How much would the cost change if GPT-35-Turbo usage increased by 15%(GPT-35-Turboの使用が15%増加した場合、コストはどれくらい変わりますか?)」 というプロンプトでは現状のトークン数を取得→15%の使用量増加したとしたら→トークンの使用量想定の算出→元のコストとシミュレーションコストの比較まで行ってくれるようになったとのこと。

これはほんの始まりに過ぎず、より多くのシミュレーション シナリオをサポートするための機能強化を継続して行い、Azure の支出を見積もり、計画しやすくします。

この機能追加に関しては始まりに過ぎず、今後より多くの価格見積もりシミュレーションの強化が継続的に行われるということでさらなる便利さに期待です。というわけで実際に動かしてみました。

過去6か月のAzure OpenAI Service のコストについて聞いてみた

残念ながらそれ以外のプロンプトはうまく動かなかった。

感想「今後のさらなる機能追加に期待」

今回の機能追加ですが、地味と言ったら地味ですがこういうアップデートは段々便利になってくると思います。Azure Open AI Service の事例も増えてきて、実際に利用するユーザーも爆増している今、コスト最適化と言う目線がさらに注目される状況だと思いますので楽しみですね。

Azure 仮想マシンのコスト節約に期待の機能「休止状態(ハイバネーション)」がGAされたので試してみた。

Azure VMの新機能「休止状態(ハイバネーション)」について試してみました。

Azure 仮想マシンの「休止状態(ハイバネーション)」がGA。どんな機能なのか?

2024年の5月28日に一般提供開始(GA)としてアナウンスされた機能が「VM Hibernation for General Purpose VMs(汎用 VM の VM 休止状態)」です。
General Availability: VM Hibernation for General Purpose VMs | Azure updates | Microsoft Azure

説明として上記のアナウンスの説明を引用します。

汎用 VM の VM 休止状態が、すべてのパブリック リージョンで一般公開されました。休止状態は、Linux と Windows の両方のオペレーティング システムでサポートされています。この機能を使用すると、VM を休止状態にしてコンピューティング コストを節約できます。VM を休止状態にすると、Azure は VM のメモリ内状態を OS ディスクに保持し、VM の割り当てを解除します。その結果、VM が休止状態になったときに料金を支払う必要はなく、VM に関連付けられているストレージとネットワーク リソースに対してのみ料金を支払います。後で VM を起動すると、以前に実行されていたアプリケーションとプロセスが以前の状態から再開され、中断したところからすばやく再開できます。この機能は、既存および新規の VM で使用できます。

キーワードとしては下記のとおりですね。

  • VMを休止状態にしてコンピューティングコスト節約
    • 休止状態ではVMコストは発生しない(ストレージとネットワークリソースのみ発生)
  • 休止時のメモリ状態を保存するため、再開時に以前実行していたアプリやプロセスが休止前の状態で再開可能
  • すべてのパブリックリージョンで一般公開
  • Linux とWindows 両OSでサポート

元々あったAzure VMの停止機能(割り当て解除)も割り当て解除中はコンピューティングコストの費用は発生しませんでしたが、メモリの保持の部分が大きく違いますね。

それでは実際にAzure 仮想マシンの休止状態を試してみようと思います。

Azure 仮想マシンの休止状態を設定してみた

休止状態に対応している構成、OS、サイズを選択すると、
「休止状態を有効にする」のチェックボックスが選択できるようになります(初期状態はOFF)。

Azure Portal に書かれている休止状態の説明。

休止状態にすると、仮想マシンの割り当てを解除し、RAMの内容をルートボリュームに保存することで、時間とコストを節約できます。VMの再起動時には中断したところから再開できます。有効にすると、この機能をサポートする拡張機能が自動的にインストールされます。


この説明を見てもわかるとおり、今までの「停止(割り当て解除)」とは違う点としてRAM内容の保存による再起動時に中断したところから再開できる点があります。それによってコストだけでなく、時間を節約できるようになった点が特筆すべき点ですね。

VM作成後、概要メニューに「休止状態」ボタンが使えるので、そちらから休止状態にすることができます。

休止状態になると状態が「休止状態になりました (割り当て解除済み)」になります。この状態ではコストはかからないということになりますね。

実際9日に作成して休止状態で10日間ほど放置してみましたが、VMの費用は動かしていたときのみしか発生していないですね。
もちろんVM以外のストレージや仮想ネットワークなどの費用はかかりますのでご注意ください。

休止の特徴であるメモリ内容の保存ですが、簡単にVM上でブラウザを開いた状態で一度休止状態にして再開すると、再開時も同じページを開いた状態であることが確認できました。

「停止(割当解除)」と「休止状態」の違いについて

大きな違いはやはり「休止状態」にはメモリの内容保存がある点ですね。
一応「休止状態」にはデメリットとして休止状態中はVMサイズの変更やディスクのデタッチなどはできないのでご注意ください。
詳しい制限事項は公式ページで紹介されています。
learn.microsoft.com

最後に

操作自体も簡単ですし、今までAzure VMにあった「割り当て解除」よりも、コストメリット、時間メリットも期待できる「休止状態(ハイバネーション)」を是非試してみてください。休止状態に関しては自動化やスケジューリングできるかなども気になるので引き続き調べてみようと思います。

仮想マシンに安全に接続する Azure Bastion を無料で使える Developer SKU を試してみた

Azure Bastion を無料で使用できる Developer SKUが一般提供されたので試してみました。

2024年5月13日にAzure Bastion を無料で使用できる Developer SKU がGA

2024年5月13日に Azure Bastion を無料で使用できる Developer SKU がGAしました。
azure.microsoft.com

Azure 更新情報の説明を引用しますと下記のような内容でした。

新しい Bastion Developer SKU は、Azure の VM に追加料金なしで接続するための便利で安全なソリューションを提供します。Bastion Developer を使用すると、ユーザーは VM のパブリック IP を公開することなく、一度に 1 つの VM に安全なワンクリック接続を確立できます。他の Bastion SKU のように専用リソースを顧客の VNET に展開するのではなく、Bastion Developer は Microsoft が内部で管理するリソースの共有プールを利用して安全な VM 接続を実現します。ユーザーはポータルの VM ブレードの接続エクスペリエンスを通じて VM に直接アクセスできます。ポータルでは RDP/SSH がサポートされ、CLI セッションでは SSH のみがサポートされます。Bastion Developer は、追加の機能、構成、またはスケーリングを必要とせずに安全な VM 接続を求める開発/テスト ユーザーに最適です。

まとめるとAzure Bastion Developer SKU は Azure Bastion の一部機能に制限があり、スケーリングできない開発やテスト向けのまさに開発者SKUのようですね。本番利用は推奨されてないですね。

そもそも Azure Bastion って何?

Azure Bastion ってそもそも何って話をしておきます。
ご存知の方は飛ばして大丈夫です。
というわけで公式ページから説明引用。

Azure Bastion は、プライベート IP アドレスを介して仮想マシンに安全に接続するためにプロビジョニングするフル マネージド PaaS サービスです。 Azure portal から TLS 経由で直接、またはローカル コンピューターに既にインストールされているネイティブ SSH または RDP クライアントを介して、仮想マシンへの安全でシームレスな RDP/SSH 接続を提供します。 Azure Bastion 経由で接続する場合、仮想マシンにパブリック IP アドレス、エージェント、クライアント ソフトウェアはいずれも不要です。

Bastion は、プロビジョニングされる仮想ネットワーク内のすべての VM に対して安全な RDP および SSH 接続を提供します。 Azure Bastion を使用すると、RDP または SSH を使用した安全なアクセスを提供しながら、お使いの仮想マシンが RDP または SSH ポートを外部に公開しないように保護されます。

General availability: Azure Bastion Developer SKU | Azure updates | Microsoft Azureより引用

つまり、Azure Bastion を使うことでプライベートIPアドレス経由でRDPやSSHのポートを公開せずにセキュアにリモート接続できるようになるセキュリティ面でとても偉大な機能ですね。

Azure Bastion を Developer SKU で構築してみる

親切にAzure Bastion を Developer SKU を構築するページが用意されているのでそちらをご参照すれば問題なく、構成できるかと思います。
クイックスタート: Developer SKU を使用して Bastion をデプロイする: Azure portal | Microsoft Learn

2024年6月7日現在、Azure Bastion Developer SKU は下記リージョンのみで利用可能です。現在のところ東日本/西日本リージョンは対応していません。

  • 米国中部 EUAP
  • 米国東部 2 EUAP
  • 米国中西部
  • 米国中北部
  • 米国西部
  • 北ヨーロッパ

まずはAzure VM を作っておきましょう。
次に Azure Bastion のリソースを作成します。日本語だと直訳で「要塞」検索がしにくいので困りますね...

Azure Bastion の作成画面でリージョンが対応している地域を選択しているならば、レベルで「Developer」が選択可能です。

詳細設定で本来のSKUであれば設定できたコピー/貼り付けを使用禁止にすること、IPベースの接続、Kerberos認証、ネイティブクライアントサポート、共有可能なリンク、セッションの記録がDeveloper SKUでは使えません。

というわけでデプロイ成功。
RDPのポートを閉じていたとしても下記のような感じにリモート接続が可能です。


簡単ですね。
ちなみにDeveloper SKU から 別のSKUにレベルアップも可能なようです。

Azure Bastion Developer SKUとその他有償SKUとの違いについて

というわけで Azure Bastion Developer SKU の作成してみましたが、作成中も出てきたとおり、無料版のDeveloper SKU では使用できない機能がありました。詳しい機能差は公式ページに一覧で書かれているのでそちらご参照いただければと思います。
Azure Bastion について | Microsoft Learn

やはり、Developer SKUではセキュリティ面やスケーリング面で本番運用は難しいことがわかりますね。あくまで開発/テスト用であり、本番の場合はBasic SKU以上をご検討ください。

Azure Key Vault でアクセスポリシーをつかったアクセス構成が廃止されているのでアクセス制御(IAM)を使った制御を考える

Azure Key Vault のアクセスポリシー機能がAzure Portal から新規作成したリソースで使えなくなっていたので、新しいアクセス設定方法(代替手段)のロールベースのアクセス制御を利用した方法を改めて紹介します。

新規作成した Azure Key Vault のアクセスポリシー機能が利用できなくなりました

ある日、新しく Azure Key Vault を作っていました。アクセスポリシーのメニューからページに遷移すると、「アクセスポリシーを利用できません」の文字が。

前々から言われていましたが、ついにAzure Key Vaut のアクセスポリシー機能がなくなり、RBACによるアクセス制御に移行したようですね。
ちなみに既存で作成され、アクセスポリシーを使用しているリソースについては、現在のところまだアクセスポリシーの設定が可能なようです。

Azure のロールベースアクセス制御(RBAC)を使用してKey Vault のアクセス制御を行う

ロールベースのアクセス制御を用いた Azure Key Vault のアクセス制御方法については公式ページで紹介されているのでそちらを参照いただければと思います。
Azure RBAC を使用して Azure キー コンテナーへのアクセス許可をアプリケーションに付与する | Microsoft Learn

Key Vault 操作用のAzure組み込みロールも上記ページで紹介されていますが、こちらでも紹介します。日本語でポータルを使用しているとロール名も日本語になっているので紐づけやすいように日本語ロール名も併記しておきます。

ロール名(英語) Portal上の日本語での表記 説明
Key Vault Administrator キー コンテナー管理者 証明書、キー、シークレットの操作が可能。ロールの付与は不可
Key Vault Reader キー コンテナー閲覧者 証明書、キー、シークレットのメタデータの閲覧が可能。機密値は読み取り不可
Key Vault Certificates Officer キー コンテナー証明書責任者 アクセス管理以外の証明書の操作が可能
Key Vault Certificate User Key Vault Certificate User(なぜかポータルで英語のまま) 証明書の内容を読み込み可能
Key Vault Crypto Officer キー コンテナー暗号化責任者 アクセス管理以外のキーの操作が可能
Key Vault Crypto Service Encryption User キー コンテナー暗号化サービスの暗号化 キーのメタデータの閲覧、折り返しと折り返し解除が可能
Key Vault Crypto User キー コンテナー暗号化ユーザー キーを使用した暗号化操作が可能
Key Vault Crypto Service Release User Key Vault Crypto Service Release User(英語のまま) キーのリリースが可能です。
Key Vault Secrets Officer キー コンテナー シークレット責任者 アクセス許可以外のシークレットの操作が可能
Key Vault Secrets User キー コンテナー シークレット ユーザー シークレットの閲覧が可能
Key Vault Data Access Administrator Key Vault データ アクセス管理者 上記のKey Vault ロールの割り当てが可能

おおまかに言うとユーザー(User)が閲覧者で、責任者(Officer)が登録、変更、削除などの操作が可能な権限ですね。

ロールの付与の方法ですが、通常のAzure Portal のアクセス制御(IAM)からロールをユーザーやグループ、サービスプリンシパル単位に設定するだけで可能です。 Key Vault の特性上、マネージドIDへの付与を行い、他のAzureリソースからの許可も行うことが多いと思いますが、アクセス制御(IAM)から割り当てが可能です。

いつもどおりのロール付与の画面のため説明はいらないかなと思います

ロールを付与すると、アクセスポリシーのとき同様、付与されたアクセス権限の内容を行使できるようになると思います。以上がAzure Key vault のアクセスポリシーを使ったアクセス制御の方法でした。

Azure Functions Flex Consumption Planの料金体系とコストについてまとめました

前回に引き続きMicrosoft Build 2024 でパブリックプレビューとなった「Azure Functions Flex Consumption」についての紹介記事です。今回はFlex Consumption の課金体系やコストの仕組みについて解説します。

Flex Consumption と従来の従量課金プランの性能を比較した前回記事はこちら↓
onarimon.jp

Azure Functions Flex Consumption Plan 課金体系概要

Azure Functions Flex Consumption Plan には2つの「課金モード」があり、インスタンスごとに設定されます。モードは従量課金のインスタンス「オンデマンド(On Demand)」と常時使用可能として割り当てたインスタンスの課金体系「常時使用可能(Always ready)」があります。

2つのモードはそれぞれ下記のような課金要素で構成されています。

  • 「オンデマンド」モード:「実行時間(GB-秒)」「実行(数)」による2つの要素による課金。オンデマンドモードには一部環境に無料提供が含まれます。
  • 「常時使用可能」モード:待機時間中にかかる「ベースラインアイドル時間」「実行時間(GB-秒)」「実行(数)」

Azure Functions Flex Consumption プランの請求方法については公式から具体例込みで紹介されていますね。最新情報や詳細はこちらをご確認ください。
Azure Functions での従量課金ベースのコストの見積もり | Microsoft Learn

Azure Functions Flex Consumption Plan の価格について

Azure Functions Flex Consumption Planの料金に関してはAzure Functions の価格のページをご参照ください。Flex Consumption 対応済みのRegionのみ確認可能です。
価格 - Functions | Microsoft Azure

オンデマンドの料金は従来の従量課金プランと単価は変わらないみたいですね(無料提供額は従量課金の方が多い)。

ちなみに2024年5月30日現在の東アジアリージョンの価格表は下記のように公開されていました。

従量制課金 無料提供 (月額) 従量課金制
オンデマンドの実行時間 100,000 GB 秒 ¥0.003775/GB 秒
オンデマンドの合計実行回数 250,000 の実行 100 万実行回数あたり ¥47.184
常時使用可能ベースライン ¥0.0009437/GB 秒
常時使用可能の実行時間 ¥0.0023592/GB 秒
常時使用可能な総実行回数 100 万実行回数あたり ¥47.184000

無料分は考えないとすると下記のような計算式になりますね。

料金 計算方法
【オンデマンド】実行時間価格(1インスタンスあたり) {オンデマンドの実行時間単価(/GB秒)} × {インスタンスのメモリ量} × {実行時間(秒)}
【オンデマンド】実行回数の価格 ({要求回数}/100万) × {オンデマンドの合計実行回数単価}
【常時使用可能】ベースラインの価格 {常時使用可能ベースラインの価格単価(/GB秒)} × {インスタンスのメモリ量} × {待機時間(秒)}
【常時使用可能】実行時間価格(1インスタンスあたり) {常時使用可能の実行時間単価(/GB秒)} × {インスタンスのメモリ量} × {実行時間(秒)}
【常時使用可能】実行回数の価格 ({要求回数}/100万) × {常時使用可能の合計実行回数単価}

この5つの料金を足したものがFlex Consumption Planの料金となります。

Azure Functions Flex Consumption Plan を Azure Load Tesing で負荷テストしたときの料金例

前回の記事で Flex Consumption のFunctionsと 従来の従量課金のFunctions に対してAzure Load Testing の負荷テストを行い、性能比較を行いました。

onarimon.jp

特に何も考えず、回数課金の従量課金リソースに大量のリクエストを送っていましたが、果たしてどれほどの課金が発生したのか?そしてFlex Consumption と 従来の従量課金の価格差はどのくらいなのか?

ちなみにAzure Load Testing で実行した回数、実行時間ですが、下記のような負荷をかけてます。

リソースの種類 実行回数 失敗回数 負荷テストの総実行時間(推定)
Azure Flex Consumtionリソース 809,248回 0回 97,487秒
従来の従量課金プランリソース 451,854回 180,673回 112,927秒

従来の従量課金プランの方は負荷をかけすぎて失敗しているのとそもそもスループットが違うので同じ内容でテストをしても同じ回数実行されていないです。

まず結果として過去30日間の料金がこちらです。
Flex Consumptionがオンデマンドの総実行時間で62.15円、オンデマンドの総実行回数で36.33円で合計98.49円でした。

Azure Flex Consumption リソースのコスト結果

この値段を高いとみるか、低いと見るかは予算や導入メリットなどで状況毎に違うと思うので各自ご判断お願いします。

従来の従量課金は総実行時間で18.96円、総実行回数で18.76円で合計37.92円でした。

従来の従量課金のコスト結果

結果、単価が同じはずの両者で違いが生まれている状況です。
この差異はスループットの違いや実行失敗による実行回数や実行時間の違いにより生まれた差異だと推測しています。引き続き、検証を行い理由がわかったらこちらの記事に追記しようと思います。

ついでにAzure Load Testing の価格。

Flex Consumptionより、従量課金よりAzure Load Testing が高い...という結果に!!

Flex Consumption でメトリックから使用量を確認したり、コスト見積もりを行う

Azure Functions のメトリックについては下記のページで紹介されています。
learn.microsoft.com

この中で説明されている下記のメトリックがFlex Consumption Plan で課金に関係するメトリックです。

  • OnDemandFunctionExecutionCount ←オンデマンドインスタンスの実行回数
  • OnDemandFunctionExecutionUnits ← オンデマンドインスタンスの実行時間(MB-ミリ秒)
  • AlwaysReadyFunctionExecutionUnits ← 常時使用可能インスタンスとして割り当てられている待機時間(MB-ミリ秒)
  • AlwaysReadyFunctionExecutionCount ← 常時使用可能インスタンスの実行回数
  • AlwaysReadyUnits ← 常時使用可能インスタンスの実行時間(MB-ミリ秒)

※実行時間系はメトリックの値に対して、割り当てた固定インスタンスメモリサイズを乗算することで実行単位が計算される。

今回のケースで Flex 従量課金プランのメトリックから使用量を分析してみようと思います。
Azure Portal のメトリックの画面でメトリック「OnDemandFunctionExecutionCount」を検索します。

OnDemandFunctionExecutionCount の値は809.25k = 809,250 で負荷テストで実行した回数と誤差はありません。


OnDemandFunctionExecutionUnits の値は17.69B です。「B」はおそらく「ビリオン(billion)」ですね。

ここから取得した値を用いて、見積もりのためにコストを分析することが可能です。

最後に

Flex Consumption の料金体系についてある程度把握することができました。
今回メトリックで取得した使用量から計算したコストと実際のコストが完全に一致していないので気持ち悪い結果になったしまったのが心残りであります。
課題としてどこかの機会で解明していきたいと思います。

参考ページ

learn.microsoft.com

azure.microsoft.com

learn.microsoft.com

Azure Functions Flex Consumption と従来の Azure Functions 従量課金の性能差を比べてみた。

Build 2024でPublic Preview となった Azure Functions Flex Consumption(Azure Functions Flex 従量課金)ですが、従来の Azure Functions Consumption Plan (Azure Functions 従量課金プラン)との比較をしてみようと思います。

Azure Flex Consumption とは

パブリックプレビューと同時にドキュメントも公開されていますね。
説明は引用します。

Flex 従量課金は Linux ベースの Azure Functions ホスティング プランで、従量課金の "使用した分だけ支払う" サーバーレス課金モデルに基づいています。 プライベート ネットワーク、インスタンス メモリ サイズの選択、"サーバーレス" モデルに基づく高速または大規模スケールアウト機能を導入することで、柔軟性とカスタマイズ性が向上します。

Azure Functions の Flex 従量課金プラン ホスティング | Microsoft Learnより引用。

公式ドキュメントにも書かれていますが、Flex Consumption は下記の点がメリットとされています。

  • インスタンスのスケールアウトが高速
  • 従量課金プレンで仮想ネットワーク統合によるプライベート接続が可能
  • 常時使用可能インスタンスを設定可能

今までAzure Functionsをプライベート接続で使いたい環境では従量課金プランが使えず、0インスタンススケールが不可の「Functions Premium」か「Azure Functions on App Service Plan」 を使う必要があったため、使いたいたいときだけ使い、使った分だけ課金の真の従量課金と言えなかったのですが今回のAzure Flex Consumptionによりそれが可能となりました。

今回はそんなAzure Functions Flex Consumptionが今までのAzure Functions Consumptions と比較して性能がどれだけ違うのか?負荷テストを実施するAzureサービス「Azure Load Testing」を利用して比較してみようと思います。

Flex Consumption vs Consumption

リソース作成

というわけでリソース作成。
Azure Portal の Function App の作成画面です。 選択肢が増えてますね。

ここで「Flex Consumption」と「Consumption」をそれぞれ作成します。ここで後で引っ掛かった点として作成したFlex Consumption のリソースに Visual Studio から直接発行しようとするとなぜか失敗する現象が発生、VS Code から作成しなおしたらはうまく発行できました。
Flex Consumption を作成するときにインスタンスのサイズが選択できるので今回は小さい方の2048MBで作成しました。

Functions に Azure Load Testing を仕込む

というわけでリソースができたら Azure Load Testing を作成していきます。Azure Load Testing については以前、軽く紹介しているのでそちらをご参照ください。
onarimon.jp

あらかじめAzure Load Testing のリソースは作った状態で今回は Azure Functions のブレードにあるメニューから作ってみました。App Service や Azure Funtions のメニューにいつの間にかあった「Performance → Azure Load Testing」のボタンからテストの作成が可能。

そこから作ると自動でFunctions内の関数の情報や使用するキーなども初期状態に入っているので楽ちん。

今回条件はどちらのFunctionsとも同じに設定した。

これで戦いの舞台は整いました。

Azure Load Testing のテスト開始

まず今回の検証結果ですが、タイミングや環境によって結果が異なる場合もございます。ご了承ください。

ほぼ同時にAzure Load Testing のテストを実施し、結果を見てみると一目瞭然です!!

上:Flex Consumption、下:Consumptionの統計情報

読み込み数、応答時間、スループットすべてにおいてFlex Consumption が勝っています。
そして普通のConsumptionはエラーが多発している!?

Flex Consumptionのテスト結果

↑こちらがFlex Consumption のテスト結果。応答時間がギザギザしているのはスケールアウトがうまく働いているのだろうか?

従来のFunctions 従量課金のテスト結果

↑こちらが従来の従量課金プランのテスト結果。やはりエラーが気になる。
エラーの内容はSystem.InvalidOperationExceptionがほとんどで、負荷を減らしたら落ちなくなったので負荷のかかりすぎて落ちてるんじゃないかと睨んでます。

(低負荷版) 上↑:Flex Consumption、下:Consumptionの統計情報

低負荷でも性能差が明らかです。

この結果の差からも Flex Consumption の性能優位が明らかになりましたね。
今後もAzure Functions Flex Consumption の動向を追っていこうと思います。次はFlex Consumption と Consumption のコスト比較をしてみようかなと思っています。

(追記)Flex Consumption Plan の料金形態について調べてみた記事を書きました。
onarimon.jp

参考ページ

qiita.com

learn.microsoft.com

Microsoft Copilot for Azure コスト分析プロンプト例一覧

Azure 環境内で使用できるMicrosoft Copilot in Azure にてコスト分析が可能なプロンプト例の一覧を紹介していこうと思います。

Microsoft Copilot for Azure とは

公式ページの説明文を引用します。

Microsoft Copilot for Azure (プレビュー) は、Azure が提供する数百のサービスと数千種類のリソースをナビゲートするのに役立ちます。 何百ものサービスにわたって知識とデータを統合して、生産性を向上させ、コストを削減し、深い洞察を提供します。 Microsoft Copilot for Azure (プレビュー) は、質問に答えることで Azure について学習するのに役立ちます。また、独自の Azure リソースと環境に合わせて調整された情報を提供できます。 自然言語で目標を表現できるため、Microsoft Copilot for Azure (プレビュー) を使用すると、Azure 管理エクスペリエンスを簡素化できます。

Microsoft Copilot in Azure の概要 | Microsoft Learn より引用

つまり、自身のAzureの環境のサービスやリソースの情報を使って、Copilotに対話型で質問したり、分析依頼してもらったり、クエリやタスクを実行してもらうことができる機能ですね。今回はコスト分析に特化したお話をしようと思います。

Azure 環境内のコスト分析の機能もあり、例えばこんな感じで直近6か月のコスト使用状況を対話的に質問してまとめてもらうことができます。

コスト分析においては、おそらくAzure を使う全てのユーザーが気になるお話であり、日々の運用においてのコスト分析や報告、コスト最適化の対応などで役に立つ機能だと思います。
今回はそんな Microsoft Copilot for Azure のコスト分析の機能から便利なプロンプトの一覧をまとめておこうと思います。

Microsoft Copilot for Azure のコスト分析サンプルプロンプト一覧

Microsoft 公式ドキュメント内で紹介されているサンプルプロンプト

こちらがMicrosoft の公式ドキュメント内で紹介されているコスト関連のサンプルプロンプトです。日本語ですと、精度が低いというお話もあるため、英語のプロンプトも一緒に並べておきます。

日本語プロンプト 英語プロンプト
過去 6 か月間のコストを集計してください。 Summarize my costs for the last 6 months.
7 月 8 日にコストが急増した理由は何ですか? Why did my cost spike on July 8th?
今後 6 か月間の予想経費の見積もりを作成できますか? Can you provide an estimate of our expected expenses for the next 6 months?
過去 6 か月間の支出が最も多いリソース グループを表示してください。 Show me the resource group with the highest spending in the last 6 months.
コストを削減するにはどうすればよいですか? How can we reduce our costs?
節約プランの対象となるのはどのリソースですか? Which resources are covered by savings plans?

Azureコストの集計、コスト増の原因探し、コスト削減案の提案、コストの未来予測まで可能なようですね。Azureの使用状況やコストの状況などのデータは揃っているので後はプロンプトのアイデアだけです。

便利だったプロンプト一覧

「2024年3月と比較して2024年4月にコストが上昇しているリソースグループはどれですか?」

月額のコストの先月比での上昇率が大きいリソースグループの一覧を出してくれるプロンプトです。
リソースグループごとに製品やサービスを切っていることも多いのでこの単位でのランキングだしてくれるのは便利ですね。

現時点ではうまく動かなかったプロンプト

「リソースグループに付いている「部門集計」タグでコストを集計してください。」

リソースに紐づくタグでグループ化してコストを集計するのはうまく動かなかった。タグが日本語なのも影響があるのだろうか...

「log analytics のコストが増えているようです。増えているログのリソースを抽出して増えている要因を分析して、削減案を考えてください。」

上手く動作せず。コスト、請求、使用状況データへのアクセス権がないとの返信。
Microsoft Copilot for Azure へのアクセス権限を付与する方法があるのだろうか?要調査です。
そもそもAzureのリソース一覧を出す動きがないように見える?→ 現状は質問するとクエリを返してくれるだけなのでリソースの一覧を出す機能がないのかもしれない。

感想

現状はMicrosoft Cost Management の画面でわかる内容も多いが、使い方によっては自由度も高いと思います。正直な話運用に耐えられるようなプロンプトはまだ動かないように思えます。私のようにAzureのコストの使用状況を毎回報告しているような運用をされている方にとっては日々のコスト管理の作業を低減してくれる可能性も秘めているので今後も追っていきたいですね。

参考ページ

learn.microsoft.com

Visual Studio から Azure App Service へ公開した際にUnauthorizedエラーが出る件について

Visual Studio の発行機能を利用してアプリケーションを公開しようとした際に下記のようなエラーに出くわしました。今回は当該のエラーの解決方法と経緯を紹介します。

Visual Studio から Azure App Service へ公開した際のエラーについて

Visual Studio で公開したら下記のようなエラーウィンドウが出てきました。

公開でエラーが発生しました。 ビルドに失敗しました。詳細については、出力ウィンドウを確認してください。

診断ログは次の場所に書き込まれました: "C:\Users\username\AppData\Local\Temp\tmpD2D3.tmp"

tmpファイルの中身は下記のようなエラーがでていました。

2024/04/09 17:35:15
System.AggregateException: 1 つ以上のエラーが発生しました。 ---> Microsoft.WebTools.Shared.Exceptions.WebToolsException: ビルドに失敗しました。詳細については、出力ウィンドウを確認してください。
   --- 内部例外スタック トレースの終わり ---
---> (内部例外 #0) Microsoft.WebTools.Shared.Exceptions.WebToolsException: ビルドに失敗しました。詳細については、出力ウィンドウを確認してください。<---

Microsoft.WebTools.Shared.Exceptions.WebToolsException: ビルドに失敗しました。詳細については、出力ウィンドウを確認してください。

===================

詳細については出力ウィンドウを確認するようにとのことなので確認。

'https://<自分のサイトのURL>.scm.azurewebsites.net/api/zipdeploy' 経由で ZIP ファイルを公開しようとしましたが、HTTP 状態コード 'Unauthorized' で失敗しました。

認証エラーだと?ということでデプロイユーザーの Azure App Service や Azure App Service Plan のロールを確認しましたが、共同作成者ロールは付与されており、所有者ロールを付与してもエラーは変わりませんでした。

エラーの解決方法

というわけでUnauthorizedが出たということで下記のような内容を確認しましたが解決せず。

  • Visual Studio にログインしているユーザーが当該リソースにアクセス可能か?
  • Visual Studio にログインしているユーザーがデプロイするのに必要な権限を持っているか?

というわけで困りました。そういえばデプロイするのに必要な発行プロファイルってどうなってたかな?とみてみます。
Azure App Service の Web Apps (Webアプリ) の「概要」から「発行プロファイルのダウンロード」がエラーになりました。

下記のようなエラーメッセージです。

Basic authentication is disabled.

これでふとデプロイが制限されてる?と気づきました。
Azure App Service Web アプリの「構成」→ 「SCM 基本認証の発行資格情報(SCM Basic Auth Publishing Credentials)」という項目が新しく追加されていました。「FTP 基本認証の発行資格情報」の設定は前からありましたが、気づきませんでした。

結論、新しく作成されたApp Service はこの「SCM 基本認証の発行資格情報」の設定がOFFになっているというのが原因でした。

ONにしてあげて「発行」し直したら無事発行することができました。

Azure App Service の新しい自動スケーリング(トラフィックベースの自動スケール)を試してみた

Azure App Service といえば WebApps を簡単にホストできるPaaSサービスです。特徴としてインスタンスの自動スケールがありますが、今回 Azure App Service の自動スケール方法に新しい方法(トラフィックベースの自動スケール)がGAされたので紹介します。

2024年3月25日リリースのApp Service の新自動スケーリングについて

2024年3月25日にMS公式のAzure更新通知から下記のようなアナウンスがありました。

Azure App Service is pleased to announce general availability of the "Automatic Scaling" feature. We received important feedback about the Automatic Scaling feature during the preview phase and have made following enhancements to the Automatic Scaling feature.
(省略)
The App Service platform will automatically scale out the number of running instances of your application to keep up with the flow of incoming HTTP requests, and automatically scale in your application by reducing the number of running instances when incoming request traffic slows down.

以下、日本語訳。
Azure App Service では、"自動スケーリング" 機能の一般提供が開始されました。プレビュー段階で自動スケーリング機能に関する重要なフィードバックを受け取り、自動スケーリング機能に次の機能強化を行いました。
(省略)
App Service プラットフォームは、受信 HTTP 要求のフローに対応するためにアプリケーションの実行中のインスタンスの数を自動的にスケールアウトし、受信要求トラフィックの速度が低下すると実行中のインスタンスの数を減らすことでアプリケーションを自動的にスケールインします。

General Availability: Automatic Scaling for App Service Web Apps | Azure の更新情報 | Microsoft Azure より引用。

新しいAzure App Service に新しい自動スケールの方法が追加されたようですね。今回はそんな新しい自動スケールを紹介していこうと思います。

Azure App Service のスケーリング方法比較

Azure App Serviceには前からある「マニュアル(手動のスケーリング)」、「スケジュールとメトリックを用いたルールベースの自動スケーリング」と新機能の「トラフィック量に基づいた自動スケーリング(新機能)」があります。それではスケーリング方法を比較していきましょう。

マニュアル(手動のスケーリング)

こちらは自動スケールは設定せず、手動でインスタンス数を変更します。

スケジュールとメトリックを用いたルールベースの自動スケーリング

こちらはApp Service 旧来のオートスケールであるルールベースのオートスケール設定です。
自動スケーリングの画面は見慣れた画面ではないでしょうか?
CPU使用率などのメトリックの値やスケジュールによるスケールアウト/スケールインのルールを作成しておくことでルールに則った自動スケーリングが行われます。

トラフィック量に基づいた自動スケーリング(新機能)

2つ目のルールベースの自動スケーリングの名前が似ていてややこしいので新しい方は「トラフィック量ベース自動スケーリング」と呼びます。
特徴はトラフィック量に応じて、自動的に判断してWebアプリごとにスケールアウト/インが可能な点です。また今まではApp Service Plan ごとインスタンスう数がスケールアウトしていましたが、今回の新オートマチックスケールにより負荷が高いWebアプリのみのインスタンス数のスケールアウトが可能になりました。
そしてこちらが今回新しく追加した自動スケーリングの設定画面です。

「トラフィック量ベース自動スケーリング」に設定すると、下記のような設定項目が現れます。ここの設定項目により自動スケールの設定が可能です。

項目名 単位 説明
Maximum burst(最大バースト) プランで共通 Number of instances this plan can scale out under load. Value should be greater than or equal to current instances for this plan. (このプランが負荷下でスケールアウトできるインスタンスの数。このプランの現在のインスタンス数以上である必要があります。)
Always ready instances(常に準備されたインスタンス) Web Apps ごと Number of instances that are always ready and warm for this web app.(このWebアプリケーションの常に準備され、ウォームな状態にあるインスタンスの数。)
Enforce scale out limit(スケールアウト制限の強制) Web Apps ごと Limit the number of instances this web app can scale out to.(このWebアプリケーションがスケールアウトできるインスタンスの数を制限します。)
Maximum scale limit(最大スケール制限) Web Apps ごと The maximum number of instances this web app can scale out to.(このWebアプリケーションがスケールアウトできる最大のインスタンス数。)

少し設定値がわかりづらかったのでまとめてみました。

  • 「最大バースト」がApp Service Plan 内での最大インスタンス数。
  • 「常に準備されたインスタンス」がWebアプリごとの最小インスタンス数。
  • 「スケールアウト制限の強制」によってこのWebアプリがスケールアウトできる最大インスタンス数を設定するかどうか選択。
  • 「最大スケール」は「スケールアウト制限の強制」がONの場合のみ指定可能なこのWebアプリがスケールアウトできる最大インスタンス数を設定できます。

つまりWebアプリごとにスケールアウト/インできるようになったトラフィック量ベースの自動スケール設定ができるようになったようですね。

新しいトラフィック量ベースのオートスケールを試してみた

それでは実際に試してみます。
1つのApp Service Plan 上にWeb Apps1とWeb Apps2 を乗せて作ります。
Web Apps1の設定。

Web Apps2の設定。

何も負荷をかけていないこの状態でまずはWebApps1とWebApps2の現在のインスタンス数を確認してみようと思います。
新しいオートスケールによるインスタンス数はWebApps機能一覧の「監視-メトリック」のメトリック「Automatic Scaling Instance Count」から確認できます。↓の画像のように最初のインスタンス数は1のままでした。

この状態でWebApps1にのみ負荷をかけてみましょう。負荷はロードテストが簡単にできるAzure Load Testing でHTTPリクエストを投げてみました。

Azure Load Testing はこちらの記事で紹介してますのでこちらもご参照ください。
onarimon.jp

WebApps1に負荷をかけてみたところ、トラフィックによる負荷を検知して自動的にスケールアウトしていることがわかります。また、ドキュメントにも書かれていましたが、負荷テストが終了するとスケールインに向けてレビューが行われるようで5分ほどして自動的にスケールインされていました。

WebApps2のほうですが、こちらには負荷をかけていないため、こちらのアプリはインスタンス数は1のままキープされていますね。

これが今回のトラフィック量ベースの自動スケールの動きです。

新しいトラフィック量ベースの自動スケールの仕組み

新しい自動スケールは正常性チェックメカニズムに加えて、エンドポイントに向けての正常性プローブを投げることによりスケールの判定をしているようですね。

定期的に投げられている「GET /admin/host/ping」、「GET /」の通信がそれにあたるようです。

新しいトラフィック量ベースの自動スケールの制限事項について

とても便利な新しいトラフィック量ベースの自動スケールですが、下記のような制限事項があるのでご注意ください。

  • 価格レベルはPremium V2 (P1V2、P2V2、P3V2) と Premium V3 (P0V3、P1V3、P2V3、P3V3、P1MV3、P2MV3、P3MV3、P4MV3、P5MV3) のみ。
  • 最小インスタンス数は1~
  • Azure Functions は未対応。Azure Functions が載ったApp Service Plan は新しいトラフィック量ベースの自動スケールは選択不可

App Service Planの価格レベル(SKU)はプレミアムプランのV2,V3でないと利用できないのでご注意ください。Azure Functions が使えないのも注意。

トラフィック量ベースの自動スケールの課金形態について

課金形態はApp Serivce Plan のSKUベースの料金で自動スケーリングされたインスタンス数分が秒単位で課金されるみたいです。

課金に対しては今まで以上に必要なときにのみの課金とできるのでコスト最適化にもつながる気がします。

利用シーン

今回の新しい自動スケールですが、利用シーンを考えてみました。

  • Web Apps ごとのトラフィックに応じたスケーリングが可能
  • 開発環境などのWeb Apps はそのWebApps のMAXサイズを制限する
  • ルールを分析して設定する必要はなく、すべてが自動で行われるスケーリング

メトリックを分析して、閾値を考えての手間が意外と時間がかかって大変なのと、そこまで悩んだメトリックのスケーリングルールが本当にうまく動かない例もたくさんあると思うので今回のオートマチックな自動スケーリングによって、管理工数の削減が期待できますね。

参考情報

learn.microsoft.com

techcommunity.microsoft.com