12 ポイント 投稿者 GN⁺ 2025-11-21 | 1件のコメント | WhatsAppで共有
  • AWS VPCネットワーキングとNAT Gatewayの設定ミスにより、S3データ転送コストが1日で約900ドル、月間累計で1,000ドルを超えた事例
  • EC2からS3への転送は無料と認識されがちだが、VPC内でNAT Gatewayを経由すると有料のデータ処理料金が発生
  • 問題の原因はS3向けVPC Gateway Endpointの欠落で、NAT Gatewayを通らずにS3へ直接接続する設定がなかったこと
  • Gateway Endpointは無料で、データ転送料金も発生しないため、Terraformなどで簡単に設定可能
  • AWSインフラ運用におけるコスト監視とVPC Endpoint構成確認の重要性を示す事例

問題の背景

  • Geocodioは内部の大容量地理データファイルをS3にミラーリングするためにAWSを利用
    • データは住所ポイント、境界データ、国勢調査情報などで、数GBから数百GB規模
    • HetznerでホストされているETLプラットフォームからAWS処理インフラへ定期的な同期が必要
  • AWSのデータ転送コストの高さは業界全体の共通不満であり、CloudflareやCorey Quinnらも関連問題を指摘
  • 著者はプロジェクト開始前にコスト構造を確認し、
    1. 同一リージョン内のEC2–S3転送は無料
    2. S3へのアップロード(入力)は無料
      という点を確認してコストを見積もっていた

想定外のコスト発生

  • S3同期プロセスのデプロイ後、AWS Cost Anomaly Detectionから異常アラートを受信
    • 1日でNAT Gatewayのデータ転送量が20,167.32GB、コスト907.53ドルが発生
    • 月間累計コストはすでに1,000ドルを超過
  • EC2–S3転送は無料だと思っていた状況で、なぜNAT Gateway料金が請求されたのかを調査

原因分析: NAT Gateway経由

  • VPCでNAT Gatewayを使用している場合、S3トラフィックもデフォルトでNAT Gateway経由にルーティングされる
    • 同一リージョン内のAWSサービスへのリクエストであっても、NATを経由すると1GBあたり0.045ドルのデータ処理料金が発生
  • その結果、EC2–S3間の転送自体は無料でも、NAT Gatewayのコストが請求された
  • 解決策はS3向けVPC Gateway Endpointの作成
    • NAT GatewayやInternet Gatewayを経由せず、VPCからS3へ直接接続
    • 完全無料で、時間単位料金や転送料金もない

解決までの流れ

  • Terraformでインフラを管理していたため、Gateway Endpointリソースを追加してルートテーブルに関連付け
    • AWSが自動でルーティングを更新し、S3トラフィックをNAT GatewayではなくEndpointへ送信
  • その後、NAT Gateway関連の課金は停止

教訓と推奨事項

  • 長年AWSを使っていても、S3向けVPC Endpoint設定の漏れによりコストが発生しうる
  • AWSネットワーキングは複雑で、コスト構造は設定方法によって大きく変わりうる
  • 再発防止のための推奨事項
    • AWS Cost Anomaly Detectionを有効化: 異常コストを早期に検知可能
    • VPC Endpointを利用: NAT Gatewayを使うVPCでS3・DynamoDBへアクセスする際は必須
    • 前提を検証する: 「EC2–S3転送は無料」という前提をうのみにせず、少量テスト後にコスト監視が必要
    • クラウドは複雑: 長期利用者であっても継続的な注意が必要
  • 類似事例として、Recall.aiがWebSocketデータ処理コストとして年間100万ドルを支払った例にも言及

その後の対応

  • GeocodioはすべてのVPCのS3通信経路を点検し、Gateway Endpointの構成を完了
  • AWS利用者にVPC Endpoint設定の確認を推奨
  • 要約: NAT GatewayはAWSサービス向けトラフィックも課金対象であり、VPC Endpointの利用でコスト回避が可能

追加資料

1件のコメント

 
GN⁺ 2025-11-21
Hacker Newsの意見
  • 主要なクラウド系サブレディット3つで、こうした請求爆発の事例が1日に1回くらいの頻度で投稿されるのをよく見る
    クラウド事業者はいつも遅れて通知を出すだけで、ユーザーはただ祈って救済を求めるしかない状況だ
    しかも一部では「技術的にハードキャップ付きアカウントを提供するのは不可能だ」と主張するが、実際には Azure にすでにそういうアカウントが存在する

    • 私はこれを悪意というより、無能さとインセンティブ不足の組み合わせだと思う
      10年以上 AWS を使ってきたが、サービス間の設計の不連続性と組織内のサイロ化が深刻だった
      大きな組織では、KPI を傷つける問題を解決しようとする役員はおらず、その代わりに AI やブロックチェーンのような流行りのサービスを出して昇進ポイントを稼ぐことに集中する
    • AWS は昨日、超過料金なしの定額料金プランを発表した
      月額 $0、$15、$200 のプランから選べば、想定外のリクエストやデータ転送増加による請求爆発を防げる
      AWS 公式ブログへのリンク
    • 同じ話だが、今度は CDN 向けの定額料金プランだ。S3 ストレージと帯域幅を含む $0 ティアもある
      関連 HN スレッド
      コスト上限を設定しつつサービスの安定性を維持するのは難しいが、この事例で技術的に可能であることが証明された
    • AWS は、顧客が誤って課金された場合、あとで返金する方針を取っている
      サービス停止やインフラ障害による評判リスクを避けるためだ
    • こういう投稿でいちばん悲しいのは、「私たちは請求書をもっとよく理解すべきだった」という結論で終わることだ
      だが問題はクラウドそのものかもしれない。予測可能なコスト構造を必要とする小規模事業者には、クラウドは向いていない可能性がある
  • こういうことがあまりにも頻繁に起きるので、S3 VPC エンドポイントは VPC 作成時のデフォルトにすべきだと思う
    そして NAT ゲートウェイの代わりに fck-nat のような代替を使えば、GB あたりのトラフィック料金を節約できる

    • しかし S3 Gateway エンドポイントはリージョン間の S3 操作を壊すので、デフォルト変更は顧客を壊しかねない
    • IPv6 に移行して Egress Gateway を使う方法もある
    • コンソールで VPC を作るときは、チェックボックス1つで設定できる
    • コンソールではなく**IAC(Infrastructure as Code)**で構築する場合は、すべての構成を明示的に書くべきだ
    • 基本的に VPC はセキュリティ優先の構造で設計されるべきだ
      デフォルト拒否の状態から明示的にインターネットアクセスを許可すべきで、そうでないと攻撃者にデータを流出させられる
  • 私も似たようなミスをしたことがある
    AWS の推薦アルゴリズムにテスト用データをアップロードして忘れていたら、数か月後に銀行から残高不足の通知を受けた
    アルゴリズムが動き続けて毎月 1,000 ドル以上請求され、結局5,000 ドルが消えた

    • 私は請求部門で働いたことがあるので、こういうことに対して健全な偏執性を持つようになった
      毎日残高を確認し、すべての請求メールを重要扱いにしている
      そして各サービスごとにバーチャルカードの利用上限を設定する習慣をつけた
  • 私も同じミスで6万ドルを失ったことがある
    なぜ S3 エンドポイントがデフォルトでデプロイされないのか理解できない

    • 社内会議で「これをデフォルトにしよう」と言えば、「収益が減る」という理由で先送りされそうだ
    • 「それは年収1年分だけど、インフラを自前でセルフホストする複雑さを考えてみろ」という冗談も出る
  • 「なぜ AWS の料金が爆発したのか」とよく聞かれるが、たいていはNAT + S3 + 間違った前提の組み合わせだ
    EC2→S3 転送は無料だが、NAT を通ると有料になる
    だから私は次のチェックリストを渡している

    1. S3 や DynamoDB と頻繁に通信するプライベートサブネットでは Gateway Endpoint の使用を検討する
    2. NAT コストを別ダッシュボードで監視する
    3. 大容量データを動かす前に料金の流れ図を描いてみる
      Cost Anomaly Detection が間に合ったのは幸いだった。1,000 ドルの損失も痛いが、2万ドルよりはましだ
  • AWS からデータをダウンロードすると GB あたり $0.09 かかると知って驚いた
    データをアップロードするときは無料なのに、取り出すにはお金を払うのか?

    • これはロックイン戦略の一環だ。入るのは簡単だが、出るのは高くつく
      今回の件は、NAT 設定ミスにより内部転送が外部転送として計算された特殊なケースだ
    • GB あたり9セントは、ほとんど携帯料金プラン並みのぼったくりに見える。こういう理由で Cloudflare が人気なのだろう
    • アップロードは安いがダウンロードは高い。顧客がデータをユーザーに提供するたびに AWS がその一部を取る構造だ
    • 消費者向けサービスでは月額料金に含まれるが、AWS はコストを直接意識させる構造になっている
    • 「カリフォルニア生まれ、出ることはできても去ることはできない」という冗談を思い出す
  • Amazon はこうしたミスについて返金してくれるのか気になる

    • 金額と状況による。私も以前かなりの金額を返金してもらったが、複数回の釈明と再発防止計画を提出しなければならなかった
    • 投稿者は「AWS がアカウントクレジットをくれるかもしれないので、結果を更新する」と言っている
    • 実際、AWS はこういう場合は返金してくれることが多い。データが実際に外部へ出ていない可能性が高いからだ
    • 私も何度か返金されたことがある。ただし再発防止の条件が付く
    • 結局は顧客の規模と支払い能力による。月20ドルの顧客は 1,000 ドルを払えないが、月 3,000 ドルの顧客は気にしない
  • VPC NAT Gatewayは悪名高い
    以前 Amazon 在籍時に似た問題を経験したが、会社アカウントだったので自分では払わなかった
    実際にお金を払わなければならない人たちは本当に気の毒だ

    • 個人的には NAT ゲートウェイがなぜこんなに一般的なのか理解できない。たいていの場合はInternet Gatewayで十分だ
  • 今回の件には直接は役立たないが、AWS は昨日CDN 向けの定額料金プランを開始した
    S3 ストレージと帯域幅を含む $0 ティアもある
    関連リンク
    今後ほかのサービスにも広がることを期待している

  • 私も22歳のとき、初めてインフラを触って2日で300ドルの請求を食らったことがある
    AWS は素晴らしいが、初心者にとってはコスト計算があまりにも不透明

    • なぜそれを改善しないのか不思議だ