AWSを活用したコスト削減のためのリアーキテクチャ事例
はじめに
Septeni Japan株式会社でプロダクト開発&セキュリティエンジニアの市原と申します。チームとしては、インフラエンジニアチームとして、各プロダクトチームのインフラであったり、セキュリティ、そしてコスト部分の管理を行っています。昨今の円安市況で当社のAWSコストも増加傾向にあった為、現在はこのAWSコストの無駄を圧縮する為の動きを主に行っています。今回は、私が関わる事となった小規模プロダクトのコスト圧縮の話を紹介させて頂きます。
前提
対象AWSシステムの概要
サーバー構成としては、非常にシンプルで小規模な構成となっています。EC2をAPIサーバーとし、Google SpreadSheetのマクロ(ボタンによりユーザーが任意のタイミングで実行)やGoogle Apps Script(以降GAS)の定期トリガーからのリクエストを処理するというものです。
問題点と解決の方向性
この構造は、portこそ一般的なものを使用してはないものの、受け付けるIPはGASの特性上、IPを固定にできない為、全開放とせざる追えず、セキュリティリスクを抱える状態となっていました。
また、システムの利用者の整理を行い、SpreadSheetのマクロ実行は利用者が少ない為、機能提供を停止する判断を行いました。
その為、GASで行っていたバッチ実行を、AWS内部に移管可能となり、今回のアーキテクチャ再構築の案が出てきました。
改善前のコスト
コスト面については下記の通りです。改善後のコストについては後述します。
・EC2
インスタンスタイプ: t2.medium × 1台
= 0.0464USD/時間 × 24時間 × 30日 × 160円/ドル
= 5,345円
・EBS
ボリュームタイプ: gp2 × ストレージ容量
= 0.12USD/GB × 20GB × 160円/ドル
= 384円
・合計
EC2 + EBS = 5,345円 + 384円 = 5,729円/月
改善案
アーキテクチャ観点
改善案1: EC2インスタンスのサイズダウン + インスタンスの稼働時間削減
このプランは実行環境が変わらないので、コードの修正を余り必要とせずに移管できるのがメリットですが、インスタンスの稼働時間を調整する為に、EventBridgeで設定を行う必要があります。また、EC2のセキュリティ&脆弱性対策は別途行う必要があります。
改善案2: Lambda + EventBridgeへ変更
このプランはServerless Frameworkを使って、Lambda + EventBridgeでバッチ処理を実行するものです。もともとのコードがNode.js製のExpressを利用したAPIサーバーで動いていた為、Lambdaで動かすために、コードを変更する必要がありました。
コスト観点
改善案1
・EC2
インスタンスタイプ: t4g.medium × 1台
= 0.0336USD/時間 × 9時間 × 5日 × 4週間 × 160円/ドル
= 6.048USD × 160円/ドル
= 967円
・EBS
ボリュームタイプ: gp2 × ストレージ容量
= 0.12USD/GB × 20GB × 160円/ドル
= 384円
・合計
EC2 + EBS = 967円 + 384円 = 1,351円/月
改善案2
・lambda
リクエスト数
= 4回/時間 × 9回/日 × 5日/週 × 4週間/月
= 720リクエスト
GB秒
= 720リクエスト × 平均3.78分/回 × 60
= 163,296GB秒
■期間料金
期間料金
= 0.0000667USD/GB秒 × 163,296GB秒 × 160円/ドル
= 11USD × 160円/ドル
= 1,760円
■リクエスト料金
100万件までは0.2USDなので
0.2USD × 160円/ドル
= 32円
■合計
期間料金 + リクエスト料金 = 1,760円 + 32円 = 1,792円/月
コスト観点では、改善案1の方がメリットがありました。
採用した案
以下の2点から、コストでは少しかかりますが、改善案2を採用しました。
- 技術的にServerless Frameworkが得意であった
- EC2のセキュリティ&脆弱性対策を別途行うのが面倒
それでも
改善前: 5,729円/月
改善後: 1,792円/月
なのでかなり無駄な状態であったものを改善できたかと思います。
最後に
今回は小規模プロダクトのコスト圧縮の例として紹介させて頂きましたが、別のプロダクトではS3やEBSの不要リソースの整理であったり、EC2の不要な時間帯の停止処理などを行うことで$4,500以上のコスト圧縮を実現しています。
開発エンジニア目線では、ついついアーキテクチャ構造やコードの中身などへ目線が向いてしまいますが、コスト圧縮も開発エンジニアが関われる重要な仕事だと思います。これを機会にコストに意識を向けてみるのも良いかもしれません。
Discussion