【サーバーレス破産】AWS Lambda が再帰実行されて潰れた会社

  • 2025-06-13
【サーバーレス破産】AWS Lambda が再帰実行されて潰れた会社

クラウドってマジですごい。

ボタンをポチるだけでサーバーが建つし、世界中にサービス展開とか、もう革命的すぎ。 でもな、そのキラキラした力の裏には、クッソ深くて暗~い落とし穴が待ってるんだぜ。それが、業界じゃ有名な 「クラウド請求ショック」 ってやつだ。

ある朝、コーヒーでもすすりながらメールを開いたらさ、いつもは数万円のクラウド利用料が、いきなり300万、1000万、下手すりゃそれ以上になってるわけ。マジで目が点になるぜ。 「え、バグ?何かの間違い?」って思うだろ?

悪いな、これは悪夢じゃねえ。 クラウド使ってるヤツなら誰でも喰らう可能性のある、ガチでヤバい現実なんだ。

しかもこれ、「ちょっと使いすぎちゃった、テヘペロ☆」で済む話じゃない。 意図せずバグったリソースが暴走したり、たった1行の設定ミス、どっかからパクられたAPIキーが、君の会社と、下手すりゃ君の人生そのものを木っ端微塵にする「リアルな脅威」なんだよ。

その最悪の結末は、笑えないけどマジである 「クラウド破産」 ってやつだ。

AWS Lambda が再帰実行されて潰れた会社

これは、とあるスタートアップの物語だ。 金曜の午後、slackに流れてきた1件のCloudWatch Alarm。誰もが「またか」と見過ごしたその通知が、週末の間に会社を食い潰す時限爆弾のスイッチだったなんて、その時は誰も知らなかった。

月曜の朝、CFOの絶叫がオフィスに響き渡る。クラウドの請求額が、1,890万円

原因は、ある開発者が書いたたった数行のAWS Lambda関数。S3への書き込みをトリガーに動くはずだったそいつは、自分自身を呼び出し続ける 「無限再帰ループ」 という名の悪魔に姿を変え、会社の預金残高を文字通り「溶かし」尽くした。

これはフィクションかって?半分はそうだ。だが、半分は紛れもない現実だ。 「クラウド破産」は、もはや都市伝説じゃない。実際に会社が潰れかけ、個人が自己破産寸前まで追い込まれた事例は、世界中にゴロゴロしている。

この記事は、そんな地獄から生還した者たちの血と涙の記録だ。そして、明日は我が身かもしれない君が、俺たちと同じ轍を踏まないための、唯一のサバイバルガイドだ。 君の会社のクラウドは、本当に大丈夫か?

俺たちの屍を越えてゆけ!地獄の請求書コレクション

まずは景気づけに、実際に世界中の開発者を絶望の淵に叩き落とした、珠玉の請求書たちを見ていこう。これは対岸の火事じゃない。君が今書いているコードの隣で、静かに牙を研いでいる現実だ。

AWS編:Lambda無限ループ地獄、その他もろもろ

やっぱ王者は格が違う。AWSには、エンジニアを絶望させるためのギミックが満載だ。

  • 1分間に160万回実行されるLambda、請求額300万円 ある企業のゴールデンウィーク直前。1日1回のバッチ処理のつもりが、設定ミスで1分間に160万回も自分を呼び出す狂気のループモンスターと化していた。連休中で誰も気づかず、休み明けに待っていたのは約300万円の請求書。担当者はきっと、連休の楽しい思い出が全てモノクロになったことだろう。

  • GitHubに上げたキーで即死。123万円の勉強代 「ちょっとした個人開発のコードだから」と、GitHubの公開リポジトリにソースをpush。そこには、慈悲の心でAWSのアクセスキーがべったりハードコーディングされていた。攻撃者たちは、こういうお宝を24時間365日探している。キーは秒で抜かれ、暗号通貨マイニング用のバカでかいインスタンスが大量発生。請求額は約123万円。運良くAWS神の慈悲で免除されたらしいが、こんな博打、二度と打てるか。

  • S3とLambdaの合わせ技一本負け S3にファイルを置いたらLambdaが動く。便利だよね。じゃあ、そのLambdaが処理結果を同じS3バケットに書き戻したら? …おめでとう。 無限ループの完成だ。 書き込みが新たなトリガーを生み、LambdaがLambdaを呼ぶ永久機関の出来上がり。これで数万円の請求が来た日には、便利さとリスクは背中合わせだと痛感するだろう。

GCP編:APIキー、それ公開して大丈夫そ?

GCPだって負けてない。そのクリーンなUIの裏で、凶悪な罠が口を開けて待っている。

  • スタートアップを殺しかけた45万ドルの翻訳API あるイケイケのスタートアップが、GCPの翻訳APIを使ってた。だが、そのAPIキーの管理がガバガバだった。漏れたキーは即座に悪用され、45日間で190億文字というとんでもない量の翻訳リクエストが発生。Google様から届いた請求書は45万ドル(約5000万円)。会社の存続そのものが危ぶまれる「実存的脅威」。これが現実だ。

  • 「ちょろいクエリ」のつもりが170万円 in BigQuery 「BigQueryでちょろっとデータ抜くか」。あるエンジニアが軽い気持ちで実行したクエリ。だが彼は知らなかった。BigQueryはスキャンしたデータ量で課金されるということを。彼の「ちょろいクエリ」は、意図せず巨大なテーブルをフルスキャンし、 15,760ドル(約170万円) の請求を生み出した。彼はきっと、SELECT *の恐ろしさを骨の髄まで味わったはずだ。

Azure編:消したはずなのに…幽霊課金の恐怖

エンタープライズの味方、Azure。だがその複雑な迷宮では、一度迷ったら二度と出られない(金銭的に)。

  • コンソールから消えたリソースが165万円を請求 あるユーザーがビデオ処理サービスを試した後、ちゃんとシャットダウンした。はずだった。請求書には15,000ドル(約165万円)。パニックになってAzureコンソールを探しても、原因のリソースはどこにも表示されない。見えない、だから止められない。 これほど怖いことがあるか? 最終的にMicrosoftに泣きついて免除されたらしいが、心臓に悪すぎる。

  • AIモデルをデプロイしただけで数万円 「AI触ってみるか!」とAzure OpenAI Serviceでモデルをデプロイ。まだAPIは1回も叩いていない。なのに数時間後、請求額が数万円に。幸い、予算アラートを設定していたから助かったものの、もし気づかなかったら…。リソースは「存在するだけ」で金を食うモンスターになりうるのだ。

Warning

地獄の沙汰も金次第:請求ショック早見表

クラウド地獄の概要主な原因請求額(参考)末路
AWSLambdaが1分間に160万回暴走無限ループ約300万円会社が泣きながら対応
AWSGitHubにキー晒して即死セキュリティ事故約123万円AWS神の慈悲で免除
GCPAPIキーが漏れて会社傾くセキュリティ事故45万ドル一部免除されたが、ほぼ死にかける
Azure見えないリソースが課金し続ける幽霊リソース15,000ドルMS神の慈悲で免除

もうお分かりだろう。請求ショックは運ゲーじゃない。設計、運用、セキュリティのどこかに必ず「穴」があるから起きる、必然の事故なんだ。

じゃあ、その「穴」って具体的に何なんだ? 次の章で、地獄の釜が開くメカニズムを解剖していこう。

なぜ地獄の釜は開いたのか?コスト爆発のカラクリ

請求額が天元突破する背景には、いくつかの典型的な「やらかしパターン」が存在する。君がうっかり同じ轍を踏まないように、そのメカニズムを脳に焼き付けてくれ。

A. 悪夢の主犯格:Lambda再帰ループという名の永久機関

サーバーレス、最高だよな。インフラのこと考えなくていいし。でも、その手軽さが牙を剥くことがある。特にAWS Lambda、こいつは意図しない再帰呼び出しで、簡単に制御不能なコスト増殖炉になる。

どうしてループするの? 事例で見てみよう

マジで単純なミスで地獄が生まれる。

パターン1:S3トリガーでウロボロス召喚

[画像アップロード] -> S3バケット (my-bucket) -> [Lambda起動] -> [画像処理] -> S3バケット (my-bucket) へ保存

この流れ、どこがヤバいかわかるか? Lambdaが処理結果を同じバケットに書き戻してるところだ。もしトリガー設定が雑で、バケット全体を監視してたら、この書き込みが新たなトリガーになる。 自分で自分の尻尾を食って、無限に処理を続ける蛇「ウロボロス」の完成だ。請求額は、君が寝てる間に天の川銀河の彼方まで飛んでいく。

パターン2:非同期呼び出しという名のゾンビウイルス

// これはヤバいコードの例
exports.handler = async (event) => {
  // ...何かの処理...

  // エラーハンドリングとか考えずに自分を非同期で呼んじゃう
  await lambda.invoke({
    FunctionName: 'my-runaway-function',
    InvocationType: 'Event', // 'Event' = 非同期呼び出し
    Payload: JSON.stringify({ ... }),
  }).promise();

  // ...
};

非同期呼び出し(InvocationType: 'Event')は、「やっといて!」と依頼を投げたら自分はさっさと帰る(処理を終える)方式だ。だから、バグでこいつが自分自身を呼び続けるコードを書いちゃうと、裏側でLambdaゾンビがネズミ算式に増殖していく。しかも、エラーが表に出にくいから、気づいた時にはもう手遅れ。請求書が届いて初めて、自分のサーバーがゾンビに埋め尽くされていたことを知るんだ。

Tip

AWS神の慈悲:ネイティブ再帰検出機能

あまりに多くの開発者がこの沼にハマったので、AWSがついにネイティブ再帰検出機能を実装してくれた。同じリクエスト内で約16回ループすると、自動で止めてくれる。

でもな、勘違いするなよ。

  • これは最後のエアバッグだ。事故る前提の運転をするやつは三流だ。
  • 16回分の無駄な呼び出しコストはきっちり発生する。毎秒このループが始まってたら、16回でも十分死ねる。

根本的な設計ミスを直さない限り、君はエアバッグが常に開く危険な車に乗り続けることになる。そんなのスリルありすぎだろ。

B. チリツモ地獄:幽霊リソースと「無料」という名の罠

派手なバグだけが敵じゃない。日々の運用に潜む、静かな殺し屋たちもいる。

  • 幽霊リソースの家賃 開発用に作ったEC2インスタンス、テストで使ったDB。作業が終わって「あとで消そ」と思ったまま忘れる。これ、マジでよくある。その「幽霊リソース」は、君が忘れても**家賃(利用料)**はきっちり払い続ける。誰も住んでない部屋の家賃を払い続けるなんて、馬鹿げてるだろ?

  • 「無料の子犬」症候群 Prometheus、ELKスタック。ツール自体は無料だ。最高だ。でも、そいつらをクラウドで動かすには、サーバー代、ストレージ代、ネットワーク代がかかる。まるで「無料で子犬をもらってきたら、エサ代や病院代で結局高くついた」って話と同じ。この「無料の子犬」に、いくら貢ぐことになるかちゃんと計算してるか?

C. ガチで一番ヤバいやつ:セキュリティ事故は即死コンボ

バグや設定ミスは、まだ「事故」だ。だが、そこに悪意ある第三者が絡むと、話は変わる。これはもう「事件」だ。

狙われるのは君の「鍵」

GitHubにアクセスキーを上げちまうような行為は、自宅の鍵の写真を撮って「ご自由にお入りください」ってSNSに投稿するのと同じだ。攻撃者は、君が想像する100倍速くその鍵を見つけ、君の家(クラウド環境)に押し入る。

敵の目的は、君の金でドンチャン騒ぎすること

君の鍵(認証情報)を手に入れた攻撃者は何をするか? 彼らは、君のクレジットカードで、世界で一番高いサーバーを借りられるだけ借りて、ドンチャン騒ぎを始める。

  • 暗号通貨マイニングパーティー: 超高性能なGPUインスタンスを限界まで立ち上げて、ビットコインを掘りまくる。利益は全部ヤツらの懐へ。サーバー代は全部君の請求書へ。
  • DDoS攻撃の踏み台: 君のサーバーを踏み台にして、他のサイトを攻撃する。君は犯罪の片棒を担がされることになる。

設定ミスが「蛇口の閉め忘れ」だとしたら、不正利用は 「水道管を消防ホースに繋ぎ替えられて、街中が水浸しにされてる」 ようなもんだ。被害の桁が、マジで違う。

もう二度と悪夢は見ない!俺的クラウド安全運転マニュアル

さんざん脅してきたが、安心してくれ。ちゃんと対策すれば、クラウド破産は防げる。ここからは、君が明日から実践できる、具体的なサバイバル術を伝授する。これは精神論じゃない。具体的な技術ルールだ。

A. まずこれだけは絶対やれ!基本のキ(生存確率50%UP)

クラウド触るなら、これは呼吸するのと同じくらい当たり前にやれ。

  1. 予算アラート:心の平穏のための保険

    • どうする: AWS Budgets とかを使え。プロジェクトごとに「月1万円」とか予算を決める。そして、 「予算の50%(5000円)を超えたらまず通知」 みたいに、低い閾値でアラートを仕掛けろ。
    • なぜやる: 請求額がヤバくなってからじゃ遅い。問題がまだ小さいうちに気づいて、対処する時間を稼ぐんだ。これは君の精神安定剤だ。
    • 注意: これは支出を止める機能じゃない。ただの通知だ。アラートメールを迷惑メールフォルダに入れてるようなやつは、もう知らん。
  2. 監視ダッシュボード:コストの心電図

    • どうする: CloudWatch とかを使って、コストそのものだけじゃなく、Lambdaの実行回数やAPIコール数をグラフで見れるようにしとけ。
    • なぜやる: コストのグラフが急に跳ね上がったら、それは心停止のサインだ。どのリソースが暴れてるのか、一発でわかるようにしておく。
    • プロの習慣: コードをデプロイしたら、まず請求ダッシュボードを見ろ。 これを癖にしろ。
  3. タグ付け:犯人探しのための最重要証拠

    • どうする: 作ったリソースには全部、 「誰が(Owner)」「何のために(Project)」「どの環境で(Env)」 みたいなタグを付けろ。
    • なぜやる: 「めんどくせー」って思うだろ? でもな、後でコストが爆発した時に、このタグがないと犯人(原因リソース)探しが超絶難航する。未来の自分を助けると思って、絶対にやれ。

B. エンジニアの腕の見せ所!技術的お守りリスト(生存確率80%UP)

基本ができたら、次はコードとアーキテクチャで防御壁を築く。これがデキるエンジニアの仕事だ。

  1. Lambdaには指揮者を置け:Step Functions

    • どうする: LambdaからLambdaを直接呼び出すような、複雑な連携はやめろ。代わりに AWS Step Functions を使え。処理の流れを状態遷移図みたいに定義できる。
    • なぜやる: フローが可視化されるから、無限ループみたいなアホなバグが入り込む隙がなくなる。素人がLambdaを鎖で繋ぐなら、プロは 指揮者(Step Functions) を置いてオーケストラを奏でるんだ。
  2. 認証情報は金庫にしまえ

    • どうする: アクセスキーをコードに書くやつは、今すぐエンジニアを辞めろ。 AWS Secrets Manager とかを使え。それが常識だ。
    • なぜやる: コードと認証情報を分離する。ただそれだけで、セキュリティ事故の9割は防げる。
  3. 最小権限は君を守る鎧

    • どうする: IAMロールには、Admin権限みたいな「最強の剣」を渡すな。その処理に必要なギリギリの権限だけを与えろ。「S3のこのバケットに書き込むだけ」なら、その権限だけだ。
    • なぜやる: 「めんどいからAdminでいっか」は破滅への第一歩。万が一キーが漏れても、権限が弱ければ被害は最小限で済む。最小権限は、会社のためじゃない、君自身を守るための鎧なんだ。

C. チームで生き残るための掟(生存確率99%UP)

最後は文化とプロセスの話だ。個人技だけじゃ、いずれ限界が来る。

  1. 金のことは知らねー、はもう通用しない (FinOps)

    • どうする: 開発チームもコスト意識を持て。どの機能にいくらかかってるか、常に把握しろ。これがFinOpsの第一歩だ。
    • なぜやる: 君が書いたコード1行が、会社に利益をもたらすこともあれば、会社を潰すこともある。その自覚を持て。
  2. 消防訓練をしろ (インシデント対応計画)

    • どうする: 「もしLambdaが暴走したら」というシナリオで、対応手順をドキュメント化しておけ。
      • 誰に連絡する?
      • どのダッシュボードを見る?
      • 暴走したLambdaを止めるコマンドはこれだ! とスニペットに登録しておく。
      # 緊急停止コマンドのお守り
      aws lambda update-function-configuration --function-name my-runaway-function --reserved-concurrent-executions 0
      
    • なぜやる: 火事になってから消火器の場所を探すな。パニック状態でも体が動くように、事前に訓練しておくんだ。
  3. 営業担当とダチになれ

    • どうする: AWSやGCPの営業担当と、普段から仲良くしとけ。
    • なぜやる: 万が一やらかした時、請求免除の交渉で彼らが神に見えることがある。技術的な問題解決とは別に、こういう「人間力」が君を救うこともあるんだぜ。

最後に、地獄から生還した俺たちから君へ

クラウドは、とてつもなく強力なエンジンだ。アクセルをベタ踏みすれば、とんでもないスピードが出る。でも、運転技術が未熟なままベタ踏みすれば、待っているのは大事故だ。

今日紹介した対策は、正直言って、面倒くさいかもしれない。 でも、ある日突然、会社の未来と君自身のキャリアを天秤にかけるような事態に陥るより、ずっとマシだろ?

クラウドの力を恐れるな。正しく理解し、敬意を払い、そして使いこなせ。 そうすれば、それは君のビジネスをどこまでも遠くに連れて行ってくれる、最高の相棒になるはずだ。

この記事を読んだ君が、俺たちと同じ地獄を見ないことを、心から祈ってるぜ。