Upgrade to Pro — share decks privately, control downloads, hide ads and more …

S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く

S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く

S3のストレージクラスは、仕様差分を十分に理解しないまま運用へ組み込むと、設計や自動化に影響を及ぼすことがあります。本セッションでは、S3の各ストレージクラスを実運用で扱う際に押さえておくべき仕様と、運用設計・自動化における注意点を深掘りします。
特にGlacier系クラスでは、復元処理を伴うことでオブジェクトの扱いが段階的に変化し、API応答やツール連携時の挙動に差分が生じます。こうした状態遷移は、実装時に見落とされがちなポイントです。
さらに、ライフサイクルによるクラス移行のタイミングや、Intelligent-Tieringのアーカイブ層を含めた挙動差分、SFTP経由でのクラス別の振る舞いなど、運用や自動化に直結する仕様も取り上げます。
参加者は「見える」「ある」「使える」の違いを整理し、S3ストレージクラスを正しく扱うための設計指針を持ち帰ることができます。

Avatar for ya_ma23

ya_ma23

March 06, 2026
Tweet

More Decks by ya_ma23

Other Decks in Programming

Transcript

  1. ©Fusic Co., Ltd. 0 CONFIDENTIAL +"84%":4 .BTIVQGPSUIF'VUVSF S3ストレージクラスの「⾒える」「ある」 「使える」は全部違う ─

    体験から⾒た、仕様の深淵を覗く 2026.03.07 株式会社Fusic プリンシパルエンジニア ⼭本光彦
  2. ©Fusic Co., Ltd. 1 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e ⼭本 光彦(41)

    Mitsuhiko Yamamoto 株式会社Fusic所属 熊本市出⾝・在住 フルスタックエンジニア AWS歴13年 ⾃⼰紹介 はじめに
  3. ©Fusic Co., Ltd. 3 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 1. 体験/What

    2. 定義/Where 3. 深淵/Why 4. 設計/How アジェンダ イントロダクション SFTPで起きた謎の障害 S3は状態遷移システム 時間が持ち込む不確実性 時間を扱うアーキテクチャ
  4. ©Fusic Co., Ltd. 5 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e SFTP利⽤時に起きたこと 体験/what

    前提の構成 TransferFamily S3 List Get 「ls」はできている サイズも表⽰されている 実際のSFTPクライアント画⾯
  5. ©Fusic Co., Ltd. 6 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e SFTP利⽤時に起きたこと 体験

    what 前提の構成 TransferFamily S3 List Get ファイルがダウンロード不可 エンドユーザーは失敗の理由がわからない(壊れている?ネットワーク不備?) 実際のSFTPクライアント画⾯
  6. ©Fusic Co., Ltd. 7 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e SFTP利⽤時に起きたこと 体験

    what 前提の構成 TransferFamily S3 List Get 存在している が 利⽤可能ではない 実際のSFTPクライアント画⾯
  7. ©Fusic Co., Ltd. 9 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e S3は「保存場所」ではなく「状態遷移システム」である 定義

    where 「⾒える / ある / 使える」の定義 概念 API 意味 ⾒える ListObject ⼀覧表⽰が可能である ある HeadObject メタデータが参照可能である 使える GetObject データの取得が可能である 存在すること(⾒える・ある)は保証される ただし、 「即時」に使えることは保証しない
  8. ©Fusic Co., Ltd. 10 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e S3は「保存場所」ではなく「状態遷移システム」である 定義

    where 低速ストレージ(Glacier系)における状態遷移 File StorageClass= Standard アーカイブ 処理 File StorageClass= Glacier Restore リクエスト File StorageClass= Glacier Restore 完了 File StorageClass= Glacier File StorageClass= Glacier 再アーカイブ (Restore中) (Restored) (Archive)
  9. ©Fusic Co., Ltd. 11 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e S3は「保存場所」ではなく「状態遷移システム」である 定義

    where 低速ストレージ(Glacier系)における状態遷移 File StorageClass= Standard アーカイブ 処理 File StorageClass= Glacier Restore リクエスト File StorageClass= Glacier Restore 完了 File StorageClass= Glacier File StorageClass= Glacier 再アーカイブ Restored状態は永続ではない 取得可能状態には期限がある (Restore中) (Restored) (Archive)
  10. ©Fusic Co., Ltd. 13 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 時間が持ち込む4つの「不確実性」 深淵

    why 取得不能状態が存在する ストレージクラス ⾒える ある 使える Standard ◦ ◦ ◦ S3 Intelligent-Tiering ◦ ◦ △ S3 Standard-IA ◦ ◦ ◦ S3 One Zone-IA ◦ ◦ ◦ S3 Express One Zone ◦ ◦ ◦ S3 Glacier Instant Retrieval ◦ ◦ △ S3 Glacier Flexible Retrieval ◦ ◦ △ S3 Glacier Deep Archive ◦ ◦ △ 即時に使うことができない 同期APIと相性が悪い
  11. ©Fusic Co., Ltd. 14 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 時間が持ち込む4つの「不確実性」 深淵

    why 取得可能状態には期限がある ⼀度取得できても永遠に取得できるわけではない 状態管理が必要であることを意味する { "ResponseMetadata": { ... "HTTPHeaders": { ... "x-amz-restore-expiry-days": 1 ... }, }, ... } ※Glacierから復元したファイル のHeader情報の⼀部
  12. ©Fusic Co., Ltd. 15 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 時間が持ち込む4つの「不確実性」 深淵

    why 内部状態が外形から判別できない 「ストレージクラス」は状態を完全には表していない 0⽇ Standard 30⽇ Intelligent- Tiering 90⽇ Glacier Flexible Retrieval 180⽇ Glacier Deep Archive 365⽇ 削除 Intelligent-Tiering Intelligent-Tiering Intelligent-Tiering StorageClass
  13. ©Fusic Co., Ltd. 16 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 時間が持ち込む4つの「不確実性」 深淵

    why ライフサイクル移⾏の⾮同期性 バッチ評価であり、即時移⾏ではない いつ取得不能になるかを完全に制御することができない 0⽇ Standard 30⽇ Intelligent- Tiering 90⽇ Glacier Flexible Retrieval 180⽇ Glacier Deep Archive 365⽇ 削除 設定した⽇数が経過した後の「翌⽇午前0時(UTC)」実⾏
  14. ©Fusic Co., Ltd. 17 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 時間が持ち込む4つの「不確実性」 深淵

    why 存在 ≠ 利⽤可能 ↓ 利⽤可能にも期限がある ↓ 状態が⾒えない ↓ いつ変わるか分からない
  15. ©Fusic Co., Ltd. 19 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how 分岐軸を「種類」から「利⽤可能性」へ移す 判断すべきは そのオブジェクトが「今取得可能」か if storage_class == ‘STANDARD’ xxx else if storage_class == ‘GLACIER’ yyy … 良くないプログラムコード例
  16. ©Fusic Co., Ltd. 20 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how Glacier移⾏時における判断プロパティ 状態/遷移 storage_class RestoreExpiry Date RestoreStatus IsRestoreIn Progress 備考 1 STANDARD STANDARD 2 GLACIER GLACIER (空) false 3 GLACIER (Restore状態) GLACIER YYYY/MM/DD true 4 STANDARD→ GLACIER - - - - 瞬時のため取 得できず 5 GLACIER→ GLACIER(Restore 状態) GLACIER (空) true 6 GLACIER(Restore 状態)→ GLACIER GLACIER YYYY/MM/DD true 3と同じ
  17. ©Fusic Co., Ltd. 21 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how 同期層と⾮同期層の分離 HTTPS取得イメージ SFTP取得イメージ
  18. ©Fusic Co., Ltd. 22 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how 同期層と⾮同期層の分離 復元はダウンロード処理と分離させ ⾮同期ワークフローとして扱う
  19. ©Fusic Co., Ltd. 23 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how ダウンロード 要求 GetObject (即時DL) 取得可 能? YES NO Restore Object (復元ジョブ) 同期層と⾮同期層の分離
  20. ©Fusic Co., Ltd. 25 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how 同期層と⾮同期層の分離 "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":”Deny", "Action":"s3:ListObject", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": {”/path/to/glacier"} } } ] ※アーカイブリスト がある前提 アーカイブオブジェクトは⾒せない
  21. ©Fusic Co., Ltd. 26 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how ユーザー導線とアーカイブの分離 ユーザーがアクセスするのはデリバリバケットのみ デリバリ バケット アーカイブ バケット File Glacier化 File 復元 HTTPS SFTP 導線
  22. ©Fusic Co., Ltd. 27 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 設計原則:責務分離で「時間」を扱う 解法

    how SLAを「保存」と「取得」で分けて設計する 「時間軸」によるSLAの定義が必要 定義 意味 保存SLA データが失われない 取得SLA どのくらいの時間で取得できるか 即時取得SLA 今すぐ取得できるか
  23. ©Fusic Co., Ltd. 29 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 結論 まとめ

    ・SFTPは「取得できるファイル」を前提にしたインターフェース ・取得不能状態を混ぜると、障害に⾒えるのは必然 冒頭のSFTPでは何を間違えていたか
  24. ©Fusic Co., Ltd. 30 CONFIDENTIAL #jawsug #jawsdays2026 #jawsdays2026_e 結論 まとめ

    まとめ ・S3はただのファイル置き場ではない ・状態遷移と期限を持つ ・設計で扱うべき対象は容量より時間 ・S3は容量の設計ではない。時間の設計である
  25. ©Fusic Co., Ltd. 31 CONFIDENTIAL Thank You We are Hiring!

    https://recruit.fusic.co.jp/ ご清聴いただきありがとうございました