こんにちは。
今回は JAWS-UG 初心者支部とStorage-JAWSのコラボ勉強会に向けて、AWSが提供しているストレージサービス再入門と題して、復習と再確認を行います。
AWS には、様々なジャンル・分類のストレージサービスが存在しますが、代表的なサービスとそのユースケースについてみていきます。
AWS のストレージサービス
AWS のストレージサービスは大きく分けると以下の3つに分類されます。
- ブロックストレージ
- ファイルストレージ
- オブジェクトストレージ
ここから、各分類ならびに各サービスについて簡単に説明します。
ブロックストレージ
ハードディスクやSSDのように、Amazon EC2 などのコンピュートサービスに接続してデータを読み書きするために使うストレージサービスです。
Amazon Elastic Block Store(Amazon EBS)
Amazon EC2 インスタンスにEBSボリュームをアタッチして使用するストレージサービスです。一般的なコンピュータやPCサーバーに接続されたローカルドライブと同様な使い方ができるものです。
EBS ボリューム
EBS ボリュームは、1つのアベイラビリティゾーンに配置されたAmazon EBSを提供するための複数のサーバー間で自動的にレプリケート(複製)が行われます。そのため、仮に1つのサーバーで障害が発生してもデータが失われるのを防いでいます。
EBS ボリュームには、様々なワークロード/ユースケースに向けた複数のタイプ、メディアが存在します。
また、大規模なシステムになってくると、複数のEC2インスタンスから共有ディスクのようにEBSボリュームを使いたいといったニーズが出てきますが、その場合は、io1もしくはio2 Block Express のタイプを利用します。
以下の表では、EBSボリュームで選択できるボリュームタイプやメディアの種別などをまとめています。
| タイプ | メディア | サイズ | ユースケース | 耐久性 | 複数接続 | ブートボリューム | 備考 | 
|---|---|---|---|---|---|---|---|
| gp3 | SSD | 1 GiB~16 TiB | ・トランザクションワークロード ・仮想デスクトップ ・中規模の単一インスタンスデータベース ・低レイテンシーのインタラクティブなアプリケーション ・ブートボリューム ・開発・テスト環境 | 99.8% ~ 99.9% | × | 〇 | gp2より最大スループットが高い | 
| gp2 | SSD | 1 GiB~16 TiB | ・トランザクションワークロード ・仮想デスクトップ ・中規模の単一インスタンスデータベース ・低レイテンシーのインタラクティブなアプリケーション ・ブートボリューム ・開発・テスト環境 | 99.8% ~ 99.9% | × | 〇 | - | 
| io2 Block Express | SSD | 4 GiB ~ 64 TiB | 以下が必要なワークロード ・ミリ秒未満のレイテンシー ・持続的な IOPS パフォーマンス ・64,000 IOPS または 1,000 MiB/秒を超えるスループット | 99.999% | 〇 | 〇 | - | 
| io1 | SSD | 4 GiB ~ 16 TiB | ・持続的な IOPS パフォーマンスまたは 16,000 IOPS 以上のパフォーマンスを必要とするワークロード ・I/O 集約型のデータベースワークロード | 99.8%~99.9% | 〇 | 〇 | - | 
| st1 | HDD | 125 GiB ~ 16 TiB | ・ビッグデータ ・データウェアハウス ・ログ処理 | 99.8~99.9% | × | × | - | 
| sc1 | HDD | 125 GiB ~ 16 TiB | ・アクセス頻度の低いデータ用のスループット指向ストレージ ・低いストレージコストが重視されるシナリオ | 99.8~99.9% | × | × | - | 
| standard | 磁気ボリューム | 1 GiB ~ 1 TiB | データへのアクセス頻度が低いワークロード | - | × | 〇 | 旧世代 | 
🌟容量の単位:GB?GiB?🌟
上記の表で容量の記載が GiB や TiB になっていることに気づいた方もいらっしゃられると思います。
GBは10進数に基づく記載でストレージメーカーや通信業界で使われます。
GiBは2進数に基づく記載でOSやプログラミング、技術的な文脈で使われます。
1GB =1,000,000,000バイト
1GiB=1,073,741,824バイト
1GB  はおよそ 0.931GiB
1GiB はおよそ 1.074GB
OS は計算に2進数を使っているので、500GB の SSD を買ってきてパソコンにつないでも、OSから見ると 465GB(GiB) と表示されてしまうのです。
ストレージメーカーは数字が大きく見えるので、GB表記にする傾向があるようです。
EBS スナップショット
バックアップ機能として、EBS スナップショットが用意されています。
このEBSスナップショットは非公開の(アクセスできない)Amazon S3バケットに保存されます。
バックアップの仕組みは、増分バックアップ、つまり、最新のスナップショットを作成した時点から変更のあったボリューム上のブロックのみが保存されます。
インスタンスストア(エフェメラルディスク)
Amazon EC2 を提供するホストコンピュータ(仮想化サーバ)に物理的に接続されたディスクによって提供されるブロックストレージのことです。
一般的なPCサーバーでいうところの内蔵ディスクをイメージするとよいと思います。
インスタンスストアは、サポートされているインスタンスタイプを選択して EC2 インスタンスを起動することで利用可能になります。
ただし、EC2 インスタンスを停止したり、終了したりするとデータが揮発します。
データを永続化させたい場合は、EBSボリュームやAmazon EFS、Amazon S3といった別のストレージにコピーする必要があります。
データを永続化できない代わりに、以下のメリットがあります。
- 無料で使える
- 非常に性能が良い
そのため、機械学習や動画変換などの超高速なデータ転送や読み書き回数が必要なワークロードの一時データの格納先として用いることを推奨しています。
余談ですが、インスタンスタイプによっては複数のインスタンスストアを利用可能になっています。ソフトウェアRAID構成を用いることで、さらにパフォーマンスを向上させるといった使い方も可能です。
よく使われる RAID(Redundant Arrays of Inexpensive Disks)の種類は以下の通り
- RAID0(ストライピング):上図のようにデータをブロック単位で分割し複数のボリュームに分散記録し高速化。冗長性・耐障害性はない。
- RAOD1(ミラーリング):同じデータを複数のボリュームに記録して冗長化。耐障害性を上げるが容量効率は悪い。
- RAID5(分散パリティ):パリティデータ(誤り検出符号)とともにブロックデータを複数ボリュームに分散記録することでボリュームが1台までなら故障しても、ボリュームを入れ替えることで復旧できる。
- RAID6(複数分散パリティ):パリティデータを2種類記録することで2台までなら故障しても復旧できる。
EC2 インスタンス起動時に以下のスクリプトをユーザーデータに設定しておくことで、RAID0構成のボリュームをマウントすることができます。
この例では、インスタンスストアが4つあるインスタンスタイプ(例:m5dn.16xlarge)で動作を確認しています。
使用するインスタンスストア数などを変更すれば、使用したいインスタンスタイプに合わせることが可能です。
#!/bin/bash
set -eux
# mdadm がインストールされていない場合に備えてインストール
dnf install -y mdadm
# NVMe デバイスを明示的に指定(4つのインスタンスストア)
devices=(/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1)
# RAID 0 を作成
mdadm --create /dev/md0 --level=0 --raid-devices=4 ${devices[@]}
sleep 10
# RAID構成を保存
mdadm --detail --scan >> /etc/mdadm.conf
# ファイルシステムを作成(ext4)
mkfs.ext4 /dev/md0
# マウントポイント作成
mkdir -p /mnt/raid0
# fstab に追加して自動マウント設定
echo '/dev/md0 /mnt/raid0 ext4 defaults,nofail 0 2' >> /etc/fstab
# マウント実行
mount -a
EC2インスタンスが起動したら接続して、dfコマンドで確認します。
一番下に /mnt/raid0 の表示がされているので、ユーザーデータによるRAID0構成の設定に成功しています。
$ df -h
Filesystem        Size  Used Avail Use% Mounted on
devtmpfs          4.0M     0  4.0M   0% /dev
tmpfs             125G     0  125G   0% /dev/shm
tmpfs              50G  700K   50G   1% /run
/dev/nvme0n1p1    8.0G  1.6G  6.4G  20% /
tmpfs             125G     0  125G   0% /tmp
/dev/nvme0n1p128   10M  1.3M  8.7M  13% /boot/efi
/dev/md0          2.2T   28K  2.1T   1% /mnt/raid0
この例では、600GiB の容量をもつ、4個のインスタンスストアで RAID0 を構成し、約2.2TBのRAID0ボリュームとしてマウントしています。
ファイルストレージ
NFS や SMB などの共有ファイルシステムを用いるストレージサービスです。ファイルサーバーが公開している共有ファイルシステムを Amazon EC2 インスタンスなどからマウントして使用します。
Amazon Elastic File System(Amazon EFS)
NFS(Network File System)をフルマネージドでAWSが提供する共有ファイルシステムのストレージサービスです。Linux ベースのEC2インスタンスなどから同時アクセス可能な共有ストレージとして利用可能です。
また、複数のアベイラビリティゾーンにまたがる設計となっているため、可用性とデータ冗長性が確保されています。これにより、複数のアベイラビリティゾーンで冗長化されたWebサーバーやアプリケーションサーバーから互いに同じファイルにアクセスしたいといった場合で、S3を使いづらいといった場合にも効果的です。
Amazon FSx
NFS による共有ファイルシステム以外にも、世の中には様々なファイルストレージサービスが存在しますが、Amazon FSx シリーズは多種多様な共有ファイルシステムを提供するマネージドサービスです。
本記事執筆時点では、以下の4つの共有ファイルストレージと1つの共有キャッシュファイルシステムに対応しています。
- Amazon FSx for NetApp ONTAP
- Amazon FSx for OpenZFS
- Amazon FSx for Windows File Server
- Amazon FSx for Lustre
- Amazon File Cache(FSx とはついていませんが、FSx for Lustreベースのサービスのようです)
Amazon FSx for NetApp ONTAP
NetApp社のNAS装置用のプラットフォームOSであるONTAPファイルシステムをAWSマネージドサービスとして提供しているストレージサービスです。NFS や SMB に加えてその他の接続方式やONTAP独自の機能が利用可能です。
オンプレミスなどで NetApp ONTAP を利用している場合、移行やハイブリッドクラウドとして利用するのに適しています。
Amazon FSx for NetApp ONTAP で提供される接続方式の例:
- NFS
- SMB
- CIFS
- iSCSI
Amazon FSx for OpenZFS
OpenZFS ファイルシステムを提供するマネージドサービスです。NetApp ONTAPと同様にすでにOpenZFSを利用している場合、使い慣れた機能をAWS上で利用可能になるため、移行やハイブリッドクラウドでの利用はもちろん、再学習のコストも抑えられます。
Amazon FSx for Windows File Server
Windows Server のSMB(Server Message Block)共有を提供します。Active Directory や NTFS のパーミッションなど、Windows ネイティブのファイル共有をマネージドサービスとして利用できます。
Amazon FSx for Lustre
ハイパフォーマンスコンピューティング(HPC)向けの並列ファイルシステムを提供します。大規模なデータを超高速高性能に複数のノード(インスタンス)からアクセスする場合に使用します。
Amazon File Cache
Amazon File Cache はAmazon S3またはNFSのデータリポジトリとリンクさせて、データの一時的な高性能ストレージとして利用可能なサービスです。 Linuxベースのコンピューティングリソースであれば、Lustre クライアントを使用してキャッシュデータにアクセスすることが可能です。
オブジェクトストレージ
Amazon Simple Storage Service(Amazon S3)
Amazon S3 は、データを単なるファイル単位ではなくメタデータと合わせてオブジェクトという形で管理する「オブジェクトストレージ」のサービスです。S3バケットという管理単位でオブジェクトを格納します。格納するオブジェクトは容量無制限、個数無制限に格納することができます。
データそのものは複数のアベイラビリティゾーンに分散記録とレプリケーションを行うため、99.999999999% という耐久性を誇ります。
オブジェクトの格納や取り出しには、RESTful APIで行います。つまり、HTTPメソッドのGETやPUTなどを用います。
また、静的Webサイトホスティング機能を有効にすれば、別途Webサーバーを用意することなくWebサイトを公開することが可能です。
Amazon S3ではアクセス頻度に応じたストレージクラスというものが設定されており、性能を取るかコストを取るか、アーカイブ用途なのかといった軸でオブジェクトを格納することも可能です。
| ストレージクラス | 1GBあたりの価格(東京リージョン) | ユースケース | 
|---|---|---|
| 標準 | 0.023USD/GB~0.025USD/GB | 頻繁にアクセスされるデータ用(例:データレイクや更新されたばかりのニュース記事など) | 
| Intelligent Tiering | 0.002USD/GB~0.025USD/GB | アクセス頻度が不明なデータ向け。自動的にクラスを変更してコスト最適化と性能最適化を得る | 
| 低頻度アクセス | 0.0138USD/GB | アクセス頻度が高くないが高可用性が必要なデータ用(例:公開されてから月日がたったニュース記事など) | 
| One Zone 低頻度アクセス | 0.011USD/GB | アクセス頻度が高くなく、スクリプト再実行などでデータ再作成が可能なデータ用。名前の通り1つのアベイラビリティゾーンに格納する。 | 
| Express One Zone | 0.124USD/GB | 高性能・低レイテンシーが必要なアプリケーション向け。S3標準と比較して最大10倍速い(例:高速が求められる機械学習や分析)。こちらも1つのアベイラビリティゾーンに格納する。 | 
| Glacier Instant Retrieval | 0.005USD/GB | 長期保存が必要だが取り出しをすぐに行う必要があるデータ用 | 
| Glacier Flexible Retrieval | 0.0045USD/GB | 長期保存が必要だが遅くとも12時間以内に取り出しを行う必要があるデータ用 | 
| Glacier Deep Archive | 0.002USD/GB | 長期保存が必要で取り出しに時間がかかっても構わないデータ用 | 
| S3 Outposts | - | オンプレミス環境に配置したAWS Outposts上でS3を稼働させるもの。データをオンプレミスで管理する | 
そのような Amazon S3 ですが、Storage Gateway というサービスを用いることでオンプレミス環境やクラウド移行した既存アプリケーションのコードをほぼ書き換えることなく、大容量のストレージを提供することが可能です。
AWS Storage Gateway
AWS Storage Gatewayにはユースケースに応じた機能が用意されています。
クライアントとAmazon S3の間にStorage Gatewayが仲介し、データのやりとりをユースケースにあった手法で担ってくれます。
- ファイルゲートウェイ
- ボリュームゲートウェイ
- テープゲートウェイ
全てのゲートウェイは、クライアントが稼働するネットワーク内(例:オンプレミスデータセンター)にアプライアンスとして稼働させます。クライアント側はそのアプライアンスが公開している、NFSやiSCSIなど従来型のプロトコルの口に対してマウントを行い、やりとりします。ゲートウェイとAmazon S3間はHTTPSで通信が行われます。
ファイルゲートウェイ
NFS や SMB でデータをやり取りすることができます。NFS や SMB を通じて書き込まれたファイルは、Amazon S3のオブジェクトとして扱われ、1対1のマッピングが取られます。
Storage Gatewayが仲介するため、ファイルに変更が生じた際、ファイルゲートウェイが非同期でAmazon S3上のオブジェクトを更新します。
また、前述の Amazon FSx ファミリーとしてもファイルゲートウェイが用意されていましたが、2024年10月28日以降は新規作成ができなくなりました。
ボリュームゲートウェイ
iSCSI でやりとりを行うブロックストレージボリュームを提供します。そのため様々なOSが稼働する物理マシンや仮想マシン、ハイパーバイザーに対してオンプレミス、クラウド問わずマウントできます。
ボリュームゲートウェイには以下の2種類のタイプが存在します。
- キャッシュ型ボリューム
- 保管型ボリューム
これらは、頻繁にアクセスされるデータもしくはデータセット全体に対して低レイテンシーを求めるかで選択します。
キャッシュ型は、その名の通り、キャッシュボリュームとして稼働します。つまり、頻繁にアクセスされるデータをローカルに保持します。そのため、ローカル側のストレージコストを削減し、拡張の必要性を最小限に抑えることができます。
保管型は、すべてのデータをローカルに保存します。Amazon S3はストレージとしての使い方というよりは、バックアップ用途として使うイメージです。そのため、ストレージ費用の増大や拡張の必要性はなくなりませんが、障害復旧や災害対策といった面では、非常に強力な選択肢です。
テープゲートウェイ
仮想テープストレージを提供するサービスです。バックアップ用途としてこれまで、物理テープにデータを定期的に書き込み、遠地のデータセンターや倉庫に保管するという運用がなされてきました。物理的にデータを遠くに保管するため、災害が発生した際にもデータを復元できるという強みがありますが、その物理テープを保管する倉庫代などの費用がかかります。
テープゲートウェイを使うことで物理テープではなく仮想テープに記録し、Amazon S3が遠地保管先になるので、倉庫代やテープ記録にかかる運用作業も軽減されます。
まとめ
AWS には様々なニーズに合ったストレージサービスが用意されています。また、紹介しきれていない数々の機能が提供されています。
その様々なサービスや機能の組み合わせから、コストが最安になる組み合わせや運用管理が楽になる組み合わせ、性能が最高になる組み合わせ、その他組み合わせの中から最適なものを選択し、適用していくのが大切です。
ーーー
記載されている会社名、製品名、サービス名、ロゴ等は各社の商標または登録商標です。






