エンジニアレポート

Withコロナ時代におけるインフラコスト最適化 〜 AWS EC2、RDS版

2020年06月16日 AWSEC2SavingPlans

こんにちは。データスタジアムの菅です。

1か月以上続いた首都圏の緊急事態宣言も5月の終わりに解除され、徐々に日常を取り戻しつつあるでしょうか。
プロ野球やJリーグの再開も発表され、弊社も準備に追われています。

ただし、完全にコロナ以前の状態にすぐに元通りというわけにはなかなかいかないのが実情で、スポーツ業界はもちろん、様々なビジネスにおいてしばらくは我慢の時となりそうです。

そうなると、まずは「コスト削減」というのが命題になってくると思います。
システム開発、運用においてもこれは避けて通れません。

ということで、今回は特にAWSのEC2、RDS周りのコスト最適化を探っていきたいと思います。

AWSのコストを最適化する方法

AWSのコストを最適化(削減)する場合、以下の4つが考えられると思います。

  • Reserved Instances(リザーブドインスタンス)
  • Savings Plans(セービングプラン)
  • Instanceサイズの最適化
  • 停止する

順に見ていきましょう。

Reserved Instances

最もポピュラーな方法ではあると思いますが、ある程度安定&長期稼働が見込めるシステムの場合は、Reserved Instances(RI)を購入してしまうのが手っ取り早いでしょうか。
所謂、オンデマンドインスタンスの割引が受けられるサービスですね。前払いで1年~3年分を支払うと割引率がさらに大きくなります。
最大で70%程度の割引になるので、検討してみる価値はありますね。
https://aws.amazon.com/jp/ec2/pricing/reserved-instances/

Savings Plans

昨年発表された新しいコストモデルがSaving Plansです。一定の利用料(使用量)を事前にコミットすることによって割引を受けられるサービスになります。

例えば、10USD / hourのインスタンスがあったとして、6USD / hour分は1年間使い続けます、とコミットすると4USD分はディスカウントされる、みたいなイメージでしょうか。
但し、Savings PlansはRDSには適用されませんのでご注意ください。
https://aws.amazon.com/jp/savingsplans/

Instanceサイズの最適化

意外とおざなりになってしまうのが、定期的なインスタンスサイズの見直しですね。

  • 本当にm5.large必要なのか?
  • 通常時、どれくらいのリソース使用率なのか?

こまめにサイズを変更するだけでも、結構なコスト削減になるのではないでしょうか?

また、インスタンスファミリー(m5とかt3とかですね)は、新しいものほど安価&性能高になっていますので、定期的に最新のインスタンスファミリーに変えていくと、長い目で見た時に確実にコスト削減につながると思います。

停止する

そもそもの話ですが、稼働する必要のないインスタンスはこまめに停止する(破棄する)。当たり前と言えば当たり前ですが、意外とできていなかったりするのではないでしょうか?

インフラは24時間稼働する必要があるか?

AWSを始めとするクラウドサービスは利用した分だけ料金を払うのが基本です。
フルサーバレスのシステムであれば意識せずとも「利用した分だけのコスト」になりますが、EC2やRDSインスタンスを稼働させている場合、そのシステム(サービス)は本当に24時間稼働している必要があるのかを見直してみることが大事だと思います。

「夜間は特に利用しない、業務時間だけ稼働していればよい」というような場合は、思い切って夜間と休日はインスタンスを停止してしまうことも検討してみてはいかがでしょうか?

1か月(30日)フルに稼働すれば720時間ですが、業務時間(1日8時間で20日間)だけ稼働、休日は停止とすれば、1か月160時間。コストは4分の1以下、75%以上の削減です。

自動停止、自動起動にはLambdaを使うのがお手軽でオススメです。
例えば、以下のようなLambda Functionを準備して、スケジュール実行させれば定期的にEC2を停止or起動することができます。

上記関数でトリガをCloudWatch Eventsからの定期実行で設定すれば、定期的な起動(または停止)をすぐに運用にのせることができます。

尚、「夜間利用してないけど、バッチ処理が走るから。。。」というような場合は、今すぐLambdaへの移植を検討しましょう。

停止し忘れていませんか?

必要のないインスタンスが稼働しっぱなしになっていたりするのは本当に無駄なコストです。例えば、ちょっとした検証用のEC2インスタンス、カットオーバーした後のステージング環境などなど。

ステージングや開発環境と呼ばれるものは、本当に必要な場合のみ起動して利用すればよいですね。
デプロイ処理の中でAWSコマンドツールを利用して起動させるなど、通常時は停止している前提で運用を設計することが大事だと思います。

コストを見える化する

上述した開発環境などは特に無駄なコストです。AWSリソースを作成する場合は、そのリソースが開発用のリソースなのか、本番運用のリソースなのかを後から判別できるように「タグ」を設定しておくとよいと思います。

AWSコストエクスプローラーでは、タグ別にコストを表示することができます。
「あれ?開発環境用のリソースでこんなにコストが出てる・・・。何か止め忘れがあるかな?」といったように定期的なコストの見直しをするのに便利です。

ということで今回はコストの最適化をテーマに書いてみました。

withコロナ時代に耐えて力を温存し、状況が好転したときに攻勢に転じることができるような準備をしておきたいですね。

エンジニア募集中

データスタジアムでは一緒に働いていただけるエンジニアを絶賛募集中です!

野球、サッカー、バスケをはじめとして色々なスポーツの仕事があります。

AWSやAzure、動画やAIなど技術的にもチャレンジできる職場です。

テクノロジーの力で、日本のスポーツを一緒に発展させていきましょう!

<募集中のポジション(2020年8月1日現在)>

開発エンジニア(速報サービス)

開発エンジニア(スポーツチーム向けサービス)

インフラエンジニア

最新記事

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ