こんにちは。のどの痛みがひどいid:k-furusawa--gです。
今回はREST APIを使ってみよう第3弾として、Account Metering REST APIに挑戦したいと思います。こちらはテナントの現在のコスト情報を取得するためのAPIとなります。公式ドキュメントは以下です。
本記事の目次
必要な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アカウント
無料トライアルなのでpurchase
もbalance
もすべての要素が0で返ってきます。余談ですが、無料トライアルの金額はMeteringAPIではなく契約情報取得で出てくるようです。
ResourceQuota の取得
次にリソースの割り当てを取得します。
curl -X GET -u ユーザID:パスワード -H 'X-ID-TENANT-NAME:MyDomain https://itra.oraclecloud.com/metering/api/v1/checkQuota/OCIアカウント?serviceName=サービス名
ドキュメントには書いてませんが、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
これもドキュメントに書かれていませんが、startTime
と endTime
による期間指定は必須です。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
こちらも期間指定が必須です。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として出力してくれるようです。利用するにはポリシー設定をすればいいようです。
こちらのほうはまだ試していないので、試せたらまた記事を書きたいと思います。
2019/05/10 追記
実際にUsagereportを試してみました。残念ながら料金取得には使えませんでした。
記事を書いたのでそちらもどうぞ。
おしまいに
いかがだったでしょうか。ここまで出来るようになるまで2か月ほどかかりましたが、ようやくコスト情報を得られるようになりました。使うのに癖があるのと、強めのAdminRoleが必要になるので、普段使いするには少し難しい部分が多いように感じました。
また機会があればREST API系の記事を書きたいと思います。