【2020/05/22 Update】サービスがリニューアルしました
本記事で紹介している使用状況レポートは、2020年4月に「コストおよび使用状況レポート」としてリニューアルされ、合わせて記事も書かせていただきました。併せてご一読ください。
【2020/07/28 Update】Oracle Cloud Infrastructure の使用状況レポートが「コストおよび使用状況レポート」としてリニューアル
旧サービス記事
こんにちは。GW中にオラクルサポートのサービスリクエスト対応を4つしていたのですが1つしか解決しなくて軽く鬱なid:k-furusawa--gです。
今回はUsageReport(使用状況レポート)をご紹介したいと思います。
本記事の目次
はじめに
公式ドキュメントは以下です。
記事を始めるまえに、一つ謝罪をしなければいけません。
前に書いた記事 Oracle Cloud Infrastructure REST APIをリクエストしてみた vol.2: Account Metering REST API編 で私はこのUsageReportを使えば料金を出せると書いたのですが、これは勘違いでした。申し訳ございません。
後述しますが、このUsagereportで確認可能なのは、リソースの使用量に留まり、請求金額までは分かりません。AWSの請求レポート と同等のものだと思い込んでいました。
また、OCI Classicの使用量は記載されないらしく、最終的にOCIから請求される全体量を知ることもできません。
利用設定(ポリシー作成)
UsageReportは、OCIの用意している特定のテナント領域に保存されているため、クロステナントをしなければいけません。そのため、利用するためにはポリシー設定が必要です。ポリシー設定ができていない場合、以下のような画面が表示されます。
この画面を開くとき言語設定は英語にしたほうがいいでしょう。なぜなのかというと、日本語にするとポリシーの内容まで訳されてしまって都合が悪いからです。
この過剰な翻訳に関してサポートへサービスリクエストで報告したところ、なぜか画面説明のドキュメントを返されましたが、しつこく報告し続けたところ対応中のチケットが作成されたので、そのうち直ると思います。
では警告通りにポリシー設定しましょう。まずはユーザグループを作成します。
UsageReportUsers
という名称で作成しました。作成したらユーザを登録してください。作成と登録を終えたら、グループ名をメモしておきます。
次にポリシー作成です。警告画面に出てきた2つのポリシー文を登録するポリシーを作成します。
ポリシー名はUsageReport
にしました。ここに2つのポリシー文を追加します。内容は警告文通り以下にしました。
define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq endorse group UsageReportUsers to read objects in tenancy usage-report
これで完了です。……のはずだったのですが、これだけではUsageReportは利用できませんでした。
なぜなのかサポートで問い合わせてみたのですが、それで出来るの一点張りで解決しそうになかったため、ちょっと検証してみたところ、どうやらフェデレーションでグループマッピングが必要なようでした。
サポートの回答でもマニュアルでも一切フェデレーションについて触れていないところに疑問ですが、これで使えるようになりました。サポートへこれについて報告したところ、2018年12月以降に作成されたすべてのアカウントはIDCS連携なので、必ずマッピングが必要だそうです。マニュアルになぜ書かないんでしょうね。
ちなみにフェデレーションする場合はグループにユーザ登録する必要はありません(グループマッピングした側には必要です)。
UsageReportが利用できるようになると、以下のようなファイル一覧が表示されます。
これが、OCIの用意した領域に保存されているレポートファイル一覧となります。契約した日から現在まで毎日作成されます。ただし、このUsageReportはサービスインしたのが2019年3月であるため、それ以前からOCIを利用していたとしても2019年3月以前のレポートは作成されていません(オラクルサポートで確認済み)。
AWSの場合はS3に格納されるので検索出来たり、変更ログが残るので便利なのですが、OCIのUsageReportではそういったことはできないようです。検索もできないのは、なかなかハードは気もしますが……。
UsageReportに記載される項目
UsageReportには以下のような項目が記載されています。上記したドキュメントにも書かれていますが、少し解説を。
-
intervalUsageStart, intervalUsageEnd
期間。間隔は1時間で固定。
-
service
コストが発生したリソースのサービス名。
OBJECTSTORE
やCOMPUTE
と記載。 -
resource
コストが発生したリソース名。
PIC_COMPUTE_OUTBOUND_DATA_TRANSFER
やPIC_COMPUTE_X7_VM_STANDARD
と記載。 -
compartmentId, compartmentName
リソースが所属しているコンパートメント情報。
-
region
リソースの配置されているリージョン。
-
availabilityDomain
リソースの配置されている可変ドメイン。可変ドメインに依存しないサービスの場合(NetworkやObjectStorageなど)は記載されない。
-
resourceId
コストが発生したリソースのOCID。ObjectStorageの場合は Bukcet名やObjectのパスが記載。
-
consumedQuantity
実際の使用量。Instanceを1時間に何ミリ秒稼働させたのか、Networkを1時間に何バイト通信させたのかなどを記載。
-
billedQuantity
請求された使用量。例えば、上記の
consumedQuantity
でInstanceが 6400000MS稼働と記載された場合、この項目には7200000MSと記載される。 -
consumedQuantityUnits
使用量の単位。Instanceの場合は
MS
もしくはHR
と記載。ネットワークの場合BYTE
と記載。リソースの請求方法に合った単位が記載される。 -
consumedQuantityMeasure
使用量の指標。例えば、請求方法がリクエスト数である場合、上記の
consumedQuantityUnits
にはCOUNT
と記載され、当項にはREQUESTS
と記載される。 -
isCorrection
特に意味はない。将来のために予約された項目。
-
tags
そのリソースに付与されているタグの一覧が横に並ぶ。
利用してみてわかったこと
上記した項目を見ていただければわかる通り、UsageReportはあくまでも使用されているリソースの使用量を提供するものであり、金額の確認はコンソールのコスト分析画面を利用するのを前提にしているようです。
通貨や単価、税などAWSのUsagereportの明細で提供されている詳細なコスト内容は記載されていません。
自前で計算するのも手ですが、OCIのサービス単価表を取得するAPIなどは無く(似たことができるAPIはありますが)、仮にあったとしてもUsageReportにはサービスIDなどが割り振られているわけでもないため、紐づけを確立するのも難しいです(実際に試みましたが困難でした)。
また、OCI Classicの使用量は記載されないそうです。これについてオラクルサポートで確認を取ってみたところ、このUsageReportはOCIのサービスとして展開しているため、OCI Classicに関してはOCIのサービス外として扱い記載をしていないそうです。そのため、OCI全体の使用量を知ることはこのUsageReportではできません。そういった情報が欲しい場合、引き続きAccount Metering APIを利用しなくてはいけないようです。
利用設定が煩雑であったり、UsageReportについてサポートにサービスリクエストを出すとエンジニアの反応が鈍かったりするので、まだ発展途上なのかもしれませんね。今後に期待したいところです。
まとめ
料金の変動を記録し、それをグラフ化したい。経理担当者向けに詳細な明細表を作成したい。といった用途の場合、このUsageReportは適していません。また、OCI Classicを利用されている場合も、このUsageReportの利用は適しません。
ただ、OCI内でのリソースの利用率可視化や監視には十分に利用可能です。タグ情報も記載されるためタグによる絞り込みなども提供できるでしょう。
名前がAWSの Cost and Usage Report と似ているため、どうしても明細を提供してくれるものだと思いがちですが、OCI内の使用量の詳細を提供してくれるレポートである。と考えれば違和感はないと思います。