はじめに
以前、AWS利用料のメールが見て、思っていたよりも高くてビックリしたことがあります。調べてみたところ勉強用に立ち上げたRDSを消し忘れていました。今は会社のアカウントを使わせてもらっているので自分の財布に直接響くことはなくなりましたが同じようなことを起こさないために消し忘れてないかチェックすべきポイントをまとめます。
1.インスタンス
当たり前ですがまずは不要なインスタンスを停止もしくは削除します。もちろんRedshift、ElastiCacheのクラスタ、Kinesisのストリームなども含みます。停止するのを忘れた時に自動でシャットダウンするようにしておくのもいいでしょう。私は以下の記事が参考になりました。
【AWS】CloudWatch入門/使っていないEC2を自動シャットダウンしよう
以下の記事のように起動する際に最初から1日で止まるように設定しておくのも有効だと思います。 5秒でAmazon Linuxを起動して1日で殺すRubyスクリプトを書いた
2.Elastic Load Balancing
忘れがちですがELBも起動しているだけで料金がかかります。不要であれば削除しましょう。東京リージョンで1時間あたり$0.027かかります。1カ月間(30日)、1台消し忘れると$0.027×24×30 で約19.4ドルかかります。
3.Elastic IP
起動中のEC2に紐づいていないElastic IPは料金がかかります。東京リージョンで1時間あたり$0.005かかります。例えば5つのIPアドレスを1カ月解放し忘れた場合、 0.005×5×24×30 で18ドルになります。 Elastic IPは紐づいているEC2をTerminateしても解放されないので気をつけましょう。
4.Amazon Elastic Block Store (EBS)
利用していないEC2をSTOPした場合でもEBSの利用料はかかります。EC2に比べれば少額ですが数が多いと意外とお金がかかります。以下の料金表を見るとAmazon EBS General Purpose (SSD)の場合、東京リージョン1カ月で1GBあたり$0.12かかるので100GBであれば12ドルになります。複数のEC2インスタンスを停止状態にしているとこれ位すぐに超えてしまうと思います。EC2は停止していればほとんどお金かからない、みたいなイメージがあるかもしれませんがそんなことはありません。使わないEC2インスタンスはStopではなくTerminateしてしまいましょう。
5.EBSスナップショット
EBSのスナップショットに関してです。手動でとったスナップショットを不要になってもそのまま放置することはよくありそうです。スナップショット初回はすべてのデータが保存されますがその後は変更部分のみ保存されます。初回に関しても空のブロックを保存しないのでボリュームサイズよりかは小さくなるようですが不要であれば忘れずに削除しましょう。以下のページによるとAmazon S3に保存されたEBSスナップショットは1カ月で1GBあたり$0.095かかるようです。
6.Amazon S3
これも当たり前ですが不要なファイルを削除します。ELBなどのログが自動的に出力されたりもしますが、S3にはLifeCycleという決まった日数で削除したり、Amazon Glacierに移動させたりする機能があるので、これらの機能を利用してもいいでしょう。
Amazon S3でオブジェクトの有効期限を設定できるようになりました Amazon S3のGlacierアーカイブ機能を活用する
7.普段使っていないリージョン
いつもは東京リージョンを使っているユーザがたまにLambdaなど東京では使えないサービスを使うために一時的に別のリージョンに切り替えてManagement Consoleを使ったりすることがあると思います。例えばその際にKinesisやRedshiftを起動して連携を試したとします。その後リソースを消すのを忘れて東京リージョンに戻してしまった場合、気付かずに放置してしまう可能性が高いです。普段使っていないリージョンのリソースを使った際はこの点に気をつけましょう。
Trusted Advisorを使ってチェックする
AWSにはTrusted Advisorというサービスがあります。ビジネスまたはエンタープライズサポートに加入している場合、このサービスを使えば以下の6つの項目をチェックしてくれます。見ての通り上記のチェック項目もいくつか含まれています。この6つの項目は固定でこれ以外のElastiCache、DynamoDB、Redshift、Kinesisなどのサービスに関してはアイドル状態はチェックできませんので注意しましょう。
- Amazon RDSアイドル状態のDBインスタンス
- Amazon Route 53 Latency Resource Record Sets
- アイドル状態の Load Balancer
- 使用率の低いAmazon EC2 Instances
- 利用頻度の低いAmazon EBSボリューム
- 関連付けられていない Elastic IP Address
insightwatchを使ってチェックする
弊社のinsightwatchというサービスを紹介します。insightwatchも指定した時間に指定したサービスが起動していた場合にメールで通知します。対象となるサービスはまだEC2とRDSだけですが今後増やしていく予定です。チェック対象のリージョンやサービスを指定したり、複数のAWSアカウントをチェックすることができます。不要なインスタンスを見つけた場合はその時点で即停止できる、といった特徴があります。
私は会社に用意してもらった自習用アカウントを持っていますが、12時間ごとにチェックして不要なインスタンスが起動していた場合に停止し、メールで通知するように設定しています。たまに消し忘れた時に通知されるのでとても助かっています。
URLは以下になります。「新規登録する」というボタンを押すとサインインの画面になります。
AWSの定型作業スケジュール実行サービス・insightwatch(インサイトウォッチ)ジョブ機能 by クラスメソッド
ジョブの作成は以下の手順で行います。
1.以下の手順でサインアップなどを行ってください。ユーザガイドはこちら。
2.お持ちのAWSアカウントと連携します。ユーザガイドはこちら 。
3.リソースをチェックするタスクを作ります。ユーザガイドはこちら。
4.最後にジョブを作成し時間を指定します。ユーザガイドはこちら。
またinsightwatchには曜日や時間を設定してEC2やRDSの起動停止をする機能があります。こちらも併用することでAWSの費用をさらに削減できますのでお試しください。ユーザガイドは以下です。
EC2インスタンスの起動・停止タスクの作成 DBインスタンスの起動・停止タスクの作成
最後に
以上になります。AWSは使いたい分だけサーバを使うことができ、とても便利なサービスですが業務で使う際にうっかりサーバを消し忘れてしまうと会社に損害を与えてしまう可能性があることも忘れてはいけませんね。今後も上記のことに気をつけながら利用していきたいと思います!