freeeの開発情報ポータルサイト

CircleCI関連の月額コストを1日で10%削減する

この記事はfreee 基盤チーム Advent Calendar 2023 の18日目の記事です。

はじめに

はじめまして、SRE 統制チームのYです。 現在はコスト統制を重点的に取り組んでおり、予算精度の向上、コスト最適化を目標に業務を推進しています。 本記事では、コスト改善施策の局所的な部分になりますが、弊社が使用しているCI/CDツールの一つであるCircleCIにおいて、手間をそれほどかけずコストカットができる施策を紹介したいと思います。

施策1 ストレージの保存期間を短くする

CircleCIにおいてストレージは以下の3種類があります。

  • キャッシュ
    ビルド時に使用するファイルをキャッシュするためのもの。npm、Gem パッケージなどを保存
  • ワークスペース
    ワークフロー内のデータをダウンストリームジョブに転送
  • アーティファクト
    パイブラインで出力したファイルの保管 。

CircleCIのデフォルト設定では、保存期間はアーティファクトの場合は 30 日間、キャッシュやワークスペースの場合は 15 日間になっています。 freeeでは、デフォルト設定のまま運用が行われてきていましたが、デフォルト設定からアーティファクトを1日、ワークスペースを1日に変更しました。キャッシュでの利用はそれほど多くなかったため、そのままにすることにしました。設定自体は管理画面から簡単にできます。設定方法及びストレージの概要はCircleCIのドキュメントをご確認ください。
設定の注意点として、プロジェクト単位ではなく組織単位でしか適用できません。また、freeeではプロジェクト間でアーティファクトが参照されているケースがあり、今回の設定変更に際して、アーティファクトを参照しないようにコード修正を行ってもらった後に設定を行いました。

結果

以下のグラフが弊社のストレージ使用量の推移になります。10月に設定変更を行った結果、ストレージだけみれば、90%程度削減されました。
ストレージ使用量 ※詳細な料金や使用量は開示できないため、縦軸はぼかさせていただいています。

施策2 イメージのリポジトリをECRのus-east-1(バージニア北部)に移行する

こちらは、CircleCIの直接のコストではなく、CircleCIによって発生するAWSコストの削減施策になります。 freeeではコンテナイメージの保管先として、AWSのECRを使用しており、CircleCIでテストするにあたり、ECRからイメージのPULLを度々行っています。 freeeのAWS環境は、基本的に東京リージョンを利用しておりECRも東京リージョンを使用していましたが、ECRのリージョン間転送料金が目についていました。

CircleCIはAWSのus-east-1リージョンにインフラ設備があると耳にしたことがあり、ECRをus-east-1にすれば転送料が無料になるのかCircleCIのサポートに問い合わせようと考えていましたが、CircleCIのサポートページで明記されていました。将来的にCIrcleCI側のインフラ構成の変更によって無料でなくなる可能性はありますが、手間がそれほどかからないため本施策を実施することにしました。

CircleCIのサポートページのキャプチャ
CircleCIのサポートページのキャプチャ

プロジェクトに応じて以下のどちらかで運用するようにしました。

  • 既存の東京リージョンのリポジトリはそのままで、クロスリージョンレプリケーションを設定する
    CircleCI以外でも使用される可能性のあるリポジトリ

  • リポジトリをバージニアにのみ作成する
    CircleCIでしか利用しないリポジトリ

結果

以下のグラフがストレージと転送コストの推移になります。11月に施策を実施し、転送コストが10月の30%となり、ストレージコストを下回りました。 また、PULL速度的に20-30秒程度かかっていたものが、10秒程度になったと一部のプロダクトからは聞いています。一度のjobでは10秒程度の改善でも組織全体からみると、一日数万秒の改善になります。 コストと開発体験の両方が向上した良い施策だったといえます。

ECRの転送コストとストレージコスト
ECRの転送コストとストレージコスト
※詳細な料金や使用量は開示できないため、縦軸はぼかさせていただいています。

その他施策

freeeでは、テストの最適化、ログ出力レベル変更、キャッシュの活用、並列度の調整、Self-Hosted Runner、マシンスペックや実行時間の改善施策なども取り組んでいます。

おわりに

弊社では本施策だけで、CircleCIの月額費用の10%程度の費用を削減することができました。 CircleCIでは、コンピュート使用量のコストが高い傾向になると思いますが、テスト改善やジョブの見直しなどの実行時間の短縮は長期的な施策になりやすく工数もかかります。 今回紹介した2つの施策は、あまり工数がかからず簡単に実施できることなので、興味があれば是非試してみてください。

施策の実施にあたり各プロジェクトの開発者の方の協力が必要不可欠なものでしたが、思い立ってから一日で実施できました。
実は私は入社して半年程度です。まずストレージ施策では、突然slackの開発者が集まっているチャンネルに施策の説明と実施宣言をしました。 私のことを全く知らない各プロダクトの開発者の方の協力があり、調査及びコードの改修をその日のうちにしていただけました。
ECR施策では、元は速度改善目的で開発者の方から提案があり、試した結果、速度改善もさることながらコストメリットが大きく、すぐに各プロダクトに横展開し実施しました。
数百名のエンジニアがいる組織規模で、横断的な施策を実施する際のこのスピード感と協力感は経験したことがありません。freeeはそんな会社です。 協力していただいた皆様、本当にありがとうございました!

次回のAdvent Calendar担当はYoshida Syunsukeさんになります。 ぜひご覧ください!