伸長する夢のストレージ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
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
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