AWS CLF(Cloud Practitioner)対策

EBSとEFS

EBSとEFS

このレッスンを終えると、ブロックストレージとファイルストレージの違いを説明でき、要件の文から Amazon Elastic Block Store (EBS) と Amazon Elastic File System (EFS) を選び分けられるようになります。

まず、自分でサーバーを建てるなら

サーバーを1台組んだとき、あなたは物理ディスクを差し、パーティションを切り、ext4 などでフォーマットし、//data にマウントしました。ここで扱っていたのがブロックストレージです。OS から見ると「生のディスク」であり、その上にファイルシステムを載せるのは自分の仕事でした。

次に、サーバーが2台3台と増えたときのことを考えます。3台の Web サーバーが同じアップロード画像を見る必要が出てきました。物理ディスクは1台のマシンにしか刺さらないので、あなたは NFS サーバーを別に立て、3台からマウントしました。これがファイルストレージです。

AWS ではこの2つがそれぞれ EBS と EFS に対応します。違いを分ける決定的な問いは1つだけです。同時に何台のサーバーからつなぐか、です。

EBS はサーバーに差すディスク

EBS は EC2 インスタンスに接続して使うブロックストレージのボリュームです。性質は次のとおりです。

  • OS からはディスクとして見え、フォーマットしてマウントして使う。EC2 のブートボリュームも EBS
  • 原則として1つの EC2 インスタンスに接続して使う
  • 1つのアベイラビリティゾーンの中に置かれる。別 AZ のインスタンスには直接つなげない
  • EC2 を停止してもデータは残る。インスタンスを作り直しても、ボリュームを付け替えれば中身は引き継げる
  • スナップショットを S3 に取れる。これがバックアップの手段であり、別 AZ や別リージョンへ複製する手段でもある

混同しやすいものにインスタンスストアがあります。これは EC2 の物理ホストに直結した一時的なディスクで、インスタンスを停止すると中身が消えます。速度は出ますが永続しません。「データを永続させたい」と書いてあればインスタンスストアではなく EBS です。

EFS は複数のサーバーで共有するファイル置き場

EFS は NFS でマウントできる共有ファイルシステムです。性質は次のとおりです。

  • 複数の EC2 インスタンスから同時にマウントできる
  • 複数の AZ にまたがってアクセスできる。AZ をまたぐ共有はここが受け持つ
  • 容量を事前に決める必要がなく、書いた分だけ自動で伸び縮みする
  • Linux 向けの NFS。Windows 向けの共有が要る場合は Amazon FSx for Windows File Server という別のサービスがある

EFS にも、アクセス頻度の低いファイルを自動で安いクラスへ移す仕組みがあります。S3 のライフサイクルと同じ発想です。

3つを並べて比べる

EBSEFSS3
種類ブロックファイルオブジェクト
つなぎ方EC2 に接続してマウントNFS でマウントHTTP の API
同時接続原則1インスタンス多数のインスタンス制限なし
範囲単一 AZ複数 AZリージョン (複数 AZ に自動複製)
向く用途OS 領域、DB のデータ領域共有コンテンツ、共通の設定ファイル画像・ログ・バックアップ・静的サイト

迷ったら、次の順で問題文を読みます。まず「マウントするのか、API で置くのか」を探します。API と書いてあれば S3 です。マウントすると分かったら、次に「何台からつなぐのか」を探します。1台なら EBS、複数台なら EFS です。

試験ではこう出る

言い換えの対応を押さえます。

  • 「複数の EC2 インスタンスが同じファイルを共有する必要がある」「共有ファイルシステム」 → EFS
  • 「EC2 のブートボリューム」「データベースが書き込むディスク」「低レイテンシのブロックデバイス」 → EBS
  • 「アプリケーションから API で put / get する」「静的コンテンツを配信」 → S3
  • 「容量を事前に見積もらず、使った分だけ自動で伸びるファイルシステム」 → EFS。EBS はサイズを指定して作るので、この言い回しは EFS の合図です
  • 「EBS のバックアップを取りたい」「別リージョンへボリュームを複製したい」 → スナップショット
  • 「インスタンスを停止するとデータが消える」 → インスタンスストア。これを EBS の説明として出してくる誤答があります

もう1つの罠は AZ です。「別の AZ にある EC2 から同じボリュームを使いたい」と書かれたら EBS では受けられません。EBS は単一 AZ に閉じるからです。ここで EFS が正解になります。AZ をまたぐかどうかが EBS と EFS を分ける2つ目の軸だと覚えておくと、迷いが減ります。

まとめ

  • EBS はブロックストレージ。EC2 に接続する仮想的なディスクで、単一 AZ の中に置かれる
  • EFS はファイルストレージ。複数の EC2 から、複数の AZ をまたいで同時にマウントできる
  • 分岐の軸は「同時に何台からつなぐか」と「AZ をまたぐか」の2つ
  • EBS のバックアップはスナップショット。インスタンスストアは停止で消える一時領域
  • API で出し入れするオブジェクトの置き場は S3。3つは用途が重ならない
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

3台の EC2 インスタンスで構成された Web アプリケーションがあり、3台とも同じアップロード済みファイル群を読み書きする必要があります。インスタンスは複数のアベイラビリティゾーンに分散配置されています。最も適したストレージはどれですか。