クラウドの従量課金とリソース上限
課金量と上限の対象を読み取り、追加拒否の条件や停止後に残る費用を説明します。
説明
クラウドの費用は、台数だけでなく稼働時間・保存量・転送量などから計算されます。一方、クォータは同時に使える資源などの上限です。費用を支払う予定があっても、クォータを超える追加要求が通るとは限りません。
教材用の単価と利用記録を使い、計算資源、保存、転送の金額を分けて集計します。その後、同時稼働vCPUの上限8に対して資源を追加し、停止によって空くCPU枠と、停止後も残る保存量を確認します。単価と上限はこの演習の固定条件です。
課金量と上限の対象を読み取り、追加拒否の条件や停止後に残る費用を説明します。
1課金と上限の対象
単価表の計算資源は台・秒、保存はGB・月、転送はGB単位です。CPU数そのものを単価へ掛ける契約にはしていません。
cat units.txt単位と集計条件を読む
cat rates.json教材用の単価と上限を表示するvCPUの上限8は同時稼働数の制限で、単価表とは別の条件です。実際の契約でも、課金対象とクォータ対象の単位や範囲をそれぞれ確認します。
2二台の利用記録から金額を計算
aは3600秒、bは7200秒稼働した記録です。保存量もそれぞれの期間に対応し、転送量はその期間の合計です。
cat usage.csv時間・保存量・転送量の記録を読む
python3 account.py bill三つの課金項目を別々に計算する計算資源はaが0.072、bが0.144です。保存量はGB×利用秒数÷2592000×0.10、転送はGB×0.09で計算します。小数はDecimalで計算し、表示時に小数6桁へ丸めています。
3現在の同時稼働CPUを集計
利用履歴の金額とは別に、現在の資源一覧でクォータの使用量を調べます。
python3 account.py list現在の資源とクォータ残量を表示するaは2vCPU、bは4vCPUで使用中は6、残りは2です。過去に何秒使ったかではなく、現在稼働しているCPU数を合計しています。
4四CPUの追加が拒否される条件
4vCPUのcを追加する要求を評価します。
python3 account.py create --id c --vcpu 44vCPUの資源を追加要求する現在6に4を足すと10となり、上限8を超えるため拒否されます。追加要求が拒否された場合、cが作成済みになっていないことも確認します。
5追加を拒否された後、CPU数を上限まで増やす
一覧を確認してから、2vCPUのcを追加します。
python3 account.py list拒否後に状態が変わっていないことを確認する
python3 account.py create --id c --vcpu 2残り枠と同じ2vCPUを追加する
python3 account.py list追加後の残量を確認する拒否後はaとbだけで6vCPUのままでした。2vCPUの追加は6+2=8で受け付けられ、残りは0になります。上限ちょうどは許可する条件です。
6停止前の一時間分を試算
現在の3台が次の1時間も稼働し、新たな転送はない条件で金額を計算します。
python3 account.py forecast現在の状態が一時間続く場合の金額を計算する計算資源は3×3600×0.00002=0.216です。保存量はaの10GBとbの20GBが残り、保存費用も加算されます。追加したcの保存量はこのモデルでは0です。
7停止で空くCPU枠と残る保存量
bを停止し、現在の使用量を表示します。停止は保存領域の削除を伴わない契約です。
python3 account.py stop --id bbの稼働状態を停止へ変更する
python3 account.py listCPU使用量と保存量を確認する同時稼働はaとcの合計4vCPU、残りは4になります。一方、bのGB_storage=20は残っています。CPU枠が空いたことと保存費用が消えることは同じではありません。
8停止後の金額を同じ条件で計算
再び、次の1時間に転送がない条件で試算します。
python3 account.py forecast停止後の稼働台数と保存量で再計算する計算資源は2台分の0.144へ減りますが、保存費用は30GB分のままです。停止後に何が残るかを資源一覧で調べてから、削減できる金額を計算します。
まとめ
利用量と単価の単位を合わせ、計算資源・保存・転送を分けて計算します。
クォータは課金とは別の制限で、この例では同時稼働vCPUの合計を評価します。
停止でCPU枠が空いても保存領域は残るため、資源ごとの状態と費用を確認します。
操作履歴と解説を振り返れます。
シェル / Python 3
cat units.txt
cat rates.json教材用の単価。実サービスの料金表ではない。
計算資源は1台1秒につき0.00002通貨単位。
保存は10進GBで1か月0.10、月は2592000秒と固定する。
外向き転送は10進GBで0.09。税・割引・最低課金単位は含めない。
クォータはこの契約で同時稼働できるvCPUの合計8。停止中のCPUは数えず、保存領域は残す。
{
"compute_per_second": "0.00002",
"storage_per_GB_month": "0.10",
"egress_per_GB": "0.09",
"seconds_per_billing_month": 2592000,
"quota_vcpu": 8
}cat usage.csv
python3 account.py billid,seconds,vcpu,GB_storage,GB_egress a,3600,2,10,2 b,7200,4,20,3 a compute=0.072000 storage=0.001389 egress=0.180000 subtotal=0.253389 b compute=0.144000 storage=0.005556 egress=0.270000 subtotal=0.419556 total=0.672944
python3 account.py lista {"GB_storage": 10, "running": true, "vcpu": 2}
b {"GB_storage": 20, "running": true, "vcpu": 4}
used_vcpu=6 quota_vcpu=8 remaining_vcpu=2python3 account.py create --id c --vcpu 4rejected: 6+4>8
python3 account.py list
python3 account.py create --id c --vcpu 2
python3 account.py lista {"GB_storage": 10, "running": true, "vcpu": 2}
b {"GB_storage": 20, "running": true, "vcpu": 4}
used_vcpu=6 quota_vcpu=8 remaining_vcpu=2
created c
a {"GB_storage": 10, "running": true, "vcpu": 2}
b {"GB_storage": 20, "running": true, "vcpu": 4}
c {"GB_storage": 0, "running": true, "vcpu": 2}
used_vcpu=8 quota_vcpu=8 remaining_vcpu=0python3 account.py forecastnext_hour_no_egress compute=0.216000 storage=0.004167 total=0.220167
python3 account.py stop --id b
python3 account.py liststopped b storage retained
a {"GB_storage": 10, "running": true, "vcpu": 2}
b {"GB_storage": 20, "running": false, "vcpu": 4}
c {"GB_storage": 0, "running": true, "vcpu": 2}
used_vcpu=4 quota_vcpu=8 remaining_vcpu=4python3 account.py forecastnext_hour_no_egress compute=0.144000 storage=0.004167 total=0.148167
演習完了