BEACHSIDE BLOG

Azure とか C# 好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Azure のコストが一定額に達したら Slack とか Teams に通知する

Azure ではいくつかのコスト管理と通知に関する設定があります。

  • 制限の手段として、何らかの特典でクレジットカードを登録したけど無料の範囲でしか使わない場合は、Azure Portal ではなく、アカウントポータル: https://account.azure.com/Subscriptions/から使用制限をかけることで課金されなくなります。この設定は、金額を指定して制限はかけれません。課金する or しない の二択です。

  • アラートの手段として、Azure には Billing API というコストや請求書を取得できる API があります。当月でいくらになったら Slack に通知するとか前日よりいくら増えたら Teams へ通知するとかコードさえ書けば余裕です。プログラミング化できる=自動化できるのが利点であり、エンジニアじゃない人にとってデメリットになりますね。

  • アラートの手段として、Azure ポータルで金額の閾値を超えたらアラートを出す設定ができます。画面でポチポチするだけなので最もお手軽なアラート設定です(と個人的に思っている)。

3番目の Azure ポータルでのアラート設定は、Azure Monitor とのコンボで Teams へ通知とかもポチポチーです。手慣れた猛者なら5分もかかりません。

ということで、利用料が設定した金額に達したら Teams に通知するように設定するのをメモしました。Slack はできるけどここでは触れません(なのにタイトルに書いた)

注意: Azure の契約形態によっては設定できません

コストのアラートを設定する前提として、Azure ポータルの コストの管理と請求 からコストを見れる契約に限ります。見れない契約(CSP プロバイダーとか経由して契約したアカウントとか)では設定できません。
もちろんアカウントの権限でコストを見れるユーザーでなければ設定もできません。

予算を設定する

アラートが発動する金額を設定します。

Azure ポータルの左側のメニューから コストの管理と請求 > コスト管理 をクリックします。

f:id:beachside:20190912160541p:plain

予算 をクリックすると現状の設定が確認できます。 追加 をクリックして金額に応じたアラートの設定をすることができます。

f:id:beachside:20190912175224p:plain

悩むような内容はないので画面に沿って予算の作成を登録します。予算のスコープ でサブスクリプションや、リソースグループを絞り込むことができます。次へ ボタンをクリックして通知の設定へ進みます。

f:id:beachside:20190912161012p:plain

通知の設定ではだれに通知するか、設定した閾値の何%に達したらアラートを通知するかを設定できます。一つの金額に対して%を設定して多段階に設定できるのは便利。単純なメール通知ならこれでよいですね。

ここで(Auzre Monitor で作れる)アクションルールを組み合わせることができるのがすばらしいインテグレーションですね。
ということで、次は Teams へ通知するアクションルールを作ります。

Teams へ通知する Logic App の作成

後ほど Azure Monitor で使う Teams への通知の Logic App を作成します。

リソースグループの作成

後ほどリソースグループの指定が必要だったり、Logic Apps を作ったりするので先に作っておきましょう。

Logic Apps の作成

HTTP Request をトリガーにして Teams への通知する Logic Apps を作ります。

Azure ポータルの左側のメニューの リソースの作成 > 「logic app」で検索してリソースの作成をしましょう。

名前は適当に入れ、リソースグループは先ほど作成したものに指定しておきました。

デプロイが完了したら、Logic App のリソースに移動します。ロジックアプリデザイナー で HTTP 要求のトリガーを選択します。下の画面だと HTTP 要求の受信時 をクリックします。

f:id:beachside:20190912171630p:plain

f:id:beachside:20190912171849p:plain

要求本文の JSON スキーマに、以下を入力します。

で、新しいステップ をクリックして次へ進みます。

次は Teams への通知の設定をします。
検索に「microsoft teams」と入力します。「teams」だけを入れると検索でヒットしません(汗)Microsoft Teams のコネクターを選択します。

f:id:beachside:20190912164454p:plain

今回は特定のチャネルに通知したいので「メッセージをフローボットとしてチャンネルに投稿する(プレビュー)」を選択しました。

f:id:beachside:20190912164608p:plain

初めての場合はサインインが要求されます。サインインしましょう。

f:id:beachside:20190912164823p:plain

サインインできたら、Teams の設定をします。通知したいチームや Channel を選択します。
Message には以下のように入れました。動的なコンテンツの追加から 先ほどの HTTP 要求の受信時 で取得するはずの値をとれるのでそこら辺を適当に使っています。

f:id:beachside:20190914143321p:plain

最後に上部の 保存 ボタンをクリックしましょう。

全然関係ない話ですが、Azure Monitor のアラート時のスキーマには 共通アラートスキーマ という汎用的なスキーマがあります。ただ、残念なことに現時点では Azure Cost Management によって生成されたアラートではサポートされていないです。 Azure Monitor アラートの共通アラート スキーマ | Microsoft Docs

Azure Monitor でアクショングループの作成と設定

Azure Monitor からアクショングループを作成

Azure ポータルのメニューで モニター > アラート をクリックし、画面上部の アクションの管理 をクリックします。

f:id:beachside:20190912183729p:plain

アクショングループの追加をクリックします。

アクショングループ名短い名前を適当に入力してサブスクリプションも任意のを選択します。リソースグループは設定自体に特に意味ないですが先ほど Logic App を作成したやつを選択しておきました。

アクションのセクションでは、アクション名を適当に入力して、アクションタイプに「ロジックアプリ」を選択します。そして右側の詳細の編集をクリックします。

f:id:beachside:20190912184331p:plain

ロジックあrプリの設定画面が表示されます。リソースグループには先ほど Logic App を作ったものを選択し、作成した Logic App を選択します。OK をクリックして保存しましょう。

f:id:beachside:20190912184359p:plain

アクショングループの追加の画面に戻るので、画面下部のOKボタンをクリックすれば完成です。

予算にアクショングループを設定する

メニュー コスト管理と請求 > コストの管理 > 予算 をクリックし、先ほど救った予算をクリックしましょう。

画面上部の予算の編集をクリックして編集できます。
通知の設定 タブで、警告条件アクショングループに、先ほど作成したアクショングループを設定しましょう。アラートの受信者(メール)は不要なら削除します。

f:id:beachside:20190912175522p:plain

ここ、保存してから再度開くとアクショングループの設定が無しになるんですが....まぁいいか...

通知の確認

予算の閾値を数パーセント単位で変更して何度も通知を待ってたんですが全然こなかった...どうなっとんのやと思ったら、夜中に通知が来ました(ブログでメモったメッセージとはちょっと違いますがw)

f:id:beachside:20190914144025p:plain

通知のタイミングは、こちら のドキュメントを見ると「予算のしきい値が満たされたとき、通常、8 時間以内に電子メールの通知が届きます」だそうです。なるほど気長に待つ必要があったわけです。ドキュメントを先に読んでおかんとあかんですね。

この設定で無事に Teams に通知が来ることが確認できました。

ただ、翌日になったらアクショングループが消えてたってのがあったので...(画面表示だけ?気のせい?)、安定して動作するかの確認はしておきたいなーと感じてます。

設定どおり正しく動けば、これで何かお高いリソースを作っても大きな課金を食らう前にアラートで気づくことができるはずです。

参考

Azure Portal でのアクション グループの作成および管理 | Microsoft Docs

Azure Monitor アラートの共通アラート スキーマ | Microsoft Docs

Azure の請求およびコスト管理の予算シナリオ | Microsoft Docs

チュートリアル - Azure の予算を作成して管理する | Microsoft Docs