Azure予算超過アラートをLogic AppsでSlackに通知しよう #azure #logicapps #slack
はじめに
クラウドサービスは気軽に使える反面、お手軽すぎてついついコストがかさんでしまうことがあり、日々のコスト追跡は重要です。本稿では Microsoft Azure の利用コストが設定した予算を超過する可能性の警告を、ノーコード・ローコード開発サービスである Azure Logic Apps (ロジックアプリ)を使用して Slack チャットに通知する方法をみてみます。
を参考にさせていただきました。本稿の内容は内容は2024年6月現在の仕様であるため、現在のAzureの仕様や、参考文献とは異なる部分があることにご注意ください。また、すべてステップバイステップで記載すると膨大な分量になってしまうため、概説となることもご了承ください。詳しい手順や不明点、本稿と実際の手順との差異などはMicrosoft Azure公式ドキュメントを確認してください。
また、以前の記事「Azure利用コストをLogic AppsでSlackに通知しよう」も合わせてご覧ください。
ロジックアプリの作成
マーケットプレイスから「ロジック アプリ」を作成しましょう。多くの入力項目が表示されますが、まず「プラン」を「消費」にすると必要最低限の入力項目のみに表示が切り替わるので、これで作成します。
ロジックアプリデザイナー
Azure Logic Apps でロジックを組んでいきましょう。大まかな設計としては、
- Azure コスト管理 から、予算を超過する可能性のアラートを受け取る
- アラートを整形し、Slack へポスト
という2ステップになります。
Azure コスト管理からアラートを受け取る
まず先に、予算アラートの受取口から作成していきます。
ロジックアプリの実行トリガーは「When a HTTP request is received」となります。つまり、Azure コスト管理からのアラートをHTTPで受け取り、処理を実行するという形になります。
「HTTP URL」は空欄のままにしておいてください。ロジックアプリの保存時に、自動的に書き込まれます。「Method」もデフォルトの「Default」で構いません。
「Request Body JSON Schema」には、アラートから取り出す値を指定するための JSON を貼り付けます。サンプルペイロード を参考に、必要となる値は次のようになります。
BudgetName
: 予算名SubscriptionName
: サブスクリプション名SubscriptionId
: サブスクリプションIDResourceGroup
: リソースグループEvaluatedAmount
: 現在のコストForecastedTotalForPeriod
: 予測コストNotificationThresholdAmount
: しきい値BudgetThreshold
: 予算
これを元にすると JSON スキーマは次のようになります。これを「Request Body JSON Schema」に貼り付けます。
{ "type": "object", "properties": { "schemaId": { "type": "string" }, "data": { "type": "object", "properties": { "BudgetName": { "type": "string" }, "SubscriptionName": { "type": "string" }, "SubscriptionId": { "type": "string" }, "ResourceGroup": { "type": "string" }, "EvaluatedAmount": { "type": "string" }, "ForecastedTotalForPeriod": { "type": "string" }, "NotificationThresholdAmount": { "type": "string" } "BudgetThreshold": { "type": "string" }, } } } }
このステップについては Azure Logic Apps のワークフローに対する受信 HTTP 呼び出しを受け取り、応答する もご覧ください。
アラートを整形し、Slack へポスト
引き続き「Slack」の「メッセージの投稿 (V2)」を接続します。Slackとの連携操作が求められた場合は表示の手順に従ってください。
「チャネル名」には通知を投稿するチャネル名を入力してください。
メッセージテキストにはSlackに通知するメッセージを入力します。フォーム内で稲妻ボタンをクリックすると、前の手順のデータ、すなわち受け取ったアラートの値を変数として埋め込むことができます。
UI上では特殊な表示となっていますが、テキストでは次のようになります。
Azureのコスト `@{triggerBody()?['data']?['BudgetName']}` でコストがしきい値を越えることが予測されます サブスクリプション: `@{triggerBody()?['data']?['SubscriptionName']}` (`@{triggerBody()?['data']?['SubscriptionId']}`) リソースグループ: `@{triggerBody()?['data']?['ResourceGroup']}` 現在のコスト: @{triggerBody()?['data']?['EvaluatedAmount']} 予測コスト: @{triggerBody()?['data']?['ForecastedTotalForPeriod']} 閾値: @{triggerBody()?['data']?['NotificationThresholdAmount']} 予算: @{triggerBody()?['data']?['BudgetThreshold']}
このステップについては Slack - Connectors もご覧ください。
予算の設定
ここまでは予算アラートの受取口を作成しました。ここからは予算アラートの送出口を作成していきましょう。
今回は特定のリソースグループ1つに対して予算を設定します。「コスト管理」から「予算」を開き、「追加」します。
必要な値を入力していきます。ここでの予算は月額10000円としておきます。
次のページでアラートの条件と、通知先を設定します。
ここでは「実際」に予算の割合が「90」%になった場合と、「予測」の予算の割合が「90」%になった場合にアラートを出すようにします。
アクショングループの作成
アラートの送出先として直接ロジックアプリを指定することはできず、アクショングループ を介する必要があります。「アクショングループの管理」をクリックして、「作成」していきます。
アクショングループ名は比較的長い名称をつけることができますが、表示名は12文字と短いので少し苦労するかもしれません。今回、「通知」は省略し、「アクション」を設定します。
「アクションタイプ」で「ロジックアプリ」を選択し、先程作成したロジックアプリを指定します。ここでは「共通アラートスキーマを有効にします」を「いいえ」とします。これにより、予算とロジックアプリを結びつけることができました。
テスト
アクショングループの概要の「テスト」から、サンプルアラートを発出することができます。
サンプルの種類として「コスト予算アラート」を指定してテストしてみましょう。
Slackに通知されました! 予算アラートからアクショングループを介し、ロジックアプリによってSlackにメッセージを出すという一連の流れが動いていることがわかりました。
実際の通知
実際に予算アラートがあった際のSlackメッセージは次の通りになります。
Azureのコスト 【予算名】 でコストがしきい値を越えることが予測されます サブスクリプション: 【サブスク名】(【サブスクID】) リソースグループ: 【特定のリソースグループ】 現在のコスト: 0 予測コスト: ¥12,934 閾値: 9000.00 予算: 10000.0
正しく動作しています。
まとめ
本稿では
を参考に、Azureの利用コストが設定した予算を超過する可能性の警告をAzure Logic Appsを使用してSlackに通知するようにしてみました。予算超過はメールでも通知されますがSlackにも合わせて通知できるため、監視が容易になります。
Azure Logic Appsを使えば、参考サイトのようにサービスを停止するなど、より高度な設定を行えるように思えます。さまざまな用途の組み合わせや応用も可能かもしれません。本稿が参考となれば幸いです。