AWS再入門 Amazon Elastic File System編

2019.07.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、中川です。

当エントリはDevelopers.IOで弊社コンサルティング部による『AWS 再入門ブログリレー 2019』の18日目のエントリです。

昨日はちゃだいんの「AWS再入門ブログリレー AWS WAF編」でした。

このブログリレーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2019年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。18日目のテーマは『Amazon Elastic File System編』です。

Amazon Elastic File Systemとは

概要

Amazon Elastic File System(以下、Amazon EFS)は、シンプルで、スケラーブル、伸縮自在なフルマネージドな共有ストレージサービスです。Amazon EC2やオンプレミスリソースから使用できます。NFSバージョン4.0または4.1使用して、VPC上に作成したAmazon EFSファイルシステムをマウントし、共通データの読み書きを可能にします。 なお、執筆時点(2019/07/25)において、Amazon EFSでWindowsはサポートされておりませんので、ご注意ください。

仕組み

Amazon EFSをEC2で利用する場合の構成について見ていきます。 Amazon EFSはVPCに対してファイルシステムを作成し、AZにマウントターゲットを作成します。マウントターゲットは、NFSのエンドポイントとなるIPアドレスを用意します。AZ内の各インスタンスは、DNS名を使用してファイルシステムをマウントしようとすると、所属するAZのマウントターゲットのIPアドレスが解決されて、ファイルシステムを使用できるようになります。


Amazon EFS と Amazon EC2 の連携

また、オンプレや他のVPCからの接続(VPC Peering、Transit Gateway経由)もサポートされております。利用する際は、マウントターゲットのIPアドレスを直接指定して、ファイルシステムをマウントします。

ユースケース

Amazon EFSの主なユースケースは以下になります。低レイテンシーかつ高スループットで共通データへのアクセスが求められる要件で使用されます。

  • パッケージアプリの共有ディレクトリ
  • コンテンツの共有リポジトリ
  • ビッグデータ分析
  • メディア処理
  • コンテナインスタンスで使用するストレージ

特徴

伸縮自在でスケーラブル

Amazon EFSは、ファイルの追加/削除に合わせて、自動でストレージ容量が拡張/縮小されます。1つのファイルシステムあたりペタバイトまで保存できます。事前見積もりが不要で使用分だけの課金となります。

高耐久で高可用性

複数のAZで冗長化されているので高い耐久性があります。 複数のAZから同時書き込みがサポートされており、書き込み完了直後には、他でも反映されている強力な書き込み後の読み取り整合性があります。

パフォーマンス

Amazon EFSは、複数のストレージサーバーに分散されており、複数のEC2から同時に数千もの並列アクセスがあっても処理できるスケーラビリティをもっています。 また、Amazon EFSでは、パフォーマンスモードやスループットモードといった機能があり、個々のシステム要件に合わせてパフォーマンスを設定できます。これらのモードの詳細については、後述します。

他のストレージサービスとの比較

BlackbeltからAWSのストレージサービスと比較した表を引用しました。

チュートリアル

再入門ということで、以下のようなシンプルな構成でEFSをEC2にマウントする手順を行います。 前提として2つのEC2が、異なるAZ上で起動していることとします。今回は、Amazon Linux 2を使用しました。

1. セキュリティグループを作成

EFSに設定するセキュリティグループを設定します。EFSには、EC2のセキュリティグループからNFS(TCPの2049番ポート)を許可するルールを追加します。

2. Amazon EFSファイルシステムを作成

サービス一覧から[EFS]を選択し、[ファイルシステムの作成]をクリックします。

ファイルシステムの設定でVPCを選択し、マウントターゲットでサブネットと1.で作成したセキュリティグループを設定します。設定したら[次のステップ]をクリックします。

オプションはとくに設定せず、[次のステップ]をクリックします。スループットモードやパフォーマンスモードを変更する場合は、ここで変更します。

作成するファイルシステムの内容を確認し、[ファイルシステムの作成]をクリック。

3. Amazon EFSファイルシステムをマウント

EC2に接続し、Amazon EFSマウントヘルパーのあるamazon-efs-utilsパッケージをインストールします。amazon-efs-utilsは、EFSのマウントを簡素化し、転送データをTLSで暗号化できるツールです。使用しているディストリビューションがamazon-efs-utilsでサポートされているかの確認は、こちらからできます。

$ sudo yum -y install amazon-efs-utils

マウントポイントとなるディレクトリ(/mnt/efs)を作成し、mountコマンドを実行してEFSファイルシステムをマウントします。fs-xxxxxには、作成したファイルシステムのファイルシステムIDを入力します。

$ sudo mkdir /mnt/efs
$ sudo mount -t efs fs-xxxxx:/ /mnt/efs

df -hコマンドを実行してで、EFSファイルシステムがマウントされていることを確認できました。

$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 462M 0 462M 0% /dev
tmpfs 479M 0 479M 0% /dev/shm
tmpfs 479M 368K 479M 1% /run
tmpfs 479M 0 479M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 1.2G 6.8G 15% /
tmpfs 96M 0 96M 0% /run/user/1000
fs-6efd9e4f.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs

再起動後にも自動でマウントされるようにするには、/etc/fstabに以下の1行を追加します。

fs-xxxxx:/ /mnt/efs efs defaults,_netdev 0 0

以上でEC2の設定は完了です。今回は、ファイルが共有ストレージで両方から見えることを確認するため、もう1つのEC2にも同様の設定をします。

4. 動作確認

片方のEC2をEC2-A、もう片方のEC2をEC2-Bとします。EC2-Aで共有ディレクトリにファイルを作成します。

$ cd /mnt/efs
$ sudo touch start-file.txt

EC2-Bで共有ディレクトリを表示すると、ファイルが作成されていることを確認できました。

$ cd /mnt/efs
$ ls /mtn/efs
start-file.txt

その他の機能など

パフォーマンスモード

Amazon EFSでは、2つのパフォーマンスモードが用意されています。

汎用パフォーマンスモードは、ほとんどのファイルシステムに適した汎用的なモードです。ファイルシステム作成時にデフォルトで選択されます。

最大I/Oパフォーマンスモードは、大規模なスケールアウトが求められるケースで使用するモードです。汎用モードに比べてファイル操作のレイテンシーが長くなりますが、全体的なスループットと1秒あたりのオペレーションをスケールします。利用時に追加費用は発生しません。

モード選択の指標には、CloudWatchメトリクスのPercentIOLimitが便利で、汎用モードにおいてI/O性能が制限に達しているか確認できます。PercentIOLimitが100%に近い場合は、最大I/Oパフォーマンスモードを検討します。パフォーマンスモードは、ファイルシステムを作成後に変更できない制限がありますので、モード変更が必要な際はファイルシステムを再作成しなくてはなりません。

ストレージクラスとライフサイクル管理

Amazon EFSでは、2つのストレージクラスが用意されてファイルごとに適用されます。

スタンダードストレージクラスは、頻繁にアクセスされるファイルを格納するために使用されます。

低頻度アクセス(IA)ストレージクラスは、アクセス頻度が低いファイルを格納するための安価なストレージです。ライフサイクル管理を有効にすることで、一定期間アクセスされなかったファイルは、自動的にIAストレージへ移行されます。ストレージ料金としては、最大85%節約することができるのですが、IAストレージのファイルへのアクセス発生時には、別途、低頻度アクセスリクエストの料金がかかるので注意しましょう。

スループットモード

Amazon EFSでは、2つのスループットモードが用意されています。

バーストモードは、スタンダードストレージクラスに保存されているファイルサイズによって、ベースとなるスループットが決まります。ベース以上のスループット時(バースト時)は、バーストクレジットが消費されます。バーストクレジットは、スループットがベースラインを下回るときに蓄積されるもので、ちょうどEC2インスタンスタイプのTシリーズにおけるCPUクレジットと似ています。 バーストモードのスループット例は、以下の表になります。


ファイルシステムのサイズにかかわらず、バースト時のスループットで100MB/秒が保証されています。

プロビジョニングモードでは、保存されたデータサイズにかかわらず一貫したスループットを使用できます。ただし、プロビジョニングモードを使用時は、プロビジョニングしたスループットから標準で含まれているスループット分を引いた分が課金対象となります。 例として、1か月間にわたり20GBを保存し5MB/秒のスループットをプロビジョニングしたとします。20GBには1MB/秒のスループットが標準で含まれているので、5MBから1MBを引いた4MB/秒が課金対象になります。

スループットモードの違いについては、以下のBlackbelt資料が参考になります。

データ移行

AWS DataSyncを使用することで、オンプレミスや既存クラウド内のファイルシステムからAWS EFSにデータを移行できます。

AWS DataSyncは以下の手順で利用できます。

  1. エージェントをデプロイし、アクティブ化
  2. 送信元と宛先の場所を作成して設定
  3. タスクを作成
  4. タスクを実行して、送信元から宛先までファイルを転送

オンプレミスからの移行ではVMware環境にエージェントをデプロイし、既存クラウド内のデータ移行ではEC2インスタンスにエージェントをデプロイします。手順の詳細については、AWS DataSyncのドキュメント「AWS DataSyncの開始方法」をご参照ください。

バックアップ

AWS Backupを使用することで、Amazon EFSファイルシステムをシンプルにバックアップできます。(AWS Backupのリリース以前にはEFS-to-EFSというソリューションを使用できましたが、手間とコストがかかっていました) Amazon EFSは複数のAZで冗長化されていますが、意図しないところでの変更や削除に対応するには、別途バックアップの仕組みが必要になります。 AWS Backupを使用したバックアップ手順については、下記ブログをご参考ください。

AWS Backup でお手軽に EFS バックアップを取得する

料金

Amazon EFSの料金は、使用したファイルストレージ容量に対して発生します。低頻度アクセスストレージを使用時は、標準ストレージよりもストレージ利用料を抑えることができますが、アクセスリクエストごとに追加で利用料が発生しますので、注意しましょう。

利用形態 料金
標準ストレージ (GB-月) 0.36USD
低頻度アクセスストレージ (GB-月) 0.054USD
低頻度アクセスリクエスト (転送GBあたり) 0.012USD
プロビジョニングするスループット (MB/秒-月) 7.2USD

上記は執筆時点(2019/07/25)における東京リージョンの料金になります。最新の料金は、以下の公式サイトをご確認ください。 Amazon EFS の料金

さいごに

以上、AWS再入門ブログリレー 18日目のエントリ『AWS Elastic File System』編でした。

Amazon EFSは2016年にGAしておりましたが、2018年7月まで東京リージョンで利用できませんでした。また、バックアップ機能がなかったEFSですが、今年の1月に登場したAWS Backupでバックアップができるようになり、また、東京リージョンでも今月からAWS Backupを利用できるようになりました。日本のユーザーにとって、Amazon EFSの機能が増え使いやすくなったので、これからAmazon EFSのユースケースが増えてくるのではないかと期待しています。本エントリが、Amazon EFSの利用を検討している方の第1歩になれば幸いです。

明日(7/26)はの「AWS AppSync編」です。お楽しみに!!

参考