EA 契約における Azure 使用状況と料金をタイムリーに把握しよう
コンサルタントからクラウド・ソリューション・アーキテクト(CSA)と言うよくわからない職種にジョブチェンジして早8か月、 ちょっと Blog とかも書いてみようかと思い立ちました。というわけでここ最近よくご相談いただいた「EA 契約のサブスクリプションだと Azure ポータルから料金が見えないんだけど?!」というお話です。それほど目新しい話でも無いのですが、まとまった情報が少ないようなので簡単にまとめてみました。
はじめに
一般的な従量課金の場合には Azure ポータルから以下のように料金が把握できますし、Azure Resource Usage API および RateCard API を使用することで各リソースの詳細なデータを取得することができます。ただこの API 、困ったことに EA 契約の場合は使用量は取れるんですが料金が取れません。このため「今月使いすぎてるからちょっと抑えよう!」とかいう運用が難しいんですね。
[caption id="attachment_37" align="aligncenter" width="320"] 従量課金プランでは Azure ポータルで確認[/caption]
個人的にそこは気にせずジャブジャブ使っていただきたいとは思いますが、せっかく Azure を使ってくださっているユーザー様に無駄遣いさせるわけにもいきません。何らかの形で「タイムリーに料金を把握する」方法は必要なわけです。
方法は3つ
EA 契約において Azure 利用料および請求金額を把握する方法は大きく分けて以下の3つです。概要と参考情報を以下に紹介しておりますので、用途に合わせて使い分けていただければと思います。
- EA ポータル
- Power BI
- レポート API
EA ポータルを使用する
EA 契約の場合には各契約ごとに必ず「エンタープライズ管理者」という役割の方がおり、この方は請求金額を把握することができます。エンタープライズ管理者が EA ポータル にログオンすると、以下のように EA 契約に含まれる各部署、各アカウント、各サブスクリプションの使用状況を料金とともに把握することが可能です。
[caption id="attachment_45" align="aligncenter" width="480"] EA ポータルで請求金額を確認[/caption]
しかしポータルで金額が確認できるのはエンタープライズ管理者だけです。このため「現在の自分の使用料が知りたい!」という一般ピープルはどうすればいいのでしょうか?まさか皆がエンタープライズ管理者になってしまうわけにもいきませんし。となると一般ピープルはエンタープライズ管理者を探し出し、EA ポータルにアクセスしてもらって、上記のページを印刷するかデータをダウンロードしてもらうことになります。エンタープライズ管理者は全てのサブスクリプションに対してこの作業を実施しなければいけないのでしょうか?しかも当初の目的からすれば”毎日”です。やってられませんね。
やはり EA ポータルの目的は「全体を俯瞰する立場の人」が総体の把握や今後の予測といった用途に使用するのが適切でしょう。
- どの部門でどれだけ Azure が利用されているのか?
- 前払いした残高はあとどれくらい残っているのか?
- 今月はどのくらいの請求が来るのか?
- 前払いのクレジットを追加購入する必要があるのか?
Microsoft Azure Enterprise content pack for Power BI を使用する
Power BI は様々なサービスが提供するデータを「コンテンツパック」と呼ばれる形式で取り揃えています。EA 契約における Azure の利用状況を可視化するためのコンテンツパックも用意されており、こちらを利用することでさらに高度な分析をグラフィカルに行うことが可能です。これは便利。
[caption id="attachment_55" align="aligncenter" width="480"] Power BI コンテンツパックで可視化[/caption]
利用方法の詳細に関してはこちらをごらんいただければと思いますが、大まかにいえば以下の 3 ステップです。
- 自身の ID でPower BI にログインする(これは Azure や EA と全く関係ない ID で大丈夫です)
- 「Microsoft Azure Enterprise」という名前のコンテンツパックを接続する
- 接続時に当該 EA 契約の情報に対する「アクセスキー」を入力する
このアクセスキーは EA ポータルで取得することができます。ですのでエンタープライズ管理者にこのキーを教えてもらう必要があります。これなら最初に 1 回連絡するだけですみますね。
[caption id="attachment_75" align="aligncenter" width="480"] EA ポータルで API アクセスキーを取得[/caption]
ところでこのキーを入手した人は全ての部門、全てのアカウント、全てのサブスクリプションの状況を把握することが可能です。この「見えてしまう」こと自体が問題になるか否かは企業や組織のポリシーにもよるわけですが、怖いのはスコープの広さと、それによる漏えい時のインパクトの大きさです。というわけで アクセスキーの配布と Power BI を利用した分析も、以下のような用途で特定少数のユーザーに限るのが現実的ではないでしょうか。
- 利用頻度の高いサービスを把握し、ノウハウの収集や技術トレーニングを重点的に行う
- 請求金額の大きいサブスクリプションを把握し、コストダウン施策を立案する
- リソースが多く配置されているリージョンに対して、接続性が良くなるようにネットワークを増強する
レポート API を利用する
レポート API を使用することで、前述の2つの方法で表示されていた「生のデータ」を機械的に取得することが可能です。実際に API を使用してある月の使用料を CSV 形式でダウンロードしたものを、みんな大好き Excel で表示したものが下図になります。これをフィルターしたりピボットテーブルで集計したりは自由自在です。また CSV だけではなく JSON 形式でも取得可能ですので、ファイル出力前にアプリケーションで加工したいようなケースではそちらが便利かもしれません。
[caption id="attachment_65" align="aligncenter" width="480"] API でダウンロードした CSV データ[/caption]
レポート API を使用する方法はこちらが参考になるかと思います。 REST API なので比較的最近のプログラム言語であれば実装はそれほど難しくないでしょう。また実際に活用する上では詳細な API リファレンスが必要になりますが、そちらは EA ポータルの「ヘルプ」からもダウンロードすることが可能です。
[caption id="attachment_85" align="aligncenter" width="480"] API リファレンスの入手[/caption]
レポート API を呼び出す際には Power BI の場合と同様に「アクセスキー」を使用しますので、本質的には同じ問題をはらんでいます。しかし Power BI と異なるのは、以下のようなカスタマイズが容易なことです。
- API なので機械的に実行することができる
- ユーザーの目に触れる前に適切な状態に加工する
- 適切なユーザーのみに必要最小限のデータを提示する
- etc...
非常に簡単な例でいえば、以下のような機能を持つスクリプトを実装し、タスクスケジューラ等で定期的に実行してやればよいわけです。
- レポート API を呼び出し CSV をダウンロード
- 各レコードをサブスクリプション単位の別ファイルに分ける
- アカウントオーナー ID (メールアドレス)宛てにメール送信する
または Web アプリとして実装するというのも良いでしょう。アカウントオーナーがログオンすると自身のアカウント配下のサブスクリプション情報だけが表示されるようにすればいいですね。アカウントオーナー ID は Microsoft アカウントか組織のアカウント(Azure AD)ですから、ログイン処理を作るのはそれほど難しくありませんし。そして Azure App Services 上で動かしていただければと思います。
まとめ
レポート API 以外には若干否定的なニュアンスが入ってしまいましたが、EA ポータルも Power BI も適切な使い方をすれば便利なツールであることは間違いありません。適材適所で使っていただければと思います。ただ私は元アプリ開発者だったせいか、API があれば叩いてみたくなる性でして、応用が効くものは大好物なんですね。というわけでこれ以降のブログもこのレポート API を使っていろいろ実験してみたいなーと思っていたりします。