Oracle Cloud Infrastructure REST APIをリクエストしてみた vol.2: Account Metering REST API編

こんにちは。のどの痛みがひどいid:k-furusawa--gです。

今回はREST APIを使ってみよう第2弾として、Account Metering REST APIに挑戦したいと思います。こちらはテナントの現在のコスト情報を取得するためのAPIとなります。公式ドキュメントは以下です。

docs.oracle.com

本記事の目次

必要なRoleについて

利用するために必要ないくつかのRoleがあります。ドキュメントによれば以下の3つの何れかです。

  • アイデンティティ・ドメイン管理者(Identity Domain Administrator)
    従来のクラウド・アカウントを使用する場合に必要となる。

  • クラウド・アカウント管理者(Cloud Account Administrator)
    デフォルトで、初期クラウド・アカウントユーザーと、オラクルクラウド・アカウント内で全ての管理タスクを実行する権限を持つユーザーにアサインされる。

  • サービス管理者
    一つ以上の特定のクラウドサービスに対してAdminRoleが割り当てられたユーザーに割り当てられる。
    OCIアカウントが管理するサービスに関する使用情報を得るために使用できる。

といった具合に書かれているのですが、実際には2番目の「クラウド・アカウント管理者(Cloud Account Administrator)」があれば実行することができます。
逆にこのRole無しの状態では当APIが実行できず、SRに問い合わせたところバグとして登録されました。どういったバグであるかは調査を待ちたいと思います。

実際に実行してみよう

では実際にAPIを実行してみます。

基本URI

MeteringAPIは

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain htttp://itra.oraclecloud.com/metering/api/v1/機能/OCIアカウント

が基本URIです。ヘッダにX-ID-TENANT-NAMEでMyDomainを含めなけばいけません。

Subscription の取得

まずはSubscription の一覧を取得します。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/metering/api/v1/cloudbucks/OCIアカウント

f:id:k-furusawa--g:20190329131839j:plain
コスト取得1

無料トライアルなのでpurchasebalanceもすべての要素が0で返ってきます。余談ですが、無料トライアルの金額はMeteringAPIではなく契約情報取得で出てくるようです。

ResourceQuota の取得

次にリソースの割り当てを取得します。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/metering/api/v1/checkQuota/OCIアカウント?serviceName=サービス名

f:id:k-furusawa--g:20190329133115j:plain
コスト取得2

ドキュメントには書いてませんが、serviceName パラメータは必須です。リソースの割り当てを取得したいサービス名を入力します。ただしこのサービス名というのは「myservices REST API」という別のAPIで取得できるサービス名でなければ機能しません。これはドキュメントにも書かれています。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/itas/テナント名/myservices/api/v1/serviceEntitlements

で、テナントで利用可能な全サービスが取得できます。具体的には以下のようなものが返ってきます。

  • COMPUTEBAREMETAL : Computeサービス。
  • AUTOANALYTICS : Analyticsサービス。
  • DBAAS : Databaseサービス。

利用中サービスの取得

次に、重要になる利用中サービスと使用量(quantity)を取得します。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain \
    https://itra.oraclecloud.com/metering/api/v1/usage/OCIアカウント?startTime=2019-03-01T00:00:00.000Z&endTime=2019-03-28T23:59:59.000Z&usageType=DAILY&timeZone=America/Los_Angeles

f:id:k-furusawa--g:20190329134444j:plain
コスト取得3

これもドキュメントに書かれていませんが、startTimeendTime による期間指定は必須です。usageType で取得タイプを切り替えられます。指定できるのは TOTAL HOURLY またはDAILY です。ただし TOTAL を指定するとレスポンスが悪くなるのでご注意ください(DAILY とくらべて3倍くらい時間がかかります)。

利用中のサービスと使用量だけなく、使用しているタグを取得することもできます。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/metering/api/v1/usage/OCIアカウント/tags?tagType=ALL

OCIアカウントの後ろに tags を指定すると、利用しているタグが得られます。tagType パラメータは必須になります。ALL NON_NATIVE NATIVE を指定できます。タグ取得はこの次にご紹介するコスト詳細取得で使います。

コスト詳細の取得

では一番知りたいコスト詳細を取得します。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/metering/api/v1/usagecost/OCIアカウント/tagged?startTime=2019-03-01T00:00:00.000&endTime=2019-04-01T00:00:00.000&usageType=DAILY&timeZone=America/Los_Angeles

f:id:k-furusawa--g:20190329140314j:plain
コスト取得4

こちらも期間指定が必須です。usageType も同じものが設定可能ですが、TOTAL を指定すると驚くほど遅くなるのでおすすめしません(私の環境でなんと一か月分80秒! DAILY なら2秒で済みます)。

タグによるコスト詳細の絞り込み

コスト詳細はタグで絞り込むこともできます。

curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/metering/api/v1/usagecost/OCIアカウント/tagged?tags=ORCL:OCIService=Compute

OCIアカウントの後ろに tagged をつけるとタグによる絞り込みになります。上の例では ORCL:OCIService=Compute というタグを持つ情報だけに絞っています。OCIのComputeサービスだけという意味ですね。

タグにはほかにも ORCL:OCICompartment=ocid1.tenancy.oc1..aaaaa*** の様にCompartmentのIDを指定できますので、Compartmentで絞り込むこともできます。ただ欠点として、どのタグに結び付いた情報であるのかはレスポンスに含まれないので、複数のタグを指定するとどの情報がどのタグから得られたものであるのか分からなくなります。もしタグによるコストの切り分けを明確にしたい場合は、タグ毎にリクエストをしたほうがいいでしょう。

もう一つ注意点として、 tagged を指定した場合は Analytics サービスのようなタグ付けがなされていないサービスのコスト情報は省かれます 。なので、全タグを駆使して情報を取得しても、一部のコスト情報が得られずに実際と違う総コストになってしまうことがありますので、この機能はあくまでもタグの絞り込みに特化して利用したほうがいいでしょう。

余談:使用状況レポート

ところで、コストを取るならOCIには「使用状況レポート」というサービスがあるよ! とメンバーが教えてくれました。そちらを使えば使用状況のレポートをCSVとして出力してくれるようです。利用するにはポリシー設定をすればいいようです。

docs.cloud.oracle.com

こちらのほうはまだ試していないので、試せたらまた記事を書きたいと思います。

おしまいに

いかがだったでしょうか。ここまで出来るようになるまで2か月ほどかかりましたが、ようやくコスト情報を得られるようになりました。使うのに癖があるのと、強めのAdminRoleが必要になるので、普段使いするには少し難しい部分が多いように感じました。

また機会があればREST API系の記事を書きたいと思います。