コストと使用状況レポートを使ってAWSで望まぬ散財を防止しよう！

# TL;DR
#### AWSを勉強するときには、望まぬ散財を防止するためにも下記の点に注意しよう！
 - アカウントを作って何かリソースを使ったなら、__定期的にコンソールにログイン__ して「コストと使用状況」の欄を確認しよう！

 - 「コストと使用状況」の欄や「Cost Explore」でもわからない細かいコストは、__コストと使用状況レポート__ をS3バケットで受け取って確認しよう！
[AWS コストと使用状況レポートとは(awsユーザーガイド)](https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/what-is-cur.html)

# これは何？
記事を閲覧いただきありがとうございます！
早速ですが、皆さんは「コストと使用状況レポート」というものを使用していますか？
もしくは、CloudWatchを使用して料金アラートを設定していますか？
私は後者を実施していませんでした...

そんな私の一か月で$60を溶かした話と、
それを解決するときに使用したコストと使用状況レポートについて紹介したいと思います。

ps:「コストと使用状況レポート」自体は散財を防止するものではないので若干タイトル詐欺っぽい気もしますが、いいタイトルが思い浮かばなかったです...
私が未熟なのもあり、記事自体に間違いがございましたらコメント等でご指摘いただきたいです。


# 何があったか？

私はそこらにいるただの専門学校生です。
ある休日、AWSのコンソール画面を約1か月ぶりに開いたらとんでもないことになっていました。
最後にAWSを使用したのは、あるグループ課題でアプリを公開した時です。
さて、私の身に何が起こったのでしょうか？

...タイトルで察せる方もいることでしょう。
なんと！この一か月で！ __$60ほどを消し飛ばしてしまった__ のです！

![aws_cost_0201_0331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/084efbef-3de3-fb7a-9f53-9a5fff14037c.png)
> (2/1~3/31くらいの期間のコストエクスプローラーのスクショ) 



 2/10～3/10くらいの期間で$60分のクレジットを消し飛ばし、発覚したのが3/15くらいです。
幸いといいますか、JAWS-UGというコミュニティが開催したハンズオンに参加した時や、AWSが定期的に開催するカンファレンスのアンケートに回答した時にもらったクレジットのおかげで実費はほとんどかかりませんでした。
(これが油断を生んだともいう...)

# コストと使用状況レポートとは何か？
一言でいうと、__CostExploreだと詳細がわかりにくい毎日$0.4とかの課金の内訳を見れる！__ です。
雑な説明ですね。

もうちょっと詳しいことを説明しようとすると、自分の説明では長くなりそうなのでChatGPTさんに聞いてみます。


へいSiri！(違う)
AWSのコストと使用状況レポートとは何ですか？
詳しく小学生でもわかるように説明してください。
 > AWSのコストと使用状況レポートは、AWSで利用される各種サービスの利用料金や使用状況に関するレポートです。AWSアカウントのオーナーは、このレポートを利用してAWSサービスの使用状況を監視し、コストを把握することができます。
 > 
 > AWSのコストと使用状況レポートには、以下のような情報が含まれています。
 > 
 >  - 利用されたAWSサービスの一覧
 >  - 各サービスの使用量や料金
 >  - 利用料金の累計
 >  - 利用料金の予測
 >  - 請求明細
 > 
 > また、AWSでは、請求アラートという機能を提供しています。請求アラートを設定することで、あらかじめ指定したコストや使用量を超えた場合に、アラートメールが自動的に送信されるようになります。この機能を使うことで、予期せぬ高額請求を防止することができます。
 > 
 > AWSのコストと使用状況レポートや請求アラート機能を利用することで、AWSサービスの使用状況を把握し、コストを管理することができます。
 >
 
おぉ！流石ですね！わかりやすいうえに別の機能についても説明してくれている！
まぁ、「AWSサービスの使用状況を把握し、コストを管理することができます。」らしいですね。

もっと詳しいことは、こちらの公式ガイドを見るといいかもですね。
[AWS コストと使用状況レポートとは(awsユーザーガイド)](https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/what-is-cur.html)

# 設定方法

それでは、レポートを受け取ってみましょうかね？
レポートを受け取るためには、レポートを受け取るためのS3バケットを用意してあげないといけません。
そして、設定しても実際にレポートが届くまでには最大で1日待ってあげないといけないといけません。
設定の仕方自体はこちらの公式ガイドを確認すると簡潔に載っているのですが、文章しかなく、ギリゆとりな自分には少しとっつきにくく感じました。
[コストと使用状況レポートを作成する(awsユーザーガイド)](https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/cur-create.html)

「画像付きの説明が欲しい！」という方向けに、ここから画像付きで設定していこうかと思います！


 > [1.請求とコストマネジメントコンソールにサインインします。](https://console.aws.amazon.com/billing/home#)

大前提として、AWSのアカウントが必要です。
もちろん登録していますよね？
そしてサインイン(ログイン)しましょう！

 > 2.ナビゲーションペインで、[Cost & Usage Reports] (コストと使用状況レポート) を選択します

ログイン後の画面の左側に下の画像のようなメニューがあると思います。
上から6番目の「Cost & Usage Reports」をクリックしましょう！
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/4ffdb3ae-05f1-65a0-8d35-a23b4f43184a.png)

 > 3.[Create report (レポートを作成)] を選択します。

画面中央の上部にオレンジ色のボタンがあると思います。
それですね。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/04c562b8-27c5-9775-9213-0111a8d4aff5.png)

 > 4.[レポート名] に、レポートの名前を入力します。
 > 5.[Additional report details] で、[Include resource IDs] を選択して各リソースの ID をレポートに含めます。
 > 6.[Data refresh settings] (データ更新設定) で、請求額の確定後に AWS で返金、クレジット、またはサポート料金をアカウントに適用した場合に AWS コストと使用状況レポートを更新するかどうかを選択します。レポートが更新されると、新しいレポートが Amazon S3 にアップロードされます。
 > 7.[Next] (次へ) を選択します。

私は「test」と名前を付けました。
わかりやすい名前で、ほかのレポートと名前被りしておらず、
スペースなしの英数字と「!-_.*'（）」の記号のみであれば何でもいいです。

「Additional report details」は「レポートの明細項目」と書いてある欄ですね。
追加の明細項目をお好みで追加しましょう。


「自動的に更新」はもちろんチェックを入れておきましょう。
デフォルトでついているはずです。

名づけしたら「次へ」のボタンをクリックしましょう。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/f581b98b-03c6-2858-345d-7498c33e1a49.png)

 > 8.[S3 バケット] で、[設定] を選択します。
 > 9.[S3 バケットの設定] ダイアログボックスで、次のいずれかを実行します。
 > - ドロップダウンリストから既存のバケットを選択し、[Next (次へ)] を選択します。
 > - バケット名と、新しいバケットを作成するリージョンを入力し、[Next (次へ)] を選択します。
 > 
 > 10.バケットポリシーを確認し、[I have confirmed that this policy is correct] (このポリシーが正しいことを確認しました)を選択した後、[Save] (保存) を選択します。

次の画面に進むと、このような画面になっていると思いますが、画像内で印をつけているボタンをクリックしましょう。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/18f598b4-ab2b-b540-3890-24992d75ce4c.png)

画面内にダイアログボックスが出てくると思います。
設定していきましょう！

今回はレポート用のバケットを作成していこうと思うので、最初の項目はそのままにします。
バケット名は、これがレポートを受け取る用のバケットだとわかる名前にしましょう。
私はこれを作成した後に削除するので、「testb」という名前で設定しました。

リージョンとは、どの地域かを指します。
特にこだわりがなければそのままで大丈夫です。

設定が終われば、一番下のチェックボックスにチェックを入れて、右下の「保存」ボタンをクリックしましょう。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/0b12e144-cbb3-0a56-07ba-180c6416259c.png)

ps:なぜかそのバケットは存在しているというエラーを吐かれたので既存のバケットに設定しました。
既存のバケットを選択した場合はこのような表示になるハズです。
もちろん、一番下のチェックボックスにチェックを入れておきましょう。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/58a4f354-3dc1-08d2-aa1f-c5e63b2e481b.png)


 > 11.[Report path prefix (レポートパスのプレフィックス)] に、レポート名に付加するレポートパスのプレフィックスを入力します。
 > 12.[Time granularity] で、次のいずれかを選択します。
 > - Hourly: レポートの明細項目を 1 時間ごとに集計する場合に選択します。
 > - Daily: レポートの明細項目を 1 日ごとに集計する場合に選択します。
 > - Monthly レポートの明細項目を 1 か月ごとに集計する場合に選択します。
 > 
 > 13.[Report versioning (レポートバージョニング)] で、レポートの各バージョンでレポートの以前のバージョンを上書きするのか、以前のバージョンに加えて配信するのかを選択します。
 > レポートを上書きすると、Amazon S3 ストレージコストを節約できます。新しいレポートバージョンを配信することで、時間の経過とともに請求データの監査性を向上させることができます。
 > 14.を使用する場合次のレポートデータ統合を有効にするで、Cost and Usage Report を Amazon Athena、Amazon Amazon Amazon Amazon Amazon Amazon Amazon Amazon Athena、Amazon Redshift Amazon Amazon Amazon Amazon QuickSight。レポートは、以下の形式で圧縮されています。
 > - Athena: parquet 形式
 > - Amazon Redshift または Amazon QuickSight: .gz 圧縮
 > 
 > 15.[Next] (次へ) を選択します。

無事にダイアログボックスが閉じましたか？
それでは、S3パスプレフィックスとかいうものを設定しましょう。
要するに、「レポートを格納するフォルダの名前」です。

私が以前作成したレポートの階層構造です。
この、「reportsaaa」がバケット名、「reports」がパスプレフィックス、「test」がレポート名です。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/e7cffa24-1744-c513-12b6-21a6472b2a3e.png)

そしたら、お好みで「レポートデータ時間の詳細度」と「レポートバージョニング」の設定をしましょう。
おすすめは、「日別」と「新しいレポートバージョンを作成」です。
レポートバージョニングが「新しいレポートバージョンを作成」だと定期的にレポートを削除してあげないと無駄なコストがかかってしますのですが、古いレポートを後からでも閲覧・ダウンロードできます。
手動でレポートを閲覧する場合はこちらの設定にするのをお勧めします。

「レポートデータの統合」の設定もお好みでどうぞ。

最後に圧縮タイプの選択ですが、私はメインPCがWindowsな人なので「ZIP」形式に指定しています。

ここまで大丈夫でしょうか？
よさそうなら「次へ」のボタンをクリックして設定の確認をしましょう。
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/d6a9e8c1-6f20-a36e-7bba-c415f893c52a.png)

> 16.レポートの設定を確認したら、[Review and Complete (確認して完了)] を選択します。

そのままですね。
設定を見返して、不備がなさそうであれば「レポートの作成」ボタンをクリックしましょう。

![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/7ca6296c-c0cc-54c0-0e95-d805eb5a649b.png)


すると、元の画面に戻り新しいレポートが表示されているはずです。

レポートを確認したい場合は、S3のバケットを見に行きましょう。
レポートの作成を設定した時点で新しいバケットが作成されているはずです。
(私の場合は、過去に作成したバケットと、「testbaaaa」が作成されています。)

![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/b12b12ab-8f83-5bf0-7cd8-f55fda38db67.png)


最大24時間後になると新しいレポートが作成されるはずです。
私の場合はこのzipファイルですね。
これをダウンロード解凍してあげると、csvファイルが出てきます。
そのcsvファイル内の「unblendedcost」だったりの列から詳細なコストが確認できます。
(見方については需要があれば別記事を書くかもです)
![temp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739861/e7cffa24-1744-c513-12b6-21a6472b2a3e.png)

レポートがいらなくなったら、
「[Cost & usage reports](https://us-east-1.console.aws.amazon.com/billing/home#/reports)」から「レポートの削除」と「[S3](https://s3.console.aws.amazon.com/s3/buckets)」から「S3バケットの削除」でお掃除完了です！


# 未然に防ぐにはどのような対策があったか？
記事の最初の方で少し出てきた __CloudWatch__ という用語ですが、このサービスを使用すると、__一定以上の金額を使用した場合にアラートを受け取る__ ことができるようになります！

存在自体は知っていましたが、当時の自分はめんどくさがって設定していませんでした。
愚かですね。

他にも、__自動シャットダウン__ を有効にすることも１つの手段として考えられたかと思います。
しかし、授業課題として一定以上の期間は公開しないといけなかったので、不意にシャットダウンされる可能性のあった自動シャットダウンは有効にしませんでした。

# さいごに
拙い文章でしたが、ここまで閲覧いただきありがとうございました！
これからAWSを利用する皆さんが少しでも望まぬ散財をしないことをお祈りいたします。