クォータ
無料プランには10 GiBのファイルストレージが含まれ、Pro プランには100 GiBが含まれます。それを超えると、無料はアップロードを拒否し、Pro は差分を課金します。どちらでもファイルの読み取りと削除は引き続き行えます。
| 項目 | 無料 | プロ |
|---|---|---|
| ストレージ | 10 GiB | 100 GiB込み |
| 含まれる量を超えると | アップロード拒否 | GiB・月あたり $0.015、支出上限まで |
| オブジェクト数 | 制限なし | 制限なし |
| キーの長さ | 1024 バイト | 1024 バイト |
| 一覧 1 ページあたりの件数 | 既定 100 件、最大 1,000 件 | 同じ |
クォータを超えると
ここで 2 つのプランの動作が分かれます。
無料プランでは、クォータは壁です。 10 GiB に達すると put と presign(PUT) が 507 quota_exceeded で拒否されます。課金に変わることはありません。
Pro プランでは、クォータは課金項目です。 100 GiB を超えてもアップロードは続き、超えて保持している分は超過使用量として課金されます。拒否されるのは組織の支出上限に達したときだけです。以下を参照してください。
どちらのプランでも、ブロックされるのは書き込みだけです。
| 操作 | 無料、クォータ超過 | Pro、クォータ超過 | Pro、支出上限到達 |
|---|---|---|---|
put | 507 quota_exceeded | 動作、課金 | 507 quota_exceeded |
presign(PUT) | 507 quota_exceeded | 動作、課金 | 507 quota_exceeded |
get、head、list、delete、presign(GET) | 引き続き利用可能 | 引き続き利用可能 | 引き続き利用可能 |
容量がいっぱいの状態でもファイルを取得・削除できてはじめて、空き容量を確保できます。
try {
await env.storage.put(key, body);
} catch (e) {
if ((e as { status?: number }).status === 507) {
return new Response("Storage is full", { status: 507 });
}
throw e;
}Pro の超過使用量の課金方法
ストレージはカウンターではなくゲージなので、課金されるのはピークでも合計でもなく、1 か月間に保持していた量の平均です。サービスは組織のオブジェクトバイト数を 1 時間に 1 回サンプリングし、サンプルを平均します。その平均のうち 100 GiB を超える部分が GiB・月あたり $0.015 で課金され、GiB 単位で切り捨てられます。2 バイト超えた組織に明細行が立つことはありません。
価格と含まれる量は同じ単位 GiB(230 バイト)を使うため、「100 GiB 込み、3 GiB 超過」は読んだとおりに計算できます。
超過使用量はリクエストと CPU の超過使用量と同じ月間合計に加算され、支出上限が判定するのはその合計です。上限はデフォルトで有効で、定額料金に加えて月 $20 です。合計が上限に達すると、組織は翌月 1 日まで支出を停止します。リクエストには 429 budget_exhausted が返り、アップロードは無料プロジェクトがクォータで受けるのと同じ 507 quota_exceeded で拒否されます。その間も読み取りと削除は続けられます。
現在の使用量の確認
runlot storage status
runlot storage status --jsonrunlot usageダッシュボードの ファイルストレージ タブでも同じ値を確認でき、上の 2 つの動作のどちらが自分のプランに適用されるかも表示されます。
通知
どちらも組織の admin に送られ、種類ごとにプロジェクトあたり 24 時間に 1 回だけ送信されます。ダッシュボードの組織画面でも確認できます。
| 通知 | タイミング |
|---|---|
storage_near_quota | 使用量がクォータの 90% に達した。両プランで送信されます。 |
storage_quota_hit | アップロードが実際に 507 で拒否された。無料プランのみです。Pro での 507 は支出上限を意味し、そのときの通知は上限を明記する budget_exhausted です。 |