Azure EA課金関連アップデート(CSV取得、ポータルでの参照)

#はじめに
[以前の記事](https://qiita.com/j-tsurumi/items/169732f16e1a630cc310)でEAポータルからAPIで課金を取得してくる方法を書きましたが、色々と機能に進展があったので、筆を執るに至りました。
ここ2か月のEA課金周りの大きなニュースは以下の二つです。

・**AzureポータルからEAサブスクリプションの課金情報が確認可能に。**
・**EA課金を最初っからCSVで出力してくれるAPIが登場**

二点目の方は以前の記事でスクリプトを用意した意味が全く無くなるアップデートで、少しだけ肩を落としました。
足りない機能を自分で実装するべきか、Azureのアップデートを待つべきかというのは中々判断が難しいですね。。。

それでは早速、各アップデートに関して書いていきたいと思います。

#Azureポータルでの課金確認

[Seamless cost reporting and analysis for Enterprise customers: now in preview](https://azure.microsoft.com/en-us/blog/cost-reporting-for-enterprise-preview/)
これも大きなアップデートですね。
今まではEAの課金はEAポータルのみでしか確認できなかったのですが、格段に見るのが楽になりましたね。
Azureポータルのサブスクリプションから確認したいサブスクリプションを選択すると、以下のようなUIで確認することができます。
![EA.PNG](https://qiita-image-store.s3.amazonaws.com/0/181154/d2d66611-9103-46fe-fa08-3671e7605dfc.png)
上の円グラフは課金額の大きいリソースは一つの項目として表示し、残りはその他の項目にまとめられます。
（隠してしまいましたが、上の図だと紫がその他になります。）
**「これだとどのリソースにどれだけの課金がかかったかの全貌が分からないじゃないか！いい加減にしろ！」**
と思った方、安心してください。しっかりと課金のかかった全リソースを表示することもできます。
サブスクリプションのメニューから「コスト分析」を選択すると、課金が発生した全リソースを表示することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/181154/c94ca20b-1ab8-e9fd-e518-8fa4761e0c50.png)
![EA2.PNG](https://qiita-image-store.s3.amazonaws.com/0/181154/93e397f7-a4a0-d983-8790-49aeea8a47fc.png)
さかのぼれる期間は上の画像にもありますが、**2か月前**までになっています。
また仮想マシンであればインスタンス起動時間とデータ転送量が合わさった、**リソースにかかった総課金**が表示されています。

また根本的な問題としてこの課金画面はだれでも見れるのかと言ったら、厳密にはそうではありません。
サブスクリプションのサービス管理者もしくは共同管理者の権限が与えられているユーザーのみが確認できます。

#EA課金のcsv出力API

[Announcing CSV format support for Usage Details API for Enterprise Azure customers](https://azure.microsoft.com/en-us/blog/announcing-csv-format-support-for-usage-details-api-for-enterprise-azure-customers/)
前回の記事が無くてもよくなったアップデートですね。
このAPI叩いておけば綺麗なcsvで課金情報が出力されて来ます。
APIは以下になります。

| Method | Submit Request URI |
|:-------|:-------------------|
| GET | https://consumption.azure.com/v2/enrollments/{enrollmentNumber}/usagedetails/download?billingPeriod={billingPeriod} |
| GET | https://consumption.azure.com/v2/enrollments/{enrollmentNumber}/usagedetails/download?startTime=2017-01-01&endTime=2017-01-10 |

基本的に必要な情報は以前と変わらないものになっています。
PowerShellで構成するとこんな感じに↓

```ps1:get_csv.ps1

Param(
     [string]$enrollmentNo
     [string]$accessKey
     [string]$stratTime
     [string]$endTime
)

$outputName = ".\usageDetail.csv"

$baseurlRest = "https://consumption.azure.com/v2/enrollments/"

$authHeaders = @{"authorization"="bearer $accessKey";"api-version"="1.0"}

$url = $baseurlRest + $enrollmentNo + "/usagedetails/download?startTime=" + $startTime + "&endTime=" + $endTime

Invoke-WebRequest $url -Headers $authHeaders -Outfile $outputName

```

基本的に難しい項目は無く、authorizationのヘッダーだけ"bearer アクセスキー"といった表記にする必要がある点だけ注意です。

上記のスクリプトを動作させます。

```ps1

get_csv.ps1 -enrollmentNo "登録番号" -AccessKey "アクセスキー" -startTime "YYYY-MM-DD" -endTime "YYYY-MM-DD"

```

出力されるCSVは以下のような内容になっています。

```

アカウントID、アカウント名、アカウント所有者のメールアドレス、
部門名、部門ID、コストセンター、サブスクリプション名、
サブスクリプションID、サブスクリプションGUID、日付、
リソースグループ、リソースの場所、リソースの場所ID、
消費済みサービス、消費済みサービスID、測定(サブ)カテゴリ、測定ID、
測定名、測定範囲、測定単位、製品名、製品ID、インスタンスID、
リソース料金、消費量、コスト、追加情報、
サービス管理者ID、サービス情報1、サービス情報2、ストアサービス識別子、タグ

```

基本的にこれらが情報がすべて出力されますので、特定部分の情報だけを抜き取る場合は以前の記事と同様に
JSONを取得してCSVへの変換の際に一部だけ選択する方式か、取得したCSVを一度加工する必要があります。

#終わりに

以上の様にEAの課金を取得及び参照する方法も続々と増えてきています。
このように方法が増えてきても重要なのは、どの方法が最も目的に即しているかで取捨選択することです。
最近は特にIgniteの影響もあり多くのサービスや機能が追加されてきています。新たな機能がすべていいわけではなく、モノによっては前からの方法が最善ということもあります。
ただ、クラウドの特性上過去の方法が新たな方法に取って代わられ廃れやすいのも現実です。
その点はどうすればいいというベストプラクティスはありませんが、クラウドの根本的な考えと同じように
「サービスを利用したいときに利用したいだけ使用する」のがいいのかなと私は思います。
皆様もぜひ自分の利用したい方法で実装してください！
では。

#参考資料

・https://azure.microsoft.com/en-us/blog/cost-reporting-for-enterprise-preview/
・https://azure.microsoft.com/en-us/blog/announcing-csv-format-support-for-usage-details-api-for-enterprise-azure-customers/
・https://docs.microsoft.com/ja-jp/rest/api/billing/enterprise/billing-enterprise-api-usage-detail
・https://docs.microsoft.com/en-us/azure/billing/billing-getting-started#cost-reporting