opswitch を使って AWS 開発環境のコストを半分にした

AWSTech

Kyash Advent Calendar 2021 4日目の記事です。

Kyash ではシステムの大部分を AWS で構築しており、開発環境や検証環境も AWS 上にあります。
開発環境の運用時間を見直すことでコストを半減できたため、その取り組みについて紹介します。

開発環境の運用コスト

開発環境は本番環境と異なり、低めのスペックに抑えることが多いかと思います。
Kyash でも同様の構成となっており、費用については特に問題となっていませんでした。

しかし、プロダクトの成長とともにマイクロサービスの数も増え、開発環境におけるリソース数は私が入社した2020年2月から2倍以上になっています。

このままでは今後も費用が増え続ける一方なので、何かしらの対策を取ることになりました。

運用時間の見直し

まず目をつけたのが、開発環境の運用時間の見直しでした。
開発環境を利用するのは平日の日中のみですが、リソースは24時間動き続けていたためです。

せっかくクラウドを利用しているので、必要のない時間は止める方向で検討を進めました。
ただし複雑な仕組みを導入しても運用の手間が発生するため、なるべくシンプルに実現したいという思いもありました。

opswitch を使って自動化

opswitch

そこで辿り着いたのが、クラスメソッド社の提供する AWS 運用自動化ツール opswitch です。
AWS 上でのジョブ実行をスケジューリングする機能を持っています。

毎日同じ時刻に特定のインスタンスを起動したり、停止したりといった操作を自動化できます。EC2 だけでなく、RDS (Aurora 含む) に対応しているのも嬉しいポイントでした。

また、バックアップの自動作成やインスタンスタイプの変更などもサポートしており、特定の曜日だけスケールアップするといった運用にも使えます。

そしてここが重要なのですが、opswitch は無料です。クラスメソッドさんありがとうございます!

AWS 権限の付与方法

外部からリソースを操作するためには、もちろん AWS アカウントの権限が必要です。
opswitch では専用の IAM ロールを作成することで権限を渡す仕様になっています。

設定自体は特に難しいこともなく、提供されている CloudFormation スタックを用いて画面をポチポチするだけで完了します。 https://opswitch.zendesk.com/hc/ja/articles/360015510931

Kyash ではコードで IAM を一括管理している都合上、CloudFormation スタックの情報を元に IAM ロールを作成して設定しました。

平日の日中のみ開発環境を起動する

opswitch コンソール

opswitch の機能を用いて、月曜〜金曜の 8:00-23:00 のみ開発環境が起動するようにしています。
メンバによって働く時間帯に多少のばらつきがあるため広めに設定しました。

なお、バッチの検証で夜も動かしたいときや、イレギュラー要因で休日に起動したい場面も想定されます。その場合の変更方法も周知しており、opswitch コンソールから誰でも操作が可能です。

操作対象となるリソースは AWS のリソースタグを使って指定します。
opswitch 用のリソースタグを新たに用意して Terraform で管理することにしました。

開発環境のコストが半分に

これまで毎週 24 * 7 = 168h だった運用時間が 15 * 5 = 75h となり、半分のコストになりました。
プロダクトの開発スピードや生産性に影響を与えずにコストを半減できたのは良い成果が出たと感じています。

なお、Kyash では ECS (Fargate) 移行を進めており、EC2 の数は徐々に減ってきました。
まだ ECS の自動停止は実施しておらず、誰も使わない時間に動き続けている状態です。

ECS の場合はタスク数を0にすることで同様の効果が得られるため、今後の課題として Lambda 等を用いた自動停止の仕組みを検討しています。

まとめ

  • 開発環境の運用時間を見直してコストを半減できた
  • opswitch で開発環境の起動停止を自動化した
  • ECS (Fargate) の夜間停止も今後やりたい

Kyash Advent Calendar 2021 の他の記事もぜひお読みください!

昨年のアドベントカレンダー記事はこちら↓

AWSTech