RunbookとLogic Appsを使用してAzure利用料金をTeams通知する -1- Runbook編

はじめに

Azure社内検証環境の利用料金が結構な金額になってしまっているのに気づきました。

リソースを作り直す手間を考えるとついつい放置してしまいますが、リソースを作り直す時間コストと利用料金を比較すれば、一旦削除した方が安く済む可能性もあります。

Azure Portalの「コスト管理」から詳細なコストの内訳が確認できますが、当月の利用料金を把握したいだけの場合、度々Azure Portalにログインするのは面倒です。

今回、RunbookとLogic Appsの勉強も兼ねて、リソースグループ単位のAzureコストをTeamsで自動通知できる仕組みを作ってみました。
以下の画像のような出力を目指します。

本稿では前編としてRunbookについて記載します。

処理の概要

  1. Runbook(PowerShell)を実行し、リソースグループ単位の利用料金を取得します。
  2. HTTPリクエストにより、RunbookからLogic Appsに利用料金を送信します。
  3. Logic AppsでTeamsのコネクタを使用し、利用料金をTeamsのチャットに送信します。

Runbookの作成

Automationアカウントの作成

まずはAutomationアカウントを作成します。
パラメータはほぼ既定値としたので、手順は省略します。

以下は備考です。
・認証のためにシステム割り当てのマネージドIDを設定しました。
・マネージドIDには共同作成者ロールを付与しました。

Runbookの作成

作成したAutomationアカウントに、以下のRunbookを作成します。

Runbookの種類 PowerShell
ランタイムバージョン 5.1

スケジュールの設定

平日の朝9時にスケジュールを設定します。

変数の設定

Automationアカウントの[変数]にて、以下の変数を追加します。

LogicAppsUri Logic AppsのURIです。RunbookからHTTPリクエストを送信する際に使用します。
(URIの確認方法は後編に記載します)
ResourceGroupName Azure利用料金を取得する対象のリソースグループ名です。
SubscriptionID 対象のリソースグループが存在するサブスクリプションのIDです。

Runbookで実行する処理

以下の処理を実行します。

パラメータ設定

Get-AutomationVariableコマンドを使用してAutomationアカウントに設定した変数を読み込みます。

$SubscriptionID = Get-AutomationVariable -Name "SubscriptionID"
$RGName = Get-AutomationVariable -Name "ResourceGroupName"
$LogicAppsUrl = Get-AutomationVariable -Name "LogicAppsUrl"

Azureログイン

マネージドIDの資格情報を使用してAzureにログインし、サブスクリプションを選択します。

Connect-AzAccount -Identity
Set-AzContext -SubscriptionId $SubscriptionID

Azure利用料金取得

1行目でリソースグループの利用情報を取得します。
2行目で利用情報から月次の利用料金のみを抽出し、合計を計算した後、小数点以下を四捨五入します。

$UsageDetail = Get-AzConsumptionUsageDetail -ResourceGroup $RGName
$Cost = [Math]::Round($($UsageDetail.PretaxCost | Measure -Sum).Sum, [MidpointRounding]::AwayFromZero).ToString("#,#")

HTTP要求の送信

JSON形式の変数にリソースグループ名と利用料金を格納した後、Logic AppsのURIにHTTPリクエストを送信します。

$Body = @{
    resourcegroup = $RGName
    cost = $Cost
}
Invoke-RestMethod -Uri $LogicAppsUrl -Body $Body

おわりに

RunbookからLogic AppsにAzure利用料金を送信できるようになりました。
後編では、Logic AppsでTeamsに通知するワークフローを作成します。

執筆担当者プロフィール
森野 祥平

森野 祥平(日本ビジネスシステムズ株式会社)

主にAzureに携わっています。好きなアーティストはB'zです。

担当記事一覧