PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

コードを書き換えずにクラウド代を60%削減した話:地味だけど効く5つの見直し

この記事のキーポイント

まず結論:クラウド代は「コード」より「構成」で下がることがある

元記事の筆者は、約 5 万 MAU(Monthly Active Users = 月間アクティブユーザー数)のアプリを運用しながら、クラウド費用を 月額 $340 から $136 に削減したそうです。
削減率はなんと 60%。しかも、​アプリのコードを大きく書き換えずに、です。

これ、かなり面白い話です。
「性能改善 = 開発の頑張り」と思いがちですが、実際は “どんなインフラを、どう使っているか” のほうがコストに直結することが多いんですよね。クラウドは便利な反面、放っておくと“使ってないのに課金される箱”が増えがちです。

何が起きていたのか

筆者が問題視していたのは、よくある「とりあえずスケールしよう」です。
アプリが重いなら、もっと大きいサーバーを借りる。足りないなら台数を増やす。たしかに安心感はあります。でも、​本当に必要な分以上のリソースを払っていることも多いです。

image_0003.svg

そこで筆者がやったのは、次の順番。

  1. 実際の使用状況を測る
  2. いらないものを削る
  3. データの置き場所を見直す
  4. ボトルネックを減らす
  5. 支払いプランを見直す

この順番がいいです。派手な改善より、​ムダの発見が先。かなり現実的だと思います。

1. インスタンスの使われ方を監視して、サイズを下げた

最初の見直しで見つかった節約額は、​月約 $80
筆者は 2 週間モニタリングして、production server の CPU 使用率が平均 11% しかないと分かったそうです。

ここでのポイント

image_0004.svg

筆者は、

へダウングレードしました。

しかも、ただ小さくしただけではなく、​適切な alerting(異常時通知)​ も設定しています。
ここが地味に重要です。小さくするのは怖い。でも、通知があれば「本当に危ないときだけ戻す」運用ができます。

個人的には、クラウド費用を減らすときに一番ありがちな失敗は「怖いから何も変えない」か「怖さを無視して雑に下げる」の二択だと思います。この記事は、その中間をちゃんと取っています。

2. 使っていない database を削除した

次の節約は、​月約 $60
筆者は managed database を 3 つ動かしていたけれど、そのうち 1 つは 8か月放置した別プロジェクト用、もう 1 つは 誰も使っていない staging database だったそうです。つまり、実質必要だったのは 1 つだけ。

image_0005.svg

staging database ってなに?

本番環境とは別に、動作確認のために使う環境です。
本番でいきなり試すと危ないので、事前チェック用に用意します。

ただし、​作っただけで放置されやすい のも staging の怖いところ。
「念のため残しておくか」が積み重なると、請求書が静かに太ります。

記事では、30日触っていない database は

という流れを勧めています。

これはかなり現実的です。
DB はアプリ本体より“消すのが怖い”ので放置されやすい。でも、​スナップショットがあれば完全な削除ではないので、心理的ハードルを下げられます。いいやり方だと思います。

image_0006.svg

3. 画像・動画・PDF を object storage に移した

ここでの節約は、​月約 $45
筆者は画像、動画、PDF をアプリサーバーから直接配信していましたが、これをやめて object storage + CDN に移しました。

ざっくり言うと

元記事の図式はこうです。

何がうれしいのか

アプリサーバーで静的ファイルを配ると、

image_0007.svg

一方、object storage や CDN を使うと、

筆者は、compute bandwidth が >$0.10/GB なのに対して、object storage は ~$0.02/GB と説明しています。
メディアが多いアプリでは、この差がじわじわ効くんですよね。​1回あたりは小さくても、積み上がると痛い。クラウド費用の典型です。

4. SQL に index を足して、DBを軽くした

ここは少しコードに触れていますが、​アプリのロジックを作り直したわけではない のがポイントです。
やったことは、​足りなかった index を追加しただけ
節約は 月約 $19

index ってなに?

データベースの「検索用の目次」みたいなものです。
これがないと、DB は大量のデータを上から順番に探すことになり、遅くなります。
あると、目的のデータにすばやく辿り着けます。

記事の例では、こういうクエリがありました。

image_0008.svg

SELECT * FROM events WHERE user_id = 123 AND created_at > '2026-01-01';

index がないと full table scan​(表を最初から最後まで総当たりで見ること)が起きて、2.3 秒かかっていました。
そこで、

CREATE INDEX idx_events_user_date ON events (user_id, created_at);

を追加したところ、同じクエリが 12ms になったそうです。

これはすごい。
派手さはないけど、DB の性能改善ってこういう「地味な一手」が本当に効きます。しかも、クエリが速くなると、​小さい database instance でも耐えられる ので、インフラ代まで下がる。1粒で2度おいしいやつです。

5. 予約課金に切り替えて、長期利用を安くした

image_0010.png

最後の節約は、​月約 $36
筆者は 6か月以上ほぼ同じインフラを使っていたので、on-demand pricing から committed pricing に切り替えました。

ざっくり言うと

筆者は 1年のコミットを入れて、​36% の削減を得たとしています。
これは「毎月変動しないコア部分」に向いています。

もちろん、契約縛りはあるので万能ではありません。
でも、​ずっと動かす前提の基盤なら、かなり有効です。
個人的には、ここは「節約」でもあり「意思決定」でもあると思います。長く使うものに、ちゃんと長期価格を当てるのは合理的です。

合計いくら下がったのか

image_0012.png

元記事の内訳をまとめるとこうです。

合計: $240/月 の削減。
年間では $2,880 になります。

月額 $340 が $136 になった、という数字も納得感があります。
しかも、パフォーマンスが悪化したわけではない、というのがかなり大きいです。
コスト削減って、下手をすると「安くなったけど遅くなった」で終わるんですが、このケースはそうではありません。

この話でいちばん重要なのは「コードを書き換えなくても改善できる」こと

元記事のタイトルはかなりキャッチーですが、内容はわりと地に足がついています。
そして重要なのは、​性能改善やコスト削減の打ち手は、必ずしも大規模なリファクタリングではないという点です。

image_0013.png

まず見るべきもの

このへんは、コードを読む前に見られることが多いです。
だからこそ、開発者だけでなく、運用やプロダクトの視点でも大事になります。

明日やるなら、何から始めるべきか

元記事がすすめている最初の一歩はかなりシンプルです。

  1. 直近30日の CPU 利用率グラフを見る
  2. database を全部洗い出す
  3. 30日触っていない DB は snapshot を取って削除を検討する
  4. 帯域コストを確認する
  5. 静的ファイルをアプリサーバーから配っていないか見る

この順番、実務的でいいです。
「まずは測る」が本当に大事。体感でやると、たいてい外します。

image_0014.png

率直な感想

この記事は、いわゆる“すごい最適化”というより、​基本の徹底で勝っているのが良いです。
しかも、やっていることはどれも再現性があります。特別な魔法はなくて、監視して、捨てて、置き場所を変えて、契約を見直す。これだけです。

でも、こういう地味なことが一番効くんですよね。
クラウド費用は、プロダクトが成長すると自然に増えるので、放置すると「なんとなく高い」が当たり前になります。そこにメスを入れるには、派手な技術よりも、​冷静な棚卸しが必要だと改めて感じました。


参考: How I Reduced My Cloud Bill by 60% Without Touching My Code

同じ著者の記事