ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録

EC2のユーザーデータでEFSをマウントする

やりたいこと

タイトルの通り

なぜやる?

スポットインスタンス(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マウントまでできるようにする

参考

docs.aws.amazon.com

docs.aws.amazon.com