やさしいEFS の構築
概要
- 今回も、これまでペーパー上しか(AWS 認定試験しか)関わってこなかった Amazon EFS を学ぶ機会が出来ました。案件に感謝です。
- 前職ではUnix/Linux を使ったNFS サーバーの構築や、NAS ストレージを担当した経験があるため、EFS には親近感がありますね。
EFS とは
- Amazon EFS(Elastic File System)は、Linux ワークロードに NFS ファイルシステムのストレージを提供するフルマネージド型サービスです。
- NFS v4.0/4.1 に対応。Linux からmount して使用します。Windows のファイル共有(CIFS/SMB)としては利用できません。
- EFSは、NFS を利用するためファイル単位でのアクセスとなります。(EBSはブロックアクセス)
- 同一のファイルシステムに、複数のEC2 から同時にアクセスが可能です。
- 強い整合性があり、読み込みには最新のデータが反映されます。
- ファイルの追加・削除に合わせ、ファイルシステムが自動拡張・縮小されます。
- 保存容量に応じて、スループット性能が向上します。
EFS の活用シーン
- EFSの活用シーンは、大量のEC2 インスタンスでデータを共有・分散して分析を行うアプリケーション、AutoScaling するWebサーバでコンテンツを共有するリポジトリなどのケースが考えられます。
- S3 は直接EC2 にmountすることはできないため、S3 をファイル共有に利用できないケースやパフォーマンスが求められるケースでは、EFS が活躍しますね。
- Lambda 関数から EFS にアクセスすることはできません。Lambda 関数の間で情報共有を行う場合は、DynamoDB あるいは S3 を利用します。
EFS の利用料
- 保存容量に対する課金であり、データ転送量やリクエスト数による課金は発生しないシンプルな料金となります。
EFS の構築
- AWS コンソールからEFS のサービスを開きます。
- 「ファイルシステムの作成」を選択します。
- 「ファイルシステムの作成」にて、以下を指定します。
- ファイルシステムの名前(オプション)
- 「カスタマイズ」を押します。
- 「ファイルシステムの設定」にて、以下を指定します。
- 必要に応じて、タグを入力。「次へ」を押します。
- 「ネットワークアクセス」にて、EFS のマウントターゲットを作成する VPCを指定します。
- 次に、マウントターゲットを作成するAZ、サブネット、セキュリティグループを指定します。マウントターゲット毎にセキュリティグループは設定可能です。
- 「ファイルシステムポリシー」にて、ポリシーオプションが指定できます。
- ファイルシステム、ネットワークアクセス、ファイルシステムポリシーの設定を確認し、「作成」を押します。
- EFS ファイルシステムの作成が完了しました。
- 今回作成したファイルシステムID は、"fs-01e42e11e4bd05f01″ となります。
- ファイルシステムを選択すると、詳細が確認できます。
- 「ネットワーク」タブを選択すると、マウントターゲットが確認できます。マウントターゲットは、EC2 インスタンスが接続するNFS のエンドポイントです。
- AZ毎にマウントターゲットが作成され、ENI、IPアドレスが割り当てられます。
- EC2 からマウント時は、ファイルシステムID を使用するため、マウントターゲットは意識しません。
EC2 からEFS をmount する
- EFS は、Linux からNFS v4.0/4.1 プロトコル(TCP 2049ポート)にて使用可能です。以下、Amazon Linux2 からEFS をmount する際の手順です。
- EFS マウントヘルパー(amazon-efs-utils パッケージ)をインストールします。
$ yum list installed | grep amazon-efs-utils
$ sudo yum install amazon-efs-utils
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package amazon-efs-utils.noarch 0:1.31.2-1.amzn2 will be installed
--> Processing Dependency: stunnel >= 4.56 for package: amazon-efs-utils-1.31.2-1.amzn2.noarch
--> Running transaction check
---> Package stunnel.x86_64 0:4.56-6.amzn2.0.3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
amazon-efs-utils noarch 1.31.2-1.amzn2 amzn2-core 46 k
Installing for dependencies:
stunnel x86_64 4.56-6.amzn2.0.3 amzn2-core 149 k
Transaction Summary
================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 195 k
Installed size: 479 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): amazon-efs-utils-1.31.2-1.amzn2.noarch.rpm | 46 kB 00:00
(2/2): stunnel-4.56-6.amzn2.0.3.x86_64.rpm | 149 kB 00:00
--------------------------------------------------------------------------------
Total 988 kB/s | 195 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
Installing : stunnel-4.56-6.amzn2.0.3.x86_64 1/2
Installing : amazon-efs-utils-1.31.2-1.amzn2.noarch 2/2
Verifying : stunnel-4.56-6.amzn2.0.3.x86_64 1/2
Verifying : amazon-efs-utils-1.31.2-1.amzn2.noarch 2/2
Installed:
amazon-efs-utils.noarch 0:1.31.2-1.amzn2
Dependency Installed:
stunnel.x86_64 0:4.56-6.amzn2.0.3
Complete!
$ yum list installed | grep amazon-efs-utils
amazon-efs-utils.noarch 1.31.2-1.amzn2 @amzn2-core
- mount コマンドを使って、EFS をmount します。EFS マウントヘルパーで提供される tls オプションを指定します。"fs-01e42e11e4bd05f01″ は、先ほど作成したEFS のファイルシステムID です。
- EFS マウントヘルパーによって、EFS に最適な以下のマウントオプションが自動的に設定されます。
- nfsvers=4.1, rsize=1048576, wsize=1048576, hard, timeo=600, retrans=2
$ sudo mkdir /efs
$ sudo mount -t efs fs-01e42e11e4bd05f01 -o tls /efs
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 230M 0 230M 0% /dev
tmpfs 240M 0 240M 0% /dev/shm
tmpfs 240M 524K 240M 1% /run
tmpfs 240M 0 240M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.9G 6.2G 23% /
tmpfs 48M 0 48M 0% /run/user/0
tmpfs 48M 0 48M 0% /run/user/1000
127.0.0.1:/ 8.0E 0 8.0E 0% /efs
- 以下のエラーが出力された場合は、マウントターゲットに割り当てたセキュリティグループにNFS(TCP 2049ポート)のアクセスが許可されていません。
$ sudo mount -t efs fs-01e42e11e4bd05f01 -o tls /efs
b'mount.nfs4: Connection reset by peer'
- 次は、/etc/fstab にエントリを追加して、自動で mount されるように設定します。
$ sudo umount /efs
$ vi /etc/fstab
$ cat /etc/fstab
#
UUID=e6c06bf4-70a3-4524-84fa-35484afc0d19 / xfs defaults,noatime 1 1
fs-01e42e11e4bd05f01:/ /efs efs tls,_netdev 0 0 -
$ sudo mount /efs
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 230M 0 230M 0% /dev
tmpfs 240M 0 240M 0% /dev/shm
tmpfs 240M 468K 240M 1% /run
tmpfs 240M 0 240M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.9G 6.2G 23% /
tmpfs 48M 0 48M 0% /run/user/1000
127.0.0.1:/ 8.0E 1.0G 8.0E 1% /efs