AWS
EC2
nfs
EFS

Amazon EFSをEC2から使ってみたメモ

伸長する夢のストレージEFS、気になっていたんですがはじめて使ってみました。忘れないためのメモ程度です。

https://aws.amazon.com/jp/efs/
数千台のEC2から共有マウントできるとか。すごい!

セットアップ

AWSのWebコンソールからVPCや性能を指定するだけであっさりできました。
こんな感じのNFSホスト名が生成されます: fs-(固有のID).efs.ap-northeast-1.amazonaws.com

  • パフォーマンスモード最大I/Oは多数のインスタンスからマウントして共有するようなケースで選択するとよいとのこと。
  • スループットモードプロビジョニング済みは、スループットにムラがあると困るとき(ゲームなど?)に設定するといいのかなと思います。

EFSマウントヘルパー

NFS互換なので気軽に考えていましたが、マウントを簡単にするEFSマウントヘルパーというソフトウェアが提供されています。

暗号化や、最適なマウントパラメータなど、調べたらなんとかなるんだろうけど、手間のかかる部分をアシストしてくれるようです。

EC2インスタンスであれば、コマンドひとつでインストールされます。

sudo yum install -y amazon-efs-utils

詳しくは: amazon-efs-utils ツールを使用する
https://docs.aws.amazon.com/ja_jp/efs/latest/ug/using-amazon-efs-utils.html

常時マウント

通常は/etc/fstabにエントリを記述しておいて、再起動しても自動でマウントされるようにしておくことが多いでしょう。

EFSマウントヘルパーを使う場合

EFSマウントヘルパーを使うと短い記述で済みます。

詳しくはこちらに記載されています: Amazon EFS ファイルシステムの自動マウント
https://docs.aws.amazon.com/ja_jp/efs/latest/ug/mount-fs-auto-mount-onreboot.html#mount-fs-auto-mount-update-fstab

/etc/fstab
fs-(固有のID).efs.ap-northeast-1.amazonaws.com:/ /mnt/efs efs defaults,_netdev 0 0

ファイルを置いて試してみます。

# /etc/fstabに基づいてマウント
$ sudo mount -a
# ファイルを置いてみる
$ touch /mnt/efs/test.txt
$ ls /mnt/efs
test.txt
# アンマウントしてlsしてみる
$ sudo umount /mnt/efs
$ ls /mnt/efs
# ファイルなし
# もう一度マウントしてls
$ sudo mount -a
$ ls /mnt/efs
text.txt

これでtext.txtがしっかりEFS上に作成されたことが確認できました。

EFSマウントヘルパーを使わない場合

素のLinuxからNFSマウントする場合の方法はこちらに記載されています。

自動的にマウントする
https://docs.aws.amazon.com/ja_jp/efs/latest/ug/mount-fs-auto-mount-onreboot-old.html

/etc/fstab
fs-(固有のID).efs.ap-northeast-1.amazonaws.com:/ efs-mount-point nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0

EC2インスタンスの誕生とともにマウント

上記で紹介したページでは、EC2インスタンスの誕生と同時にマウントしておくユーザーデータも紹介されています。

インスタンスごと立ち上げて終わったら削除するような、イミュータブルなバッチ処理にも使えますね。便利!

#cloud-config
repo_update: true
repo_upgrade: all

packages:
- amazon-efs-utils

runcmd:
- file_system_id_01=fs-12345678
- efs_directory=/mnt/efs

- mkdir -p ${efs_directory}
- echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab
- mount -a -t efs defaults