ランサーズ株式会社 / 開発
各種SaaSのコスト最適化と利用促進
## プロジェクトの目的・背景 自社で使用しているAWS・CircleCI・Datadogのコスト削減や利用推進を行いました。 - 各種クラウドサービスのコスト増大への対応 - Datadogの活用度向上とコストパフォーマンス改善 - 開発者の効率的なツール活用の促進 ## プロジェクト規模・体制 - インフラSREチームの1メンバーとして対応 ## 担当業務・役割 - AWS運用コストの最適化 - CircleCIのパフォーマンス改善 - Datadogの活用促進・コスト管理 - 開発チームへの技術共有 ## 使用技術 - AWS(ECS/Fargate・NATGW・VPCエンドポイント) - Datadog - CircleCI ## 具体的な取り組み 1. ECS/Fargateのコスト削減 自社では各サービスの実行基盤をEC2からECS Fargateに移行済みでしたが、EC2時代に比較するとコストが高くなってしまうので、コスト削減のためにFargate Spotの導入を行いました。 基本的には、サービスのトラフィックに応じて最低台数はFargateで起動するようにし、オートスケールで起動するコンテナの一部をFargate Spotで起動するように設定しました。 これにより、ECS・Fargateのコストを40%削減することができました。 2. NATGWのコスト削減 Webアプリケーションではサイドカーとしてdatadog-agentを使っていました。 ECSタスクを起動する際に、datadog-agentのコンテナイメージをNATGWを経由してpullするようになっており、ECSタスクの起動回数が増えるごとにNATGWの通信量が増大していました。 これを回避するために、datadog-agentのコンテナイメージをECRプルスルーキャッシュを使いNATGWではなくECRに対してVPCエンドポイントを経由してイメージをpullするように設定しました。 これによりNATGWの通信コストを60%程度削減しました。 3. CircleCIの改善 CircleCIでは以下の問題があり、これを修正することでコスト削減とコンテナビルドの高速化を行いました。 - CIの最適化 - アプリケーションコードに変更があった場合のみテストを実行するように変更し、無駄なCIが走らないようにしました - 使用するVM・コンテナのresource_classの最適化 - CPUを使わないようなジョブはresource_classをsmallにしてコストを抑えるようにしました。また、使用していた一部のCircleCI Orbsはresource_classのパラメータがなかったので、[PR](https://github.com/CircleCI-Public/terraform-orb/pull/69)を出したりしました - コンテナイメージのビルド最適化 - CircleCIのDLCはうまく使われないことがあるのと消費クレジットが大きいので、`--cache-from`と`--cache-to`を使い、キャッシュ用のイメージをECRに置いて使うことでコンテナビルドの高速化とコスト最適化を行いました 4. Datadogの改善 Datadogの課金体系や課金状況を正しく把握しているメンバーがいない状態となっていました。 また、Datadogを導入したもののAPMやログなど開発者に効果的に使用してもらえるように布教活動ができておらず、コストパフォーマンスがあまり良くない状態となっていました。 上記を改善するために、コスト最適化と開発チームに対してのDatadogの利用促進として以下を行いました。 - Datadogの課金体系・課金状況の調査とチームへの共有 - 無駄なコストの削減 - データ取得不要なEC2の棚卸しや取得対象からの除外、Fargate task数やAPM・Log周りのcommited costの最適化を行いました。 - Cloudwatch metrics streamの設定 - 開発チームへAPMの見方・使い方の共有 上記を行うことで全体で月$700ほどのコストを削減することができました。 また、QAや開発チームのメンバーがDatadogを使いこなすための下地を作ることができました。 ## 定量的な成果 - ECS/Fargateコスト:40%削減 - NATGW通信コスト:60%削減 - Datadogコスト:月額$700削減