IBM Cloud Object Storage (ICOS) の課金詳細を API で取得する


# カスタマーポータルで確認できる情報

## 使用状況

「使用状況の詳細」から、利用量のメトリクスについて確認できます。

![Kobito.tcKPRU.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/6d31da72-fc15-a561-af6c-283c1c56ea51.png "Kobito.tcKPRU.png")

## 課金情報
「請求および使用量＞使用量」から、各サービスインスタンスの課金情報について確認できます。

![Kobito.xgm8h6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/70f62664-9722-bcee-87f3-1dd05df44dd6.png "Kobito.xgm8h6.png")


# API で取得する
上記の情報に相当する情報を、API で取得してみます。

## アカウント ID の取得
アカウント ID の指定が必要なため、以下の方法で取得します。

### アカウント ID の取得 (CLI)
IBM Cloud コマンド `ibmcloud login` でログインした上で、以下のコマンドを実行して取得します。

```
export ACCOUNT_ID=`ibmcloud account show | head -n 5 | tail -n 1 | awk '{print $3}'`
echo $ACCOUNT_ID
```

### アカウント ID の取得 (GUI)

![Kobito.LaUZpw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/a56ecb78-6821-7664-af9d-82e6f6d659a6.png "Kobito.LaUZpw.png")


## リソースインスタンス ID の取得
リソースインスタンス ID の指定が必要なため、以下の方法で取得します。

### リソースインスタンス ID の取得 (CLI)
IBM Cloud コマンド `ibmcloud login` でログインした上で、以下のコマンドを実行して取得します。

```
export RESOURCE_INSTANCE_ID=`ibmcloud resource search Cloud_Object_Storage-z1 | head -n 7 | tail -n 1 | awk '{print $2}'`
echo $RESOURCE_INSTANCE_ID
```

### リソースインスタンス ID の取得 (GUI)

![Kobito.bSuMHo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/12d8767d-08dc-b0ed-1cd8-7232d2b92302.png "Kobito.bSuMHo.png")


## IAM トークンの取得
IBM Cloud コマンド `ibmcloud login` でログインした上で、以下のコマンドを実行して取得します。

```
export ACCESS_TOKEN=`ibmcloud iam oauth-tokens | head -n 1 | awk '{print $4}'`
echo $ACCESS_TOKEN
```

## 請求月の指定
`billingmonth` は `2019-07` などとしてください。

```
export BILLING_MONTH="2019-07"
```

## (Option) リージョンの指定
`region` は `jp-tok` などとしてください。

```
export REGION="jp-tok"
```

## Billing API で確認


```sh:getBillingInfo
curl -X "GET" "https://billing.cloud.ibm.com/v4/accounts/$ACCOUNT_ID/resource_instances//usage/$BILLING_MONTH?resource_instance_id=$RESOURCE_INSTANCE_ID&region=$REGION" \
-H "Authorization: Bearer $ACCESS_TOKEN"
```

```json:result.json
{
    "limit": 30,
    "count": 1,
    "first": {
        "href": "/v4/accounts/039dbe6794084c7cb514a276dd2xxxxx/resource_instances/usage/2019-07?_limit=30&_names=false&region=jp-tok&resource_instance_id=crn%3Av1%3Abluemix%3Apublic%3Acloud-object-storage%3Aglobal%3Aa%2F039dbe6794084c7cb514a276dd2345da%3A74c0783c-c36b-4cc0-80ff-ddf97c0xxxxx%3A%3A"
    },
    "resources": [
        {
            "account_id": "039dbe6794084c7cb514a276dd2xxxxx",
            "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/039dbe6794084c7cb514a276dd2345da:74c0783c-c36b-4cc0-80ff-ddf97c0xxxxx::",
            "resource_group_id": "ab4ffab2732e4853966ef2a6aa0xxxxx",
            "month": "2019-07",
            "pricing_country": "USA",
            "billing_country": "USA",
            "currency_code": "USD",
            "plan_id": "744bfc56-d12c-4866-88d5-dac9139xxxxx",
            "resource_id": "dff97f5c-bc5e-4455-b470-411c3edxxxxx",
            "billable": true,
            "pricing_plan_id": "billable:v4:744bfc56-d12c-4866-88d5-dac9139xxxxx:jp-tok:1551398400000:",
            "pricing_region": "jp-tok",
            "region": "jp-tok",
            "usage": [
                {
                    "metric": "STANDARD_STORAGE",
                    "unit": "GIGABYTE",
                    "price": [
                        {
                            "unitQuantity": "1",
                            "tier_model": "Step Tier",
                            "price": 0.0249,
                            "quantity_tier": "499999"
                        },
                        {
                            "unitQuantity": "1",
                            "tier_model": "Step Tier",
                            "price": 0.0226,
                            "quantity_tier": "999999999"
                        }
                    ],
                    "quantity": 4.499684461392462,
                    "cost": 0.1048136177281128,
                    "rated_cost": 0.1048136177281128,
                    "rateable_quantity": 4.499684461392462,
                    "discounts": []
                },
                {
                    "metric": "STANDARD_BANDWIDTH",
                    "unit": "GIGABYTE",
                    "price": [
                        {
                            "unitQuantity": "1",
                            "tier_model": "Step Tier",
                            "price": 0.14,
                            "quantity_tier": "50000"
                        },
                        {
                            "unitQuantity": "1",
                            "tier_model": "Step Tier",
                            "price": 0.11,
                            "quantity_tier": "150000"
                        },
                        {
                            "unitQuantity": "1",
                            "tier_model": "Step Tier",
                            "price": 0.08,
                            "quantity_tier": "999999999"
                        }
                    ],
                    "quantity": 0.00021298881620168686,
                    "cost": 0.00002981843426823616,
                    "rated_cost": 0.00002981843426823616,
                    "rateable_quantity": 0.00021298881620168686,
                    "discounts": []
                },
                {
                    "metric": "STANDARD_CLASS_A_CALLS",
                    "unit": "API_CALLS",
                    "price": [
                        {
                            "unitQuantity": "1000",
                            "tier_model": "Granular Tier",
                            "price": 0.005,
                            "quantity_tier": "1"
                        }
                    ],
                    "quantity": 7,
                    "cost": 0.000035,
                    "rated_cost": 0.000035,
                    "rateable_quantity": 7,
                    "discounts": []
                },
                {
                    "metric": "STANDARD_CLASS_B_CALLS",
                    "unit": "API_CALLS",
                    "price": [
                        {
                            "unitQuantity": "10000",
                            "tier_model": "Granular Tier",
                            "price": 0.004,
                            "quantity_tier": "1"
                        }
                    ],
                    "quantity": 32,
                    "cost": 0.0000128,
                    "rated_cost": 0.0000128,
                    "rateable_quantity": 32,
                    "discounts": []
                }
            ]
        }
    ]
}
```


# さいごに
API で取得できた課金情報についても、最新情報の反映に2時間程度かかりますが、課金Tier、課金単位、単価、リピータブルコストまでわかるので、より詳細に把握できますね。

また、課金情報は、「サービスインスタンス＞リージョン」の単位でまとめられてしまうので、同じリージョンを使いつつ課金情報を分けて取得したいと考えている方は、サービスインスタンス（リソースインスタンス）ごとに分けて作成してください。

# 参考情報

- [IBM Cloud Usage Reports - IBM Cloud API Docs](https://cloud.ibm.com/apidocs/metering-reporting)