Amazon EFS入門 S3、EBSとの違いと使い方

WebサイトやWebシステムを構築する場合など、共有ストレージが必要になる場合があります。
WordPressを使ったオンプレミスのWebサイトの運用を例に挙げると、サーバー1台で運用している間は特に問題になりませんが、スケーリングや高可用性のためにサーバー複数台での運用に切り替えようとした場合、アップロードした画像やプラグインなどのファイルをサーバー間で共有することが求められます。
このような状況においてはオンプレミスのNetwork File System (NFS)サーバーなどを自前で構築・運用することも可能ですが、マネージドNFSサービスを利用することによってNFSサーバーの構築・運用の負荷を軽減することができます。
この記事では、AWSのマネージドNFSサービスであるAmazon Elastic File System (EFS)の概要について解説すると共に、基本的な使用方法を解説します。

Amazon EFSの概要

特徴

Amazon EFSをファイルサーバーとして利用する場合のAWS上での基本的な構成は下図の通りです。クライアント端末はAmazon EC2を経由してアクセスします。

Amazon EFSはマネージドサービスであるため、サーバマシンやオペレーティングシステム(OS)の管理に加え、NFSサーバー自体の管理もAWSに任せることができます。 また、Amazon EFSによって管理されるNFSは高い可用性と耐久性を備えているため、一部のサーバマシンや一部のアベイラビリティーゾーン(データセンター)に障害が発生した場合でも、NFSが利用できなくなったり、NFSに保存したデータが消失したり、システムへ負の影響が及ぶことを防止できます。
さらに、Amazon EFSのストレージ容量は保存するファイルのサイズ合計によって自動的に伸縮するため、ストレージ容量をあらかじめ決める必要がありません。
なお、Amazon EFSのスループット(読み書き速度)はストレージ容量に応じて増減しますが「プロビジョンドスループットモード」というモードを選択することによって必要なスループットを指定することができるため、高いスループットが要求されるユースケースにも対応することができます。

料金体系

Amazon EFSでは「標準ストレージクラス」と「低頻度アクセスストレージクラス」の2つのストレージクラスが用意されています。
標準ストレージクラスではストレージ容量だけが課金の対象となるのに対し、低頻度アクセスストレージクラスではストレージ容量とデータ転送量の両方が課金の対象となります。
低頻度アクセスストレージクラスのストレージ料金は標準ストレージクラスのストレージ料金と比べて安価であるため、あまりアクセスしないファイルを低頻度アクセスストレージクラスのストレージに保存した方がサービスの利用料金を安く抑えることができます。
なお、「プロビジョンドスループットモード」を使用する場合、これらの料金に加えてスループットに対する料金が指定したスループットの数量に応じて発生します。

Amazon S3やAmazon EBSとの違い

Amazon EFSは「ファイルストレージ」というタイプのストレージサービスであり、LinuxなどのOSでマウント可能なファイルシステムを提供します。
Amazon EFSとは異なり、Amazon Simple Storage Service (S3)は「オブジェクトストレージ」というタイプのストレージサービスであり、データを「オブジェクト」と呼ばれる単位で読み書きするためのHTTPSなどでアクセス可能なエンドポイントを提供します。
また、Amazon Elastic Block Store (EBS)は「ブロックストレージ」というタイプのストレージサービスであり、Amazon Elastic Compute Cloud (EC2)のインスタンス(仮想マシン)にアタッチするためのボリュームを提供します。
このように利用するサービスによって異なるタイプのストレージが提供されるため、目的に応じて適切なタイプのストレージサービスを使い分ける必要があります。

Amazon EFSの使用方法

前段までではAmazon EFSの特徴や料金体系について解説しました。
解説を読むことも大切ですが、サービスを実際に体験してみることによってAmazon EFSをより深く理解することができます。

Amazon EFSの基本的な使用方法として、NFSを作成して2台のAmazon EC2インスタンス(サーバー)間でファイルを読み書きする手順を紹介します。構成は先に示した図を参照してください。

Amazon EFSファイルシステムの作成

まず、Amazon EC2インスタンスからマウントするためのNFSを作成します。

1.NFSの作成

下記のコマンドを実行してAmazon EFSファイルシステムを作成します。
なお、コマンド実行後に表示されるFileSystemIdは後の手順で必要になるので控えておきます。

$ aws efs create-file-system --creation-token my-file-system
2.マウントターゲットの作成

Amazon EC2インスタンスから作成したAmazon EFS(NFS)をマウントするためには、マウントするAmazon EC2インスタンスと同じサブネットにマウントターゲットを作成する必要があります。複数のEC2インスタンスは同じマウントターゲットを介してAmazon EFSにアクセスする流れとなります。

下記のコマンドを実行してマウントターゲットを作成します。
なお、コマンド実行後に表示されるMountTargetIdは後の手順で必要になるので控えておきます。

$ aws efs create-mount-target --file-system-id (ここに控えたFileSystemIdが入ります) --subnet-id (ここに2台のAmazon EC2インスタンスを起動するサブネットのIDが入ります) --security-groups (ここにNFS/TCP2049へのインバウンドアクセスを許可するセキュリティグループのIDが入ります)

書き込み用Amazon EC2インスタンスに
Amazon EFS(NFS)をマウント

次に、書き込み用のAmazon EC2インスタンスを起動してAmazon EFS(NFS)をマウントします。

3.書き込み用Amazon EC2インスタンスの起動

書き込み用Amazon EC2インスタンスをマウントターゲットとして作成したネットワーク内で起動します。
なお、Amazonマシンイメージ(AMI)はLinuxであれば基本的にどれでも良いですが、今回は「Amazon Linux 2 AMI」を使用します。

4.必要なパッケージのインストール

起動したEC2インスタンスにSSHで接続し、下記のコマンドを実行して必要なパッケージをインストールします。

$ sudo yum install -y nfs-utils
5.書き込み用Amazon EC2インスタンスにAmazon EFS(NFS)をマウント

パッケージのインストールが完了した後、下記のコマンドを実行してAmazon EFS(NFS)をマウントします。

$ sudo mkdir ~/efs
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport (ここに控えたFileSystemIdが入ります).efs.(ここにリージョンが入ります).amazonaws.com:/ ~/efs

読み込み用Amazon EC2インスタンスに
Amazon EFS(NFS)をマウント

次に、読み込み用のAmazon EC2インスタンスを起動してAmazon EFS(NFS)をマウントします。手順としては、書き込み用のAmazon EC2インスタンスの時と同じです。

6.読み込み用Amazon EC2インスタンスの起動

読み込み用のAmazon EC2インスタンスをマウントターゲットとして作成したネットワーク内で起動します。

7.必要なパッケージのインストール

起動したEC2インスタンスにSSHで接続し、下記のコマンドを実行して必要なパッケージをインストールします。

$ sudo yum install -y nfs-utils
8.読み込み用Amazon EC2インスタンスにAmazon EFS(NFS)をマウント

パッケージのインストールが完了した後、下記のコマンドを実行してAmazon EFS(NFS)をマウントします。

$ sudo mkdir ~/efs
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport (ここに控えたFileSystemIdが入ります).efs.(ここにリージョンが入ります).amazonaws.com:/ ~/efs

書き込み、読み込みのテスト

ファイルの書き込みと読み込みをテストします。

9.ファイルにメッセージを書き込む

下記のコマンドを実行してファイルにメッセージを書き込みます。

$ sudo sh -c 'echo "Hello Amazon EFS" > /home/ec2-user/efs/test'
10.ファイル内容を表示する

下記のコマンドを実行してファイルの内容を表示します。
表示される内容が前の手順で書き込んだメッセージと同じであることを確認します。

$ sudo cat ~/efs/test
Hello Amazon EFS

クリーンアップ

11.クリーンアップ作業

下記のコマンドを実行してAmazon EFSファイルシステムとマウントターゲットを削除します。
また、Amazon EC2インスタンスではEBSボリュームが自動的に作成されてしまうので、起動した2台のAmazon EC2インスタンスにアタッチされたAmazon EBSボリュームも削除します。

$ aws efs delete-mount-target --mount-target-id (ここに控えたMountTargetIdが入ります)
$ aws efs delete-file-system --file-system-id (ここに控えたFileSystemIdが入ります)

おわりに

高い可用性・耐久性に加えて伸縮自在性まで備えたNFSを自前で構築・運用するのは決して容易なことではありません。
そのようなNFSを手軽に利用することが可能な点はAmazon EFSの魅力の一つといえます。

最初のクラウド移行におすすめする
ファイルサーバーのクラウド移行の構成例や費用例を知りたい方はこちら。

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る