費用と停止|クラウドの基本・IAM・責任

このページはプロモーション(広告)を含みます。

クラウドの基本・IAM・責任(中級・読む30分+演習40分)

この授業のゴール

仕事でどう使うか

クラウドの請求は、使い方を誤ると静かに増え続けます。検証用に作ったサーバーの消し忘れ、外部への大量のデータ転送、漏れた鍵による不正利用などで、気づいたときには予算を大きく超えていた、という事例は珍しくありません。費用を見積もり、止め方まで設計することは、技術の仕事の一部です。

路線 この授業の使いどころ
DS 分析環境の月額を見積もり、夜間・休日に止める運用を提案する
ML 学習(短時間に大きな計算)と推論(常時)の費用を分けて見積もり、学習後に資源を確実に片付ける
DX 稟議書に費用の内訳・仮定・上限の仕組みを書き、予算超過時の対応手順を決める
RS 研究費の範囲で計算資源を使い、期間終了時にデータの保管と削除を計画する

この授業の単価はすべて教材用の架空の値で、実在のサービスの料金ではありません。実際の料金体系・無料枠・通知の機能は提供者ごとに異なり、頻繁に変わります。執筆時点(2026年)の一般的な説明として読み、見積もりの前に必ず公式の料金表で確認してください。演習は端末内の計算だけで完結し、実際の課金は発生しません。

前提

次の内容を使います。

Pythonでは、辞書と for 文、max() を使います。

身近な状況:試作が終わったのに請求が続く

みなと商店の分析者が、商品の需要予測モデルを試作しました。試作期間の1か月、架空の単価で計算すると次の費用でした。

項目 使用量 単価(架空) 金額
学習用の仮想サーバー 60時間 120円/時間 7,200円
保存(学習データとモデル) 500GB 3円/GB・月 1,500円
外部へのデータ転送 40GB 15円/GB 600円
合計 9,300円

試作が終わり、分析者はサーバーを「停止」しました。ところが翌月も、そのまた翌月も請求が来ています。調べると次のものが残っていました。

さらに、「無料枠があるから大丈夫」と考えていた別のチームでは、無料枠を超えた分がそのまま請求されていました。

この授業では、費用を項目に分けて見積もる方法と、止める・消す・残すを正しく区別する方法を学びます。

直感的な説明:電気・倉庫・宅配の請求書

クラウドの請求は、性質の違う3種類の請求書が合わさったものだと考えるとわかりやすくなります。

ほかに、窓口の手数料(リクエスト数)のように回数で数える項目もあります。

「停止」は電気のスイッチを切ることで、倉庫代は止まりません。「削除」は荷物ごと処分することで、費用は止まりますが元に戻せません。何を残し、何を消すかを決めてから操作します。

無料枠は「最初の何時間・何GBまでは無料」という割引で、それを超えた分は請求されます。予算の通知は「使いすぎです」と知らせる火災報知器のようなもので、多くの場合、自動で火を消す(資源を止める)装置ではありません。

正確な定義:費用の項目と、停止・削除・上限

$$C = \sum_{i} p_i \times \max(0,\ q_i - f_i)$$

$\max(0,\ \cdot)$ は「無料枠のほうが大きいときはマイナスにせず0にする」ための記号です。例:仮想サーバー $q=60$ 時間、$f=0$、$p=120$ 円なら 7,200円。リクエストが $q=3{,}000$ 千回、$f=1{,}000$ 千回、$p=0.4$ 円/千回なら $0.4 \times 2{,}000 = 800$ 円。

項目 単位の例 停止で止まるか
計算(仮想サーバー・コンテナ) 時間・秒 一般に止まる
ディスク(ブロック保存) GB・月 止まらない(削除で止まる)
スナップショット・バックアップ GB・月 止まらない
オブジェクト保存 GB・月、リクエスト回数 計算の停止とは無関係
外部へのデータ転送 GB 転送しなければかからない
固定のIPアドレス・負荷分散装置など 時間 種類による(使っていなくても課金される場合がある)

段階付き例題:需要予測バッチの月額を見積もる

問題:毎日1回、需要予測のバッチ処理を動かす。月額を見積もり、仮定を明示する(単価・無料枠は架空)。

ステップ1:使用量を見積もる。

項目 見積もりの根拠 使用量 $q$
計算 1回2時間 × 30日 60時間
保存 入力データ400GB+モデル・結果100GB 500GB・月
外部への転送 結果を社内システムへ毎日1.5GB × 30日 45GB
リクエスト 保存場所の読み書き 毎日10万回 × 30日 3,000千回

ステップ2:単価表と無料枠を当てる。

項目 単価 $p$(架空) 無料枠 $f$(架空)
計算 120円/時間 0
保存 3円/GB・月 5GB
外部への転送 15円/GB 10GB
リクエスト 0.4円/千回 1,000千回

ステップ3:項目ごとに計算する。

ステップ4:Pythonで確かめる。

prices = {"compute_h": 120, "storage_gb": 3, "egress_gb": 15, "req_k": 0.4}   # 架空
free   = {"compute_h": 0,   "storage_gb": 5, "egress_gb": 10, "req_k": 1000}   # 架空
usage  = {"compute_h": 60,  "storage_gb": 500, "egress_gb": 45, "req_k": 3000}

total = 0
for k in usage:
    billable = max(0, usage[k] - free.get(k, 0))
    cost = prices[k] * billable
    total += cost
    print(f"{k:<11} 使用 {usage[k]:>6} 課金対象 {billable:>6} -> {cost:>8,.0f} 円")
print(f"合計 {total:,.0f} 円/月")

usage_forgot = dict(usage, compute_h=720)   # 停止を忘れて1か月動かし続けた場合
c = sum(prices[k] * max(0, usage_forgot[k] - free.get(k, 0)) for k in usage_forgot)
print(f"停止忘れの場合 {c:,.0f} 円/月")

出力:

compute_h   使用     60 課金対象     60 ->    7,200 円
storage_gb  使用    500 課金対象    495 ->    1,485 円
egress_gb   使用     45 課金対象     35 ->      525 円
req_k       使用   3000 課金対象   2000 ->      800 円
合計 10,010 円/月
停止忘れの場合 89,210 円/月

ステップ5:仮定と感度を書く。最大の項目は計算(約72%)で、停止を忘れると約9倍になります。したがって、見積もりと同時に「処理が終わったら自動で計算資源を止める」仕組みを要件に入れます。含めていない項目(ログの保存、監視、ディスク)も仮定として列挙します。

操作して理解する:停止後も残る費用を棚卸しする

試作の後片付けで、資源の一覧から「今も費用が発生しているもの」を探します。状態 state が stopped の仮想サーバーは計算の費用が止まり、ディスクやスナップショットは状態に関係なく容量の費用がかかる、という模擬です。

# 1か月あたりの架空単価
VM_PER_HOUR, DISK_PER_GB, SNAP_PER_GB, IP_IDLE_PER_HOUR = 120, 4, 2, 1
HOURS = 720
resources = [
    {"id": "vm-train",  "type": "vm",       "state": "stopped", "tags": {"owner": "sato", "project": "demand-poc"}},
    {"id": "disk-1",    "type": "disk",     "gb": 200,  "attached_to": "vm-train", "tags": {"owner": "sato"}},
    {"id": "snap-1..5", "type": "snapshot", "gb": 800,  "tags": {}},
    {"id": "vm-test",   "type": "vm",       "state": "running", "tags": {}},
    {"id": "ip-1",      "type": "ip",       "attached_to": None, "tags": {}},
]
total = 0
for r in resources:
    if r["type"] == "vm":
        cost = VM_PER_HOUR * HOURS if r["state"] == "running" else 0
    elif r["type"] == "disk":
        cost = DISK_PER_GB * r["gb"]
    elif r["type"] == "snapshot":
        cost = SNAP_PER_GB * r["gb"]
    elif r["type"] == "ip":
        cost = IP_IDLE_PER_HOUR * HOURS if r["attached_to"] is None else 0
    total += cost
    owner = r["tags"].get("owner", "不明")
    print(f"{r['id']:<10} {r['type']:<9} 所有者={owner:<5} {cost:>7,} 円/月")
print(f"合計 {total:,} 円/月")

出力:

vm-train   vm        所有者=sato        0 円/月
disk-1     disk      所有者=sato      800 円/月
snap-1..5  snapshot  所有者=不明      1,600 円/月
vm-test    vm        所有者=不明     86,400 円/月
ip-1       ip        所有者=不明        720 円/月
合計 89,520 円/月

読み取れること:

片付けの手順は「(1) 所有者に確認 → (2) 必要なデータを保存場所へ退避 → (3) 削除 → (4) 翌日の費用で減ったことを確認」です。

発展:費用の歯止めを重ねる

費用の事故は、1つの仕組みだけでは防げません。性質の違う歯止めを重ねます。

歯止め 何をするか 限界
見積もりと仮定の記録 想定の使用量を文書にする 想定外の使い方は防げない
タグの必須化 所有者・案件・期限のない資源を作れない(または検出する) 付け間違いはある
予算の通知(段階的に) 50%・80%・100%で関係者に通知 一般に通知だけで止まらない。請求データの反映に遅れがあることも多い
上限(クォータ) 作れる台数・大きさを制限 上限内の使いすぎは防げない
自動停止 夜間・休日や、処理完了時に計算資源を止める ディスクなどの保存費用は残る
権限の最小化 資源を作れる人・主体を限る(IAMと最小権限) 権限を持つ人の誤操作は残る
定期の棚卸し 期限切れ・所有者不明の資源を一覧にして確認 実施を忘れると効かない

通知の遅れ:請求の集計は一般にリアルタイムではないため、鍵の漏洩による大量作成のような急な増加には、通知より上限と権限のほうが効きます。

転送費用の設計:大量のデータを外へ出す処理(利用者への動画配信、別リージョンへの複製、他社クラウドへの移行)は、転送費用が支配的になることがあります。保存場所と計算を同じリージョンに置く、結果だけを転送する、などで減らせます(保存・計算・転送の費用の詳細は 「転送・計算・保存費用」(有料版)、費用上限の仕組みは 「費用上限と停止」(有料版))。

よくある失敗

失敗1:無料枠を「費用の上限」だと思う

誤った理解:「無料枠の範囲で使うから0円」として、学習用サーバーを大きめにし、上限も通知も設定しなかった。

free_hours, price = 750, 120   # 架空:月750時間までの無料枠は小さいサーバーだけが対象、という条件だった
used_hours_large = 300         # 実際に使ったのは無料枠の対象外の大きいサーバー
print("想定:", 0, "円")
print("実際:", used_hours_large * price, "円(無料枠の対象外)")
used_small = 900               # 対象のサーバーでも、枠を超えれば請求される
print("対象サーバーで枠超え:", max(0, used_small - free_hours) * price, "円")

出力:想定: 0 円、実際: 36000 円(無料枠の対象外)、対象サーバーで枠超え: 18000 円。

なぜ誤りか:無料枠は「条件を満たす使い方の、一定量までの割引」で、対象の種類・期間・量に条件があり、超えた分や対象外の分は請求されます。使いすぎを止める仕組みではありません。

直し方:無料枠の条件(対象・量・期間)を公式情報で確認して見積もりに書き、別に予算の通知と上限を設定する。

失敗2:「停止したから費用はかからない」と考える

誤った理解:試作のサーバーを停止したので、費用は0円になったと報告した。

なぜ誤りか:停止で止まるのは計算の費用だけです。ディスク・スナップショット・使っていないIPアドレスなどは、停止中も費用が続きます(操作して理解するの例では、停止後も月2,400円以上)。

disk_gb, snap_gb = 200, 800
print("停止中も続く費用:", disk_gb * 4 + snap_gb * 2, "円/月(架空単価)")

出力:停止中も続く費用: 2400 円/月(架空単価)

直し方:試作の終了時は「停止」ではなく、残すもの・消すものを一覧にして判断する。残すデータはオブジェクト保存などの安い保存先へ移し、不要なディスク・スナップショットは削除する。削除前に所有者と、復元が必要かを確認する。

失敗3:外部への転送費用を見積もりから落とす

誤った見積もり:予測結果のファイルを利用者がダウンロードする仕組みで、計算と保存だけを見積もった。

egress_price = 15            # 円/GB(架空)
downloads_gb = 2 * 1000      # 月2TB(1TB=1,000GBで計算)
print("見積もり漏れの転送費用:", egress_price * downloads_gb, "円/月")

出力:見積もり漏れの転送費用: 30000 円/月

なぜ誤りか:クラウドから外へ出るデータ転送には、一般に量に応じた費用がかかります。ダウンロードが多い用途では、計算や保存より大きくなることがあります。

直し方:見積もり表に「外部への転送量」の行を必ず置き、ダウンロード回数×ファイルサイズで見積もる。ファイルの圧縮、必要な列だけの出力、配信網の利用(料金体系は公式で確認)なども検討する。

まとめ

用語

無料枠(free tier)

条件を満たす使い方について、一定量まで料金がかからない割引。超えた分や対象外は請求される。

データ転送(外向き)(data transfer out / egress)

クラウドから外部へデータを送ること。一般に量に応じて課金される。

スナップショット(snapshot)

ある時点のディスクの複製。保存している間、容量の費用がかかる。

タグ(tag / label)

資源に付けるキーと値の札。所有者・案件・期限などを記録し、費用の集計や棚卸しに使う。

上限(クォータ)(quota)

作れる資源の数や量の上限。被害や使いすぎの最大値を抑える。

孤立した資源(orphaned resource)

本体の削除後に残った付属品や、所有者がわからなくなった資源。

よくある質問

なぜ分析者やエンジニアが費用を見積もる必要があるのですか?

費用を決めるのは技術的な選択(サーバーの大きさ、動かす時間、保存するデータの量、転送の仕方)だからです。経理や管理者は請求書を見られますが、どの処理を止めれば減るかはわかりません。見積もりと停止の設計は、作った人の責任です。

停止と削除はどう使い分けますか?

近いうちに再開するなら停止(ディスクの費用は残る)、使い終わったなら削除(データは戻らない)です。迷う場合は、必要なデータだけを安い保存先へ移してから削除し、再開時は構成をコードから作り直せるようにしておくと安全です(構成のコード化は 「構成をコード化」(有料版))。

見積もりと実際の請求がずれるのはどこですか?

使用量の見積もり(処理時間・データ量・アクセス数)のずれ、見積もり漏れの項目(転送・ログ・スナップショット・固定IP)、無料枠の条件の誤解、停止忘れが典型です。請求の内訳を項目別・タグ別に毎月見て、見積もりとの差を記録します。

使用量が10倍になったら費用も10倍になりますか?

従量課金の項目はおおむね比例しますが、無料枠の分だけ比例より速く増えたり、量が多いと単価が下がる段階制の料金があったり、一定の上限を超えると別の構成が必要になったりします。主要な項目について、使用量を変えたときの費用を計算しておく(感度の確認)と安心です。

仕事で費用の上限をどう提案すればよいですか?

見積もり額に余裕を持たせた予算額を決め、50%・80%・100%で通知、作れる資源の上限、資源を作れる権限の限定、夜間・休日の自動停止、所有者・期限のタグの必須化、月1回の棚卸しをセットで提案します。超過時に誰が何を止めるかの手順も決めておきます。

確認問題

問1 仮想サーバーを「停止」した。一般に費用がかかり続けるものはどれか。

  1. ① 計算時間の費用
  2. ② 接続していたディスクとスナップショットの容量の費用
  3. ③ 停止すると全ての費用が止まる
  4. ④ CPUの使用率に応じた費用
解答と解説

正解:②

停止で止まるのは一般に計算の費用です。ディスクやスナップショットは保存している限り容量の費用がかかります。

問2 無料枠についての説明として最も適切なものはどれか。

  1. ① 無料枠があれば、使いすぎても請求は0円に抑えられる
  2. ② 条件(対象・量・期間)を満たす使い方の一定量までの割引で、超えた分や対象外の分は請求される
  3. ③ 無料枠は全てのサービス・全ての種類の資源に同じ量だけある
  4. ④ 無料枠を使うと予算の通知が不要になる
解答と解説

正解:②

無料枠は費用の上限装置ではありません。条件を公式で確認し、通知や上限を別に設定します。

問3 保存 800GB、単価3円/GB・月、無料枠5GB(いずれも架空)のとき、保存の月額はいくらか。

  1. ① 2,385円
  2. ② 2,400円
  3. ③ 2,415円
  4. ④ 795円
解答と解説

正解:①

3 × (800 − 5) = 3 × 795 = 2,385円です。

問4 予算の通知(使用額が設定額に近づいたら知らせる仕組み)について、一般に正しい説明はどれか。

  1. ① 通知が来た時点で資源は自動的に止まる
  2. ② 通知は知らせるだけのことが多く、請求の集計にも遅れがあり得るので、上限や権限の制限と組み合わせる
  3. ③ 通知を設定すれば、費用は設定額を超えない
  4. ④ 通知は請求書の発行日にしか届かない
解答と解説

正解:②

多くの場合、通知だけでは資源は止まりません。急な増加には上限(クォータ)や権限の最小化が効きます。

問5 所有者タグのない仮想サーバーが動き続けているのを見つけた。最も適切な対応はどれか。

  1. ① すぐに削除する
  2. ② 作成者を監査ログで確認して所有者に連絡し、必要なデータの退避を確認してから停止・削除を判断する。今後はタグを必須にする
  3. ③ 費用が少ないので放置する
  4. ④ 自分の権限で使い続ける
解答と解説

正解:②

削除は元に戻せないため、所有者の確認とデータの退避を先に行います。再発防止にタグの必須化と棚卸しを入れます。

問6 見積もりで最も見落としやすく、ダウンロードの多い用途で大きくなり得る費用はどれか。

  1. ① 外部へのデータ転送
  2. ② IAMのユーザー数
  3. ③ 受信ルールの数
  4. ④ リージョンの名前
解答と解説

正解:①

外部への転送は量に応じて課金されることが一般的で、ダウンロードや別リージョンへの複製が多いと支配的になり得ます。

次に学ぶこと

これでCL01の6授業は終わりです。モジュールの総合テストと、自力課題(データ処理の権限図と費用の仮定を作る)に進んでください。

次のモジュール ストレージ・DWH・レイク(有料版) では、保存の形式・データウェアハウス・データレイクと、その費用(「転送・計算・保存費用」(有料版))を学びます。費用の上限と停止の仕組みを構成として作る方法は 「費用上限と停止」(有料版) で扱います。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い