目的
AWS のサーバー費を少しでも安くする
概要
例えば m5.large の場合、0.124USD/時間、年間約 1086.24USD (約12万円)、リザーブドインスタンスで年額前払いだと 706USD (約8万円)です。(※純粋なインスタンス料金のみの計算)
土日祝を除く 2019年の平日は244日、その内営業時間(営業時間の前後1,2時間もプラス)のみを動かせばいいと考えると 年間 244日 * 12時間 = 2688時間 稼働させればOKという計算になる。約 333USD (約3 〜 4万円) が年間費用となるため、約 1/3 に金額が抑えられます。 リザーブドインスタンスよりはるかに安い!
やすくするためにはリザーブドインスタンスを買うという方法もあるが、以下の課題があり、たまたま 定期的に EC2・RDS インスタンスを停止・起動する仕組みの CloudFormation テンプレート という記事を見つけ、これをカスタマイズして導入してみた。
- 開発用の環境で全く使っていないタイミングがある
- 適宜インスタンスタイプやインスタンスファミリーを変更して検証するケースがある
- 1年も使い続けない一時的なインスタンスである
- リザーブドインスタンスの購入タイミングに神経を使う対象のインスタンスを少しでも減らしたい
使っている上で更に以下のような欲がわいてきた。
- 祝日も動かしたくない
- AutoScaling 対象の EC2 インスタンスも 0 台にして、無駄なコストをおとしたい
これらを満たすために、もともと参考にしていた記事の CloudFormation をカスタマイズしてみました。
修正した箇所
土日祝対応
- Google カレンダー 提供の祝日リストから祝日一覧を取得し、lambda 上で本日が祝日であるか判定処理を追加した
AutoScaling グループ対応
- Lambda の IAM role に AutoScaling の設定参照、更新権限を追加
- AutoScaling グループの設定に対して、インスタンス数を 0 <> 1 と切り替わるようにした
該当ソース
Github に公開 していますので、使ってください。使い方は README.md に書いています。
※ fork & PR 歓迎