IaaS

【小ネタ】Azure が予算オーバーしたら Logic Apps で Logic Apps を止める

セキュリティチームのぐっちーです。Azureのサービスは重量課金なので、使い過ぎると予算オーバーしてしまう可能性があります。 もっとも、Logic Appsは消費プランの場合、最初の4000アクションが無料だったりするので、それ自体が高額になるケースは少ないですが、Logic Appsを使ってGPT-4などを動かすと、それなりのコストになるので枕を高くして寝ることはできません。

今回は、Azure の予算オーバーしたら Logic Apps で Logic Apps を止める方法を紹介します。といっても、サクッと作ったフローなので、もっと良さげな実装方法があれば是非みなさまコメントいただけたら嬉しいです。

前提条件
  • 本ブログは2024年6月17日時点の情報を元に執筆しています。
  • 本ブログの内容は「消費(consumption)」プランのLogic Appsを対象にしています。

構成の説明

以下の構成で実現します。

  1. Logic Appsを止めるフローをLogic Appsで作成する
  2. Azureの予算と、オーバーしたらLogic AppsにHTTPリクエストを送る設定をする

Step1. Logic Appsを止めるフローをLogic Appsで作成

Logic Appsを止めるフローをLogic Appsで作成します。 認証にはマネージドIDを使うと楽そうだったので、マネージドIDを採用しました。なお、既に停止対象のLogic Appsは作られている前提です。

1-1. Logic Appsを止めるフローをLogic Appsを作成する。このLogic Appsは「停止をさせるLogic Apps」と呼びます。

1-2. 作成したLogic AppsでマネージドIDを有効にする。

1-3. 「停止したいLogic Apps」の画面に遷移し、アクセス制御にて[ロジック アプリのオペレーター]の権限を、1-2で作成したマネージドIDに付与する。

1-4. 再び「停止をさせるLogic Apps」の画面に遷移し、トリガーは、HTTPリクエストを受け取るように[When a HTTP request is received]にする。その際、HTTP URLは後ほど利用するので控えておく。

1-5. アクションは、HTTPリクエストを指定し、Logic Appsを無効にする設定を入れる。

  • URI: https://management.azure.com/subscriptions/{サブスクリプションID}/resourceGroups/{リソースグループ名}/providers/Microsoft.Logic/workflows/{停止したいフローの名前}/disable?api-version=2016-06-01
  • Method: POST
  • Header: Content-Type :application/json
  • 認証の種類: マネージドID
  • マネージドID: システム割り当てマネージドID
  • Audience: https://management.azure.com/

Step2. Azureの予算がオーバーしたらLogic AppsにHTTPリクエストを送る設定

Azureの予算がオーバーしたらLogic AppsにHTTPリクエストを送る設定をします。

2-1. Azureポータルから予算を作成する

2-2. 通知の設定でアクショングループを作成します。

URIは先ほど1-4で取得したトリガーのURIを入れておく。

2-3. 予算の作成に戻り、予算100%となったらアクショングループで先ほど作ったアクションが実行されるように警告条件を入れておく。

動作確認

元々有効になっているフロー
フローが実行されたら無効となっている。

おまけ

ただし、Logic Appsを止めると、業務に影響が出る可能性があります。ただ止めるだけではなくて、通知のフローも忘れずに構成しておくと良いと思います。

終わりに

以上の手順で、Azureの予算オーバーしたらLogic AppsでLogic Appsを止めることができます。 これにより、予算オーバーを防ぐことができます。 サクッと作ったフローなので、もっと良さげな実装方法があれば是非みなさまコメントいただけたら嬉しいです。

ぐっち

コンサル会社にてISO27017やISMAP等のセキュリティ規格案件を経験した後、クラティブに入社。セキュリティチーム所属ですが、最近は生成AI等を使ったシステムの開発や導入をやっています。趣味はダンス(Soul, Lock, Waack)です。