やりたいこと
タイトルの通り
なぜやる?
スポットインスタンス(SpotFleet)で開発環境を作成したとき、起動都度マウントするのはめんどくさいのでユーザデータで自動化したい。
セキュリティグループ設定
EC2, EFSの両方が所属するセキュリティグループを作成し、インバウンドでNFSを許可。
EFS設定
ここを参考にポチポチ作る。セキュリティグループは上記で作成したものをつけておく。
EC2起動設定
ユーザーデータ
#cloud-config repo_update: true repo_upgrade: all packages: - amazon-efs-utils runcmd: - file_system_id_01=fs-XXXXXXXX - 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
AWS公式マニュアルそのままのユーザーデータ。ファイルシステムIDをさっき作ったEFSに置き換えてあげる。
セキュリティグループ
上記で作成したセキュリティグループ + 必要な通信を許可したセキュリティグループ。
動作確認
$ mount | grep /mnt/efs 127.0.0.1:/ on /mnt/efs type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,port=20319,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1,_netdev)
うまくいってた
今後の課題?
- ユーザーデータでインスタンスの
Name
タグ引っ張ってきて、それと同じタグのEFSをマウントしてあげる。 - スポットインスタンスの中断通知を検知したら自動的にNFSを切断する。なんかプログラムはしってたらうまく切ってあげる仕組みも含めて考える必要あり
- TerraformでSpotFleet, EFS作成, EFSマウントまでできるようにする