ログ1GBはS3の30倍|AWSの単価をAPIで取って試算する

ログ1GBはS3の30倍|AWSの単価をAPIで取って試算する

AWSのコスト試算が外れるのは、計算を間違えるからではありません。そもそも項目として挙げていないものが、あとから請求書に載るからです。

この記事では、AWSが公開している価格APIから実際の単価を取ってきて、見落としやすい項目がどれくらいの金額になるのかを計算します。数字は東京リージョンの公開価格です。

目次

単価は認証なしで取れる

あまり知られていませんが、AWSの価格表はAPIキーなしで誰でも取得できます。

# サービスとリージョンの一覧
curl https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/index.json

# 東京リージョンの CloudWatch の価格表
curl https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/\
AmazonCloudWatch/current/region_index.json

返ってくるのは、サービスごと・リージョンごとのJSONです。価格表のページを人が読んで転記するより正確ですし、スクリプトで試算表を作ることもできます。

以下の数値は、このAPIから取得したものです(version 20260831 / ap-northeast-1)。

1GBの値段は、用途で30倍違う

CloudWatch Logsの取り込みが1GBあたり0.76ドルで、S3ストレージの0.025ドルの30倍であることを示す横棒グラフ
同じ「1GB」でも、何に使うかで30倍違う
項目単価単位
CloudWatch Logs 取り込み$0.761GB
CloudWatch Logs 保管$0.0331GB・月
S3 標準ストレージ$0.0251GB・月(〜50TB)
Logs Insights のスキャン$0.00761GB(クエリごと)
S3 PUT / COPY / POST / LIST$0.00471,000リクエスト
S3 GET$0.003710,000リクエスト
CloudWatch カスタムメトリクスのAPI$0.011,000リクエスト

並べると、ログの取り込みが突出して高いことが分かります。S3に1GBを1か月置くのが $0.025 なのに対して、CloudWatch Logsに1GB取り込むのは $0.76。30倍です。

しかもこれは「取り込む」だけの値段で、保管は別にかかります。そしてその保管単価 $0.033 も、S3より高いです。

実際に計算してみる

# 1日10GBのログを出しているシステム(月300GB)

取り込み        300GB × $0.76   = $228.00 / 月
保管(当月分)    300GB × $0.033  =   $9.90 / 月
保管(1年後)   3,600GB × $0.033  = $118.80 / 月   ← 保持期間を設定していない場合

同じ300GBをS3に置くだけなら          =   $7.50 / 月

1日10GBは、そこそこの規模のシステムなら普通に出る量です。デバッグログを本番で出しっぱなしにしていると、簡単にこの倍になります。

保管のほうも見てください。保持期間を設定していないと、毎月300GBずつ積み上がります。1年後には保管だけで月$118、2年後には月$237です。しかも誰も見ないログです。

対策は単純で、ロググループごとに保持期間を設定することと、本番でデバッグログを出さないことです。長期保管が必要なものは、S3にエクスポートすれば単価が下がります。

試算で漏れる4つ

EC2やRDSの費用は誰でも計上します。漏れるのは、「使った量」で決まるものです。

1. データ転送

いちばん忘れられます。AWSからインターネットへ出るデータには課金されます。入る方向は無料なので、油断します。

  • インターネットへの送信
    画像や動画を配信していれば、ここが主要因になります
  • アベイラビリティゾーンをまたぐ通信
    同じリージョン内でも、AZをまたいだ分は課金されます(東京リージョンで1GBあたり0.01ドル。AWSの料金データでは出る側・入る側の両方が対象)
  • NAT Gateway を通る通信
    時間課金とは別に、通過したデータ量にも課金されます

2番目は特に見落とされます。アプリとDBを別AZに置けば、そのやりとりはAZ間通信です。RDSをマルチAZにしても、書き込みを受けるプライマリは片方のAZにしかないので、もう一方のAZにいるアプリからの通信は毎回AZをまたぎます。

ただし、RDSのマルチAZでプライマリとスタンバイの間に流れるレプリケーションの通信は無料です(AWSのFAQに明記されています)。課金されるのはマルチAZという構成そのものではなく、自分のアプリの通信がAZをまたいだ分です。

濃い木のテーブルに長く伸ばされたレシート。端は画面の外まで続いている写真
単価の小さいものほど、量で効いてくる

2. リクエスト課金

S3は容量だけでなく、操作の回数にも課金されます。

# 小さいファイルを大量に扱う場合
1,000万回の PUT  →  10,000 × $0.0047 = $47.00
1億回の GET      →  10,000 × $0.0037 = $37.00

1KBのファイルを1,000万個置くようなケースでは、容量は10GB($0.25)なのにリクエスト料が$47になります。容量で試算すると200倍近く外します。

同じことがCloudWatchのカスタムメトリクスにも言えます。1,000リクエストで$0.01なので、1分ごとに100種類のメトリクスを送ると月430万リクエスト、$43です。ディメンションを増やすと掛け算で増えます。

3. 止めても課金されるもの

「使っていないから0円」と思っていると外れるものがあります。

  • EBSボリューム
    EC2を停止しても、ディスクは課金され続けます
  • スナップショット
    世代を重ねるほど増えます。世代管理をしないと際限なく増えます
  • パブリックIPv4アドレス(Elastic IPを含む)
    使っているかどうかに関係なく、1個1時間0.005ドル(月およそ3.65ドル)かかります。2024年2月から、インスタンスに紐づいているものも課金対象になりました
  • NAT Gateway
    通信がゼロでも、起動している時間だけ課金されます
  • ロードバランサー
    リクエストがなくても時間課金されます

検証環境で効いてきます。「夜間は止めているから安い」と思っていたら、止まっていないものが並んでいたというのはよくあります。

4. 監視・ログ・バックアップ

提案時の見積もりから、まるごと抜けやすい領域です。「運用に必要なもの」は、機能の話をしているときに議題に上がりません。

  • CloudWatch のログ・メトリクス・アラーム
  • CloudTrail の証跡保管
  • AWS Config の構成記録
  • バックアップの保管容量
  • WAF のルール評価

1つずつは小さくても、全アカウントで有効にすると効いてきます。特にAWS Configは、リソース数と変更頻度で増えます。

試算の進め方

順番を決めておくと漏れにくくなります。

  1. 構成図を先に描く
    図に描いた箱が、そのまま費用の行になります。構成図の記事で書いたレイヤー分けが、そのまま試算の分類にも使えます
  2. 箱ごとに「時間課金」と「従量課金」を分けて書く
    従量のほうが漏れます
  3. 矢印にも値段を付ける
    箱と箱の間の線は、データ転送です
  4. 運用の行を足す
    ログ・監視・バックアップ・証跡
  5. 前提を書き添える
    「月間PV」「1リクエストあたりのレスポンスサイズ」など

3番目が肝です。構成図の矢印を1本ずつ見て「ここを通るデータは月に何GBか」を考えると、データ転送の漏れがなくなります。

前提を書かない試算は使えない

最後がいちばん大事かもしれません。「月額15万円」という数字だけを渡すと、それが確定金額として扱われます。

実際には、試算はいくつもの前提の上に立っています。

  • 想定するアクセス数と、そのときの転送量
  • データの増加ペース
  • ログの保持期間
  • 可用性の要件(マルチAZにするか、リードレプリカを置くか)
  • 為替レート

この前提が変われば金額も変わる、ということを明示して渡します。「アクセスが想定の3倍になった場合は、およそこれくらい」という幅も一緒に出せると、判断の材料になります。

そして運用開始後は、実績と試算を突き合わせます。ずれた項目が、次の試算で精度を上げるための材料になります。Cost Explorer をタグ別に見られるようにしておくと、この照合が楽になります。

まとめ

  • 単価はAPIで取れる
    認証不要。転記ミスがなくなる
  • ログの取り込みは $0.76/GB
    S3ストレージの30倍。1日10GBで月$228
  • 保持期間を設定しないと積み上がる
    1年で保管だけ月$118になる
  • 漏れるのは従量課金
    データ転送・リクエスト数・AZ間通信
  • 止めても課金されるものがある
    EBS・EIP・NAT・ロードバランサー
  • 構成図の矢印に値段を付ける
    データ転送の漏れが消える
  • 金額だけ渡さない
    前提とセットにしないと、確定金額として扱われる

なお、単価はリージョンと時期で変わります。この記事の数値も、記事を書いた時点でAPIから取得したものです。実際の試算では、必ずその時点の価格を確認してください。

次に読む記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

わどこんのアバター わどこん

実務12年のバックエンド・インフラエンジニア。バックエンド開発からクラウド・インフラの設計・構築・運用まで担当しています。主要言語は Java・Kotlin・PHP・Python。運用の現場で拾った知見を、再現できる手順に落として残すのがこのブログのテーマです。

目次