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

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

【Microsoft Cost Management】リソースグループに設定したタグでコスト発生部門を振り分ける運用について考える

Microsoft Azureを使用していて一つのサブスクリプション内でもコスト発生部門がバラバラで集計がなかなかうまく取れないという方もいるかと思います。実際私がそうなのですが...
今回はそういったケースで使える機能と運用方法をご紹介しようと思います。今回紹介する方法は基本的にエンタープライズの契約(EA契約など)を行っている方向けの方法となります。契約の種類によって使えない機能などもございますのでご注意ください。

「Azure Policy」でリソースグループで部門集計用タグの追加を強制するポリシーを作成する

Microsoft 公式ページにある「リソース グループでタグを必須にする」ポリシーを使用すればある特定のタグをリソースグループで必須にすることができます。
learn.microsoft.com

公式ページのリンクからAzureポータルの当該ポリシーを定義するページに遷移しますので「割り当て」を押して、スコープや割り当て名、実際に強制するタグ名となるパラメーターの設定をするだけでポリシーを適用できます。

このポリシーを適用しても既存リソースグループには影響せず、新規でリソースグループを作る際にタグを設定していないと作成できないようになります。

これでリソースグループに部門集計タグが強制される状態にはなりましたが、Microsoft Cost Management のコスト分析では「リソースグループではなくリソース」にタグが付与されれている必要があります。そのため、次の機能を使用してタグの値を継承します。

「タグの継承」でリソースグループに設定したタグをリソースに継承する

「タグの継承」機能を使用してリソースグループに設定したタグと値をリソースグループに属する各リソースに継承します。なお、タグの継承に関しては下記の契約形態のみ可能です。

  • Enterprise Agreement (EA)
  • Microsoft 顧客契約 (MCA)
  • Azure プラン サブスクリプションを使用した Microsoft Partner Agreement (MPA)

タグの継承については別記事で紹介していますのでそちらをご参照ください。
onarimon.jp

「コスト割り当て」を利用して共有リソースを案分したり、コストを別の部門に付け替える

また、部門別に経費集計したい場合などに気になるのが、共有リソースなどの費用を案分したい場合などが想定されますね。その場合はコストの割り当て機能を利用することで「サブスクリプション」、「リソースグループ」、「タグ」の単位でコストを他の「サブスクリプション」、「リソースグループ」、「タグ」に配分設定することができます。こちらも使用できるユーザーが限られているのでご注意ください。

  • MCAエンタープライズ契約
  • MCA 個別契約
  • Enterprise Agreement (EA)

案分するコストは手動でも設定できますが、均等に配分したり、配分先の総コストの比率で配分したり、コンピューティングコスト、ストレージコスト、ネットワークコストなどの使用量に応じて案分したり設定することもできます。
詳しくは別記事で紹介しているのでそちらをご参照ください。
onarimon.jp

「コスト分析画面」でコストをタグごとにグループ化して表示する

あとはコスト分析画面でどのように表示されるか確認してみましょう。
EA契約ですと、「コスト管理と請求」→「課金スコープ」→課金スコープを選択→「コスト分析」コストのグラフが表示されると思います。


グループ化で「タグ」→「<ポリシーで設定したタグ名>」を選択します。このときタグの継承ができていないとおそらく候補にタグ名が出てこないです。

ボリュームによっては集計に少し時間がかかりますが、下記のような形式でタグごとのコスト分析ができるようになります。あとはCost Management の機能で好きにカスタマイズして利用しましよう。
グループ化:経費集計タグ、細分性:累積、領域形式

グループ化:経費集計タグ、細分性:月単位、テーブル形式

これ以上に細かい分析が必要な場合は、EA契約であれば「使用量 + 請求金額」から使用状況詳細のCSVをダウンロードして使用したり、Microsoft Cost Management REST API を使用してデータを取得して独自でアプリケーションなどを構築することもできますが、少し作りこみが必要です。
用途に合わせて使い分けてみてみましょう。