OCI コストレポートの出力　（スケジュール済みレポート機能）

# はじめに
OCIで日々のリソース利用料を確認する際にOCIコンソールを利用されている方も多いと思います。
今回は、都度OCIコンソールにログインしてレポートをダウンロードしなくても、
自分の欲しいレポート形式で保存し、定期的に任意のObject Storageに出力しておくことができる **スケジュール済みレポート**機能を使ってみます。

## 作業の流れ
1. ユーザーへの権限付与
1. スケジュール済みレポート機能で設定をする Object Storage のバケットの作成 (既存のものでも可)
1. 定義済みのコスト分析レポートを出力したい形式にレポートを編集、保存
1. スケジュール済みレポートの作成
1. 自身のPC端末にObject Storageからレポートをダウンロード

### ユーザーへの権限付与
* **スケジュール済みレポート**を使用する上で必要なIAM権限
    * 参照マニュアル：
 [https://docs.oracle.com/ja-jp/iaas/Content/Billing/Concepts/costs.htm#Required](https://docs.oracle.com/ja-jp/iaas/Content/Billing/Concepts/costs.htm)
    * **コストおよび使用状況レポート**機能利用に必要なIAMポリシー
[https://docs.oracle.com/ja-jp/iaas/Content/Billing/Concepts/usagereportsoverview.htm#policy](https://docs.oracle.com/ja-jp/iaas/Content/Billing/Concepts/usagereportsoverview.htm)
    * **スケジュール済みレポート**機能利用に必要なIAMポリシー
 [https://docs.oracle.com/ja-jp/iaas/Content/Billing/Concepts/scheduledreportoverview.htm#scheduledreportoverview__iam_policy_scheduledreport](https://docs.oracle.com/ja-jp/iaas/Content/Billing/Concepts/scheduledreportoverview.htm)


### Object Storage Bucketの作成と事前認証済みリクエストの作成
* プライベートバケットでもパブリックバケットでもどちらでもOK
* 事前認証済みリクエストの作成
    * リクエスト・ターゲット : バケット
    * アクセスタイプ：　オブジェクトの読み取りを許可
    * オブジェクト・リストの有効化　：
      - [x]  チェックを入れる

![00_ObjectStorage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/f6c213e8-9bc5-51b7-5aa5-805355269d5d.png)

* 発行されたURLをコピーして保存しておく
![01_ObjectStorage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/79a2ace6-d91a-66df-fc6b-9c55c728574f.png)


### コスト分析レポートの編集
* OCIのメニュー画面から、**請求とコスト管理** カテゴリの **[コスト分析]** を選択
![00_costanalytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/89d0a341-f1f7-9e91-810f-8ed53f584bcf.png)



* 今回は、定義済みレポートとして用意されている **サービス別コスト** レポートを使い、
グループ化ディメンションで、**サービスとSKU(部品番号)** を表示できるように編集
![01_costanalytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/734793a1-0c14-45b9-a805-261c3b166b39.png)
![02_costanalytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/bfc7314c-ab99-8446-e020-4d8b254dbb28.png)

* **[適用]** をして内容確認後、レポートを **[新規レポートとして保存]** しておきます。
![03_costanalytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/6b63d6c9-f4b2-1a22-9653-1697157218ee.png)
![04_costanalytics.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/b8675810-2934-917c-52be-ac3f68d63221.png)




### スケジュール済みレポートの作成

* OCIのメニュー画面から、**請求とコスト管理** カテゴリの **[スケジュール済みレポート]** を選択
![00_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/58b25f48-ca05-f33c-ce03-540daf9a73a9.png)


* **[スケジュール済みレポートの作成]** を選択
![01_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/5c2deffd-d025-11aa-4f22-05bea7daf00a.png)



    * 名前：任意
    * 保存されたレポート：前段のコスト分析画面で新規レポートとして保存したレポートを選択
![02_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/4acd833d-55c3-ac4c-2aa0-3d020e16bafe.png)


    * 開始日：任意
    * 反復：毎日 /　毎月 / 1回 から選択
    ![02_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/28c8c6d3-16e3-52e8-8955-1b39caebe74d.png)


    * 形式 : csv / PDF　どちらかを選択
    * バケットの ：前段で作成 もしくは既存のバケットを選択
    ![04_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/dcaed134-5ca6-330f-7f33-a114a9399c7f.png)



* **[作成]** ボタンをクリック
![05_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/a3c8b48e-a699-3f9e-221e-8b3d2f70ddef.png)

:::note warn
選択したバケットに適切な権限がない場合は選択ができず、以下のような情報がでます。
*metering_overlay*サービスがバケットに対して書き込みができるようにIAMポリシーを変更する必要があります。
![00_iam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/d3005f6a-b0bc-e5c3-f704-4d0616dab75c.png)

:::

* 作成直後、初回のレポート出力がされるまでは以下のように最終実行ステータスは**不明**となります。
![06_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/f7ee1bc6-4007-055c-a608-455e2cbe0a30.png)



* スケジュールが実行された場合、**成功**ステータスに変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/06e80606-4a61-7260-ea85-9aeb7045a8c8.png)

* ジョブ名をクリックすると出力されたレポート名も確認できました。
![08_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/2e59cc4d-d490-7b68-e459-75130746d676.png)



# curlでレポートダウンロード
この状態で**事前承認済みリクエスト** で発行したURLを使い自分のwindowsのコマンドプロントで自動的に出力されるレポートを取得します。

Object Storageに出力されているレポートの名前をリストして確認
```
curl -X GET  https://objectstorage.ap-tokyo-1.oracle.com/xxxxxxxxxxxxxx/b/costreport/o/
```
実行すると、日付が入ったobject名がリストされるため、ほしい日付のファイル名を指定してダウンロード
![09_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/2a53084f-516e-e2c1-6374-52c63010eb49.png)


```
curl -O https://objectstorage.ap-tokyo-1.oracle.com/xxxxxxxxxxxxxx/b/costreport/o/DailyReport_xxxxxx.csv.gz
```


# 取得したレポートの例
* csvの場合
![07_schedulereport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/80953d72-eb4e-e1b3-c911-b78dda591789.png)



* PDFの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607565/3446e16f-3bb8-101c-48e3-a6b1d7c78be2.png)


# おわりに
今回は手軽にレポートを取得するところまでを試しましたが、
スケジュール済みレポート機能を利用してObject Storageへ出力しておけば、functionサービスなどと連携して、レポートのメール配信なども可能だと思います。
また、コスト管理の効率化という意味だと、Autonomous Databaseを利用したコストと使用量をより柔軟に管理するためのツールなども公開されていますのでぜひ参考にしてください。

* 参考Qiita
    * [OCI] 前回実行時からの差分のコストレポートファイルのみをダウンロードするシェルスクリプトを作って実行してみた　
https://qiita.com/500InternalServerError/items/f34de1bff9e457725547

* 参考Blog
    *  Oracle Cloud Infrastructureのコストと使用量を管理
https://blogs.oracle.com/oracle4engineer/post/ja-manage-your-oracle-cloud-cost-and-usage