LoginSignup
5
1

More than 3 years have passed since last update.

Oracle Cloud Account Metering REST APIの使い方 - Compartmentごとの課金情報を取得

Last updated at Posted at 2019-07-30

 Oracle Cloud のMetering REST APIを使用すると、購入したクレジット、使用量、使用コスト、リソース割り当てなど、アカウントに関するサービス情報を取得できます。
 Metering REST APIの使い方、また今回はAPIを使いコンパートメントごとの課金情報を取得する方法について記載します。

以下リンクより参照できます。
・Oracle Cloud Account Metering REST API

Metering REST APIの基本構造

Metering REST APIを使用し、Oracle Cloud のサービスリソースを操作するには、エンドポイントのURIを利用します。

URIは次の形式です。

https://itra.oraclecloud.com/{base_path}/{resource_name}

・base_path:リソースのベースURIです。例えば /metering/api/v1 など指定しますが上記リンク参照です。
・resource_name: 呼び出したいリソース名です。例えばアカウントのリソース使用状況は/usage/AccountIdなどと指定します。
ここまでざっとイメージだけ持てばOKです。

サポートされているメソッド

HTTPメソッド 説明
POST リクエスト本文のJSON形式のデータを使用してオブジェクトを作成します。
GET リクエストURIで指定されたオブジェクトに関する情報を取得します。
PUT リクエスト本文のJSON形式のデータを使用して、オブジェクトの属性を更新します。

今回情報取得なのでGETを使用します。

メディアタイプ

Oracle Cloud Metering APIはapplication/jsonを基本のコンテンツタイプとしてサポートしています。

Metering REST APIで情報取得する際の認証について

 APIを呼び出すには、Oracle Cloudサービスアカウントのユーザー名とパスワードが必要です。
 OCIダッシュボードの 左メニュー より "identity (Primary)" を選択
キャプチャ.PNG

該当ユーザを選択し、「ロール」タブで以下権限が付与されていることを確認してください。
キャプチャ2.PNG

アカウントIDとアイデンティティクラウドサービスIDの確認

API呼び出しに必要な情報を確認します。

Metering REST API 情報取得の実行確認

まずcurlを使ってクラウドアカウントIDを取得してみます。
今まで確認した、以下の情報をあてはめてきます。
・アカウント名
・アカウントパスワード
・アカウントID
・IDCSID

コマンドは以下の形式でとなります。
※<>は使わないです。

curl -X GET -u <アカウント名>:<アカウントパスワード> -H "X-ID-TENANT-NAME:<IDCSID>" "https://itra.oraclecloud.com/itas/<IDCSID>/myservices/api/v1/serviceEntitlements"

改行なしで列挙されるため、とりあえずjqで整えてもよいかと。
curl -X GET -u <アカウント名>:<アカウントパスワード> -H "X-ID-TENANT-NAME:<IDCSID>" "https://itra.oraclecloud.com/itas/<IDCSID>/myservices/api/v1/serviceEntitlements" | jq

アカウントIDに関する何らかの情報がJSON形式で取得できていると思います。
このJSON形式のレスポンスボディ情報もOracle Cloud のMetering REST APIで参照できます。
Metering REST APIを使い他のツールに情報を渡す際などプログラム内で使用すると思います。

またコマンドにパスワードを記載したくなければ。以下のようにパスワードを記載しないことで、パスワード入力が促されます。

curl -X GET -u <アカウント名> -H "X-ID-TENANT-NAME:<IDCSID>" "https://itra.oraclecloud.com/itas/<IDCSID>/myservices/api/v1/serviceEntitlements" | jq
Enter host password for user 'アカウント名':パスワードを入力

次にcurlを使用してクラウドアカウントのリソース使用コストを取得してみます。

curl -X GET -u <アカウント名>:<アカウントパスワード> -H "X-ID-TENANT-NAME:<IDCSID>" "https://itra.oraclecloud.com/metering/api/v1/usagecost/<アカウント名>?serviceName=Compute&startTime=2016-01-02T15:00:00.000&endTime=2016-01-02T15:00:00.000&usageType=DAILY&timeZone=UTC&dcAggEnabled=Y&computeTypeEnabled=Y" | jq

データがないかもしれないですが実行はできたと思います。

OracleCloudAccount Metering REST APIを使いコンパートメントごとの課金情報を取得

それでは本題に入ります。
まずこちら(Oracle公式)より、アカウントのリソース使用コストの取得情報を参照します。
キャプチャ.PNG
 取得のためのbase_pathは /metering/api/v1/usagecost/<アカウントID>/tagged 、
resource_nameとなるクエリパラメータは、computeTypeEnabledからusageTypeまであり、
取得に成功する(200レスポンス)と、accountId、canonicalLink,itemsが表示されることがわかります。

 クエリパラメータのリンクを押すとわかりますが、startTimeとendTimeは必須項目です。
tagasパラメータはパイプ(|)でor句を使うことができます。その他パラメータについても参照して下さい。

※クエリパラメータについて
ドットは%3Aに置き換えられ、イコールは%3Dに、スペースは%20に置き換えられます。
例えばORCL.OCIService=Object Storageの場合は、ORCL%3AOCIService%3DObject%20Storageと入力します。

curlコマンドの例は

curl -X GET \
     -u <アカウント名>:<アカウントパスワード> \
     -H "X-ID-TENANT-NAME:<IDCSID>"  \
     "https://itra.oraclecloud.com/metering/api/v1/usagecost/<アカウントID>/tagged?startTime=2018-03-12T21%3A00%3A00.000Z&endTime=2018-03-12T23%3A000%300T3%3A000%300=HOURLY&timeZone=UTC&tags=ORCL%3AOCIService%3DObject%20Storage&rollupLevel=RESOURCE"

などとなっております。
こちらの情報を参考に特定のコンパートメント名の料金を取得してみます。

curl -X GET -u <アカウント名>:<アカウントパスワード> -H "X-ID-TENANT-NAME:<IDCSID>" "https://itra.oraclecloud.com/metering/api/v1/usagecost/<アカウントID>/tagged?startTime=2019-06-30T15%3A00%3A00.000Z&endTime=2019-7-31T15%3A00%3A00.000Z&timeZone=UTC&UsageType=TOTAL&tags%3DORCL%3AOCICompartmentName%3D<コンパートメント名>" | jq

すると以下のようなjson形式が出力されます。
costsの部分に課金情報が表示されます。

{

        "accountId": "<アカウントID>",
        "items": [{
      "subscriptionId": "xxxxxxx",
      "subscriptionType": "XXXXXXXXXx",
      "serviceName": "XXX",
      "resourceName": "XXXXXXXXXXXXXXX",
      "currency": "JPY",
      "gsiProductId": "xxxxxx",
      "serviceEntitlementId": "xxxxxxxxx",
      "costs": [
        {
          "computedQuantity": x,
          "computedAmount": xxxx.xxxx,
          "unitPrice": xxxx.xxxx,
          "overagesFlag": "X"
        }
      ],
      "startTimeUtc": "2019-06-30T15:00:00.000",
      "endTimeUtc": "2019-07-31T15:00:00.000"
    }
  ],

  ... SeerviceName毎にjson形式でたくさん表示される ...

        CanonicalLink: metering/api/v1/usagecost/<アカウントID>/tagged?startTime=2019-07-01T15:04:05.000&endTime=2019-07-30T15:04:05.000&timeZone=UTC&usageType=TOTAL&tags=ORCL%3AOCICompartmentName%3D<コンパートメント名>" | jq
}

以上になります。
アクセス権限の関係で403エラーなどなる方は、付与された権限やリクエストの内容について見直すといいかもしれません。
こちらの出力情報をプログラムで整えてチャットツールに通知してもいいかもしれないですね。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1