はじめに
EFSのサブディレクトリに対して、マウントする方法の参考記事が見当たらなかったため、手順をまとめます。
今回は、この記事を参考にEC2をFTPサーバー構築しておりますので、EC2とEFSをマウント後、ローカルからEFSに対してファイル転送が可能です。
FTPサーバーではなく、単なるEC2でもこれから説明する手順は使えます。
下図で言いますと、EFSのルートディレクトリではなく**/uploadsディレクトリを作成し、/uploads配下**に対して、EC2の/mnt/efs配下をマウントさせます。
事前準備
・EC2を事前に設置し、ssh接続できることを確認
インターネットゲートウェイやサブネットも作成済み
こちらを参考にしました
・FTPサーバー構築(なくても可)
流れ
①EFSを作成
②EC2のマウントポイントの作成
③EFSのサブディレクトリ/uploadsに対してマウントさせる
④自動マウント設定
EFSを作成
AWSのEC2のコンソール画面からセキュリティーグループを以下の通り、作成します。
インバウンド設定
・TypeはNFS
・ポートは2049
・Sourceはカスタム + EC2のセキュリティーグループ
AWSのEFSのコンソール画面から、EC2と同じVPCを選択して作成します。
ネットワークタブの管理をクリックし、セキュリティーグループを先程作成したセキュリティーグループに変更します。
EC2のマウントポイントの作成
まずEC2にSSH接続します
$ ssh -i ~/.ssh/ec2-key.pem ec2-user@✕✕.✕✕✕.✕✕✕.✕✕
アップデート実行
$ sudo yum update -y
Amazon EFS マウントヘルパーのインストール
$ sudo yum install -y amazon-efs-utils
EFSのマウントポイント/mnt/efsを作成
$ sudo mkdir /mnt/efs
EFSのサブディレクトリ/uploadsに対してマウントさせる
まず、マウントコマンドの説明をします。
マウントポイントにEFSのルートディレクトリ/
をマウントするには以下のコマンドでできます。
# 転送時にデータの暗号化を使用する場合
$ sudo mount -t efs -o tls [File System ID]:/ [マウントポイント]
# 転送時にデータの暗号化を使用しない場合
$ sudo mount -t efs [File System ID]:/ [マウントポイント]
[File System ID]は、EFSコンソールの名前の横にありますfs-
から始まるIDです
対して、EFSのルートディレクトリ/uploads
をマウントするには以下のコマンドでできます。
$ sudo mount -t efs -o tls [File System ID]:/uploads [マウントポイント]
以下の流れで進めていきます。
①親ディレクトリ/
でマウントする
②サブディレクトリ/uploads
ディレクトリを作成
③/
のマウントを解除し、efs
ディレクトリを削除
④efs
ディレクトリを作成し、サブディレクトリ/uploads
でマウントする
①親ディレクトリである/
に対してマウントします。
$ cd /mnt
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 492K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.7G 6.4G 21% /
tmpfs 99M 0 99M 0% /run/user/1000
$ sudo mount -t efs -o tls fs-7f6cf55f:/ /mnt/efs
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 496K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.7G 6.4G 21% /
tmpfs 99M 0 99M 0% /run/user/1000
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs
の行からマウントできていることが分かります。
②サブディレクトリ/uploads
ディレクトリを作成
$ cd /mnt/efs
$ sudo mkdir uploads
③/
のマウントを解除し、efs
ディレクトリを削除
$ cd /mnt
$ sudo umount -l efs
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 548K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.7G 6.4G 21% /
tmpfs 99M 0 99M 0% /run/user/1000
tmpfs 99M 0 99M 0% /run/user/0
$ sudo rm -r efs
④efs
ディレクトリを作成し、サブディレクトリ/uploads
でマウントする
$ cd /mnt
$ sudo mkdir efs
$ sudo mount -t efs -o tls fs-7f6cf55f:/uploads /mnt/efs
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
省略
127.0.0.1:/uploads 8.0E 0 8.0E 0% /mnt/efs
EC2の/mnt/efs
配下がEFSの/uploads
配下にマウントできました。
自動マウント設定
今のままだと、EC2が停止するとマウントが消されるため、自動マウント設定をします。
AmazonLinuxにEFSボリュームを自動マウントさせるためには、/etc/fstab
を修正する必要がある。
まず、etc/fstab
ファイルをバックアップします。
$ ll /etc | grep fstab
-rw-r--r-- 1 root root 91 8月 24 19:07 fstab
$ sudo cp -p /etc/fstab /etc/fstab_`date +'%Y%m%d'`
$ ll /etc | grep fstab
-rw-r--r-- 1 root root 91 8月 24 19:07 fstab
-rw-r--r-- 1 root root 91 8月 24 19:07 fstab_20211002
マウント設定ファイル(/etc/fstab)に以下の内容を追記します。
[アベイラビリティゾーン].[EFSのDNS Name]:/ [マウントポイント] nfs4 defaults 0 0
[EFSのDNS Name]
は、EFSコンソールのアタッチをクリックすると、NFSクライアント使用
に記載されている赤文字部分です。
以下の場合、fs-7f6cf55f.efs.ap-northeast-1.amazonaws.com
の部分です。
$ cat /etc/fstab
#
UUID=55ee5a5f-d155-47e0-9121-e6f4522cb2bf / xfs defaults,noatime 1 1
$ sudo vim /etc/fstab
#
UUID=55ee5a5f-d155-47e0-9121-e6f4522cb2bf / xfs defaults,noatime 1 1
fs-7f6cf55f.efs.ap-northeast-1.amazonaws.com:/uploads /mnt/efs nfs4 defaults 0 0
自動マウントできているか確認するため、再起動します。
$ sudo reboot
再度ssh接続して、マウントされていることを確認します。
$ df -Ph
省略
fs-7f6cf55f.efs.ap-northeast-1.amazonaws.com:/uploads 8.0E 0 8.0E 0% /mnt/efs
#参考
【AWS】EFSボリュームの自動マウント設定(AmazonLinux)
Amazon Elastic File System(Amazon EFS)に触ってみた