はじめに
以前、AWS利用料のメールが見て、思っていたよりも高くてビックリしたことがあります。調べてみたところ勉強用に立ち上げたRDSを消し忘れていました。今は会社のアカウントを使わせてもらっているので自分の財布に直接響くことはなくなりましたが、同じことを起こさないために消し忘れたリソースがないか自動でチェックするようにしています。私が使っているツールを紹介します。
お使いの開発環境などで無駄なリソースが残っていないかチェックしてみてください。
チェックしたい主なリソース
EC2
まずはEC2インスタンスです。30日間消すのを忘れると、どの位かかるのか例をいくつか挙げます。東京リージョン、オンデマンド、Linuxの場合です。microインスタンスって今こんな安いんですね。
インスタンスタイプ | 料金 |
---|---|
t3.micro | 約9.8ドル |
m5.large | 約89.3ドル |
c5.large | 約77.0ドル |
EC2を停止していてもEBSの料金が発生します。ストレージはあまり気にされてない方多いと思いますが、数が多いと結構金額膨らむので注意しましょう。例えば20GBのEBSが10台あると1か月間で24ドルほどかかります。
消し忘れのチェックとは別に平日の勤務時間のみ利用する場合はそれ以外の時間は停止しておくことでコストを抑えられます。1週間で168時間(24×7)かかるところ週5日10時間だけ起動すれば、1/3以下になりますね。以前、夜間と土日休日に停止させるLambdaファンクションを作ってみたことがあります。興味のある方は以下の記事をご覧ください。
[Java] EC2を朝起動して夜間と土日祝日は自動的に停止状態にするLambdaファンクション
RDS
RDSも停止できるようになったので必要な時間のみ起動することでコストを抑えられます。ただ、RDSの場合は停止して7日たつと自動で起動します。DBインスタンスを停止したが削除するのを忘れてしまい料金がかかってしまったということも多そうです。
一時的に Amazon RDS DB インスタンスを停止する
30日間消すのを忘れるとどの位かかるのか例をいくつか挙げます。東京リージョン、オンデマンド、シングルAZ、MYSQLの場合です。
インスタンスタイプ | 料金 |
---|---|
db.t3.micro | 約18.72ドル |
db.m5.large | 約169.2ドル |
db.r5.large | 約205.2ドル |
ELB
私は以前、社内のAWSリソースの無駄遣いをチェックしていましたが、その際に消し忘れでとても多いのがELBでした。1台はそれほど高くないのですが、停止もできないので常につけた状態になり数が多いと意外と高くつきます。ALBを東京リージョンで1台30日間消すのを忘れた場合の料金は18ドルほどになります。(使われてない場合)
Elastic IP
起動中のEC2に紐づいていないElastic IPは料金がかかります。東京リージョンで1時間あたり$0.005かかります。例えば5つのIPアドレスを1カ月解放し忘れた場合、0.005×5×24×30 で18ドルになります。Elastic IPは紐づいているEC2をTerminateしても解放されないので気をつけましょう。
ツールを使ってチェックする
1.Trusted Advisorを使ってチェックする
まずはTrusted Advisorです。あまり使われていないリソースがある場合にアラートが通知されます。毎週、メールで通知することもできます。私はElastic IPとEBSはTrusted Advisorで定期的にチェックしています。Trusted Advisorに関しては以下の記事が参考になりました。
Trusted Advisor ベストプラクティス (チェック)
2.Lambdaファンクションを使ってチェックする
次にLambdaファンクションを作成しチェックする方法があります。Lambdaであれば実行時にしか費用が掛からないのでコストを最低限に抑えることができます。Trusted Advisorにないサービスを監視したり、チェックの頻度など条件などを自由に設定できるメリットがあります。
実装したくない方は以下のページにCloudFormationテンプレートがありますので、こちらを試してみてください。これはTrusted Advisorのように使用量は見ておらず、指定した時間に対象のリソースが起動していればメールを送信してくれる、といったものです。チェックする時間とメールアドレスを指定するだけなので簡単です。DynamoDBやElastiCacheなどTrusted Advisorにないサービスもチェックしてくれます。Redshiftは一番小さいクラスターでも時間単位の料金高めなのでTrusted Advisorで警告された時にはすでに結構料金がかかっていた、ということもあるかと思います。これはCloudWatchイベントを調整すればチェックの頻度は変えられますのでRedshiftを使う場合も安心です。指定する時間は日本時間ではなくUTCで指定するので注意してください。
指定した時間に対象のリソースを起動していると以下のようなメールが来ます。
3.insightwatch(インサイトウォッチ)を使ってチェックする
最後に弊社のinsightwatchというサービスを紹介します。insightwatchも指定した時間に指定したサービスが起動していた場合にメールで通知します。対象となるサービスはまだEC2とRDSだけですが今後増やしていく予定です。チェック対象のリージョンやサービスを指定したり、複数のAWSアカウントをチェックすることができます。不要なEC2、RDSがあった場合は簡単に即停止できる、といった特徴があります。
私は会社に用意してもらった自習用アカウントを持っていますが、12時間ごとにチェックして不要なインスタンスが起動していた場合に停止し、メールで通知するように設定しています。たまに消し忘れた時に通知がきてとても助かっています。
URLは以下になります。「新規登録する」というボタンを押すとサインインの画面になります。
AWSの定型作業スケジュール実行サービス・insightwatch(インサイトウォッチ)ジョブ機能 by クラスメソッド
ジョブの作成は以下の手順で行います。
1.以下の手順でサインアップなどを行ってください。ユーザガイドはこちら。
2.お持ちのAWSアカウントと連携します。ユーザガイドはこちら 。
3.リソースをチェックするタスクを作ります。ユーザガイドはこちら。
4.最後にスケジュールを指定してジョブを作成します。ユーザガイドはこちら。
またinsightwatchには曜日や時間を設定してEC2やRDSの起動停止をする機能があります。こちらも併用することでAWSの費用をさらに削減できますのでお試しください。ユーザガイドは以下です。
EC2インスタンスの起動・停止タスクの作成 DBインスタンスの起動・停止タスクの作成
最後に
使っているチェックツールの紹介は以上になります。insightwatchのジョブ機能は2019年7月末で提供終了になりますが、それまではどなたでも無料で利用できますので是非お試しください。8月以降も継続してご利用になりたい場合は弊社のMembers プレミアムプランというサービスへの加入をぜひご検討ください。