第7章 ストレージの使い分け(EBS・S3とAWS CLI)
AWSには複数の種類のストレージサービスがあり、それぞれ適した用途が異なります。EBS・インスタンスストア・S3の違いと、AWS CLIを使ったS3操作の基本を扱います。
EBS(Elastic Block Store)— ブロックストレージ
EBSは、ネットワーク経由で接続される仮想ディスクです。lsblk・mount・dfなど、これまで学んだLinuxのディスク管理コマンドがそのまま使えます。設定次第で、インスタンスを停止・終了してもEBSボリューム自体を独立して残せるほか、スナップショットによるバックアップも可能です。
インスタンスストア — 一時ストレージ
インスタンスストアは、インスタンスに物理的に直結された高速なストレージです。ただし、インスタンスの停止や終了によってデータが失われるという制約があるため、永続化が必要なデータではなく、一時的なキャッシュや作業領域に向いています。
S3(Simple Storage Service)— オブジェクトストレージ
S3は、一般的なファイルシステムのようにマウントして使うのではなく、キーと値(オブジェクト)の形でデータを保存・取得する仕組みです。通常のcpやmvではなく、AWS CLIのaws s3 cpやaws s3 syncコマンドを使って操作します。
$ aws s3 cp report.txt s3://my-bucket/reports/ # 1ファイルをアップロード
$ aws s3 sync ./local-dir s3://my-bucket/prefix/ # ディレクトリを同期(差分のみ転送)
aws s3 syncは、これまで学んだrsyncと考え方が似ており、変更があった差分だけを転送します。rsyncの使い方を覚えていれば、感覚的につかみやすいコマンドです。
| 永続性 | アクセス方法 | 主な用途 | |
|---|---|---|---|
| EBS | 設定次第で独立して永続化可能 | lsblk・mount・dfなど通常のLinuxコマンド | OS領域、データベースのデータ領域など |
| インスタンスストア | インスタンス停止・終了で消失 | 通常のLinuxコマンド | 一時キャッシュ、作業領域 |
| S3 | 高い耐久性で永続化 | aws s3 cp/syncなどのAPI経由 | バックアップ、静的ファイルの保管・配信 |
EBSスナップショットによるバックアップ
EBSボリュームは、任意のタイミングでスナップショットとしてS3にバックアップできます。スナップショットは差分ベースで保存されるため、2回目以降は変更のあった部分だけが新たに保存され、ストレージコストを抑えられます。スナップショットから新しいEBSボリュームを作成すれば、ある時点の状態を別のインスタンスで復元することも可能です。定期的なスナップショット取得は、Linuxでのtarやrsyncによる定期バックアップと同じ発想の、AWS上での実装方法だと捉えておくとよいでしょう。
複数インスタンスで共有できるEFS
EBSは基本的に1つのインスタンスに接続して使うものですが、複数のインスタンスから同時にマウントして共有したいファイル領域が必要になる場合もあります。そうした用途には、EFS(Elastic File System)というネットワークファイルシステムのサービスが使われます。NFSプロトコルでマウントする点は、これまで学んだNFSサーバーの構築・運用の知識がそのまま応用できる部分です。
EBSのボリュームタイプという選択肢
EBSには複数のボリュームタイプがあり、用途に応じて選ぶ必要があります。汎用SSDであるgp3は多くの用途に適したバランス型で、特別な理由がなければまず検討する標準的な選択肢です。データベースのように高いI/O性能が継続的に必要な用途には、プロビジョンドIOPS SSDであるio2が向いています。逆に、アクセス頻度の低いログの長期保管などには、より安価なHDDタイプのボリュームが適しています。これは、これまで学んだディスクの種類(HDD/SSD)や、RAIDレベルによる性能・耐障害性のトレードオフを検討する考え方と本質的に同じで、「何を優先するか」によって適切な選択肢が変わる点も共通しています。
S3のストレージクラスとライフサイクル
S3にも複数のストレージクラスがあり、アクセス頻度の高いデータは標準ストレージクラスに、アクセス頻度が下がった古いデータはより安価なストレージクラス(Glacierなど)に自動的に移動させるライフサイクルルールを設定できます。たとえば「30日以上アクセスのないログは低頻度アクセス用のクラスへ、180日以上経過したログはさらに安価なアーカイブ用のクラスへ」といった設定をしておけば、手作業でファイルを移動・削除しなくても、データの鮮度に応じたコスト最適化が自動的に進みます。Linuxでtar・gzipで古いログを圧縮してから別のディスクに退避する運用を、AWSでは設定ひとつで自動化できるとイメージすると分かりやすいでしょう。
アクセスパターンが読みにくいデータ(頻繁にアクセスされる時期とほとんどアクセスされない時期が混在するようなデータ)には、S3 Intelligent-Tieringというストレージクラスも選択肢になります。これはアクセス頻度をAWS側が自動的に監視し、ライフサイクルルールを個別に設計しなくても、最適な階層へ自動的にデータを移動してくれる仕組みです。ライフサイクルルールを自分で細かく設計する手間と、自動判定に任せる手軽さのどちらを取るかは、データの性質次第で使い分けます。
この章のまとめ
EBSは通常のLinuxコマンドで扱える永続的なブロックストレージ、インスタンスストアは高速だが一時的なストレージ、S3はaws s3コマンドで操作するオブジェクトストレージ、という3者の役割の違いを押さえました。さらに、EBSスナップショットによるバックアップと、複数インスタンスで共有できるEFSについても触れました。次章では、この編で扱った内容をチェックリスト形式で振り返ります。