イグレスが請求書を作る
一言でいうと
S3スタンダードの保存は、1GBあたり約0.023ドルです。それをインターネットに一度出すと、1GBあたり0.09ドルが上乗せされます。保存は撒き餌です。
なぜ必要なのか
数字で見ると明確です。1TBを1か月保存するコストは、約23ドルです。その1TBをインターネットに一度出すと、90ドルが追加されます。保存したものを4回読むだけで、保存コストより転送コストのほうが大きくなります。
実際のワークロードで計算すると、さらに極端です。1TBの保存と、月10TBの送信なら、S3は保存23ドル+送信900ドル=約925ドルです。同じワークロードを、イグレスが無料のストレージに置けば、保存コストしかかかりません。筆者が計算したR2基準では15ドルで、差は約54倍です。
この構造を知らずに設計すると、アーキテクチャより先に、請求書が壊れます。
どう動くのか
コストは、4つの軸に分かれます。
保存コストは、GB-月の単価です。S3スタンダードは、最初の50TBが1GBあたり0.023ドルで、階層が下がるほど安くなります。Glacier Deep Archiveは、1GBあたり0.00099ドルまで下がります。スタンダードの約4%です。
リクエストコストは、PUT/GETの件数あたりでかかります。小さなファイルが数百万個あるワークロードでは、この項目が保存コストを超えることがあります。
転送コストが、先ほど見たイグレスです。AWSは、S3だけが高いのではなく、EC2、RDS、NAT Gatewayのすべてが同じ構造です。
取り出しコストは、コールドティアにだけかかります。Glacier系は、保存が安い代わりに、取り出すときにGBあたりの料金と待ち時間がかかります。
ライフサイクルルールが、この4つの軸を扱う道具です。ルールは、プレフィックスやタグで対象を選び、何日後にどの階層へ移すか、または削除するかを決めます。ログを例にすると、30日後に低頻度階層、90日後にアーカイブ、365日後に削除、といった具合です。
現場での姿
階層の移動にもコストがあるという点は、よく見落とされます。移行リクエストごとに料金がかかるため、ごく小さなオブジェクトを数百万個アーカイブに移すと、移行コストが節約分より大きくなることがあります。AWSが、128KB未満のオブジェクトの移行を推奨しない理由です。
それから、最小保存期間があります。Glacier系には、90日または180日の最小課金期間があるので、30日で削除しても、残りの期間の料金がそのまま請求されます。「アーカイブに移して、すぐ消す」は、最悪の組み合わせです。
セルフホスティングに移す判断も、この計算から出てきます。イグレスが大きいワークロードは、自前のストレージのハードウェアコストを、数か月で回収します。反対に、保存量は大きいのにほとんど読まないデータは、クラウドのコールドティアが圧倒的に安いです。
ストレージクラスを移すときについてくる条件
ライフサイクルルールで安いクラスに移すのは簡単そうに見えますが、3つの制約があります。
| 制約 | 内容 | 見落とすと |
|---|---|---|
| 最小保存期間 | IA 30日、Glacier 90日、Deep Archive 180日 | 早く削除しても、その期間分は課金される |
| 最小オブジェクトサイズ | IA系は128KB未満でも128KBとして課金 | 小さなファイルが多いと、かえって高くなる |
| 移行リクエストコスト | オブジェクトごとの移行リクエスト料金 | 数百万個を移すと、それ自体が大金になる |
2つ目が、特に罠です。ログの断片やサムネイルのように、数十KBのファイルが数百万個あると、IAに移して保存単価は下がっても、128KBに切り上げて課金されるため、総額が上がります。小さなファイルは、まとめて1つにする方が、はるかに大きな節約になります。
3つ目も計算します。500万個を移行すると、移行リクエストだけで数十ドルが出ていき、それが数か月分の節約額を食います。少なく、大きく、まれに移すことが原則です。
何がイグレスなのか
同じリージョンの中だからといって、すべてが無料ではありません。境界を正確に知っておく必要があります。
같은 리전 · 같은 AZ → 대개 무료
같은 리전 · 다른 AZ → AZ 간 요금 (양방향)
같은 리전 · VPC 엔드포인트 경유 → 무료 또는 저렴
다른 리전 → 리전 간 요금
인터넷·CDN 원본 요청 → 가장 비싸다
Kubernetesで、Podがどのアベイラビリティゾーン(AZ)に立ち上がるかを気にしないと、S3のゲートウェイエンドポイントがない状態では、NATゲートウェイを通って、インターネットに出てから戻ってきます。NATの処理料金とイグレスが、一緒にかかります。ゲートウェイエンドポイントを1つ作れば、この経路がなくなり、料金もなくなります。
料金を実際に確認する方法
推定せず、実測します。
- S3 Storage Lens: バケットごとの階層の分布、小さなオブジェクトの比率、未完了のマルチパートの容量を、1つの画面で見ます。上で述べた罠が、すべてここに見えます。
- コスト配分タグ: バケットとプレフィックスに、チームや環境のタグを付けると、請求書がチームごとに分かれます。これがないと、「S3のコスト3,000ドル」という1行だけが残ります。
- リクエストメトリクス(CloudWatch): GET・PUT・LISTの件数です。LISTが異常に多いときは、コードが毎回一覧をなめているということで、それは、たいてい間違ったアクセスパターンです。
次のクイズで確認すること
このモジュールは、概念だけを扱います。ライフサイクルルールの適用は、前のバージョニングのラボですでに扱いました。次のモジュールで、小さなファイルのワークロードを2つのストレージに入れて、特性を直接比較します。