EFSマウントヘルパーの利用有無でマウントコマンドの違い等をみてみた

Amazon Elastic File Systemに関するエントリです。今回はEFSのマウント方法について、amazon-efs-utilsパッケージに含まれているマウントヘルパーを利用する場合と、そうでない場合の違いを見ていきたいと思います。
2018.10.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、坂巻です。

Amazon Elastic File System(以下、EFS)に関するエントリです。

今回はEFSのマウント方法について、amazon-efs-utilsパッケージに含まれているマウントヘルパーを利用する場合と、そうでない場合の違いを見ていきたいと思います。

EFSの各機能などは、過去のエントリをご確認ください。

マウントヘルパーとは

マウントヘルパーはefsという新しいネットワークファイルシステムタイプを定義します。Linuxの標準的なmountコマンドと完全な互換性があり、EFSをマウントする際は推奨のマウントオプションがデフォルトで含まれています。

また、ログの出力や、転送中データと保存するデータの両方の暗号化を行うことも可能です。詳細については以下をご確認ください。

マウントヘルパーを利用したEFSマウント

マウントヘルパーを利用した際も「DNS解決」、「DNSホスト名」の設定が必要になります。
参考:EFSファイルシステムをマウントする
参考:VPCでのDNSの使用

amazon-efs-utilsパッケージインストール

マウントヘルパーの利用にはamazon-efs-utilsパッケージが必要になります。 ディストリビューションによって、導入方法が異なりますのでご注意ください。

Amazon Linux系の場合は、パッケージが提供されていますが、 RHEL/Ubuntuなどでは、パッケージを自前でビルドする必要があります。

今回はRed Hat Enterprise Linux 7.5(ami-6b0d5f0d)を利用していますので、ビルドが必要になります。

Gitインストール

以下のコマンドでGitをインストールします。

$ sudo yum -y install git

amazon-efs-utilsクローン

GitHubのamazon-efs-utilsを任意のディレクトリにクローンします。

$ git clone https://github.com/aws/efs-utils

rpm-buildインストール

rpmパッケージをインストールします。

$ sudo yum -y install rpm-build

ビルド実行

クローンを行ったディレクトリに移動後、次のコマンドを使用してパッケージをビルドします。

$ sudo make rpm

なお、今回利用してたRed Hat Enterprise Linux 7.5(ami-6b0d5f0d)では、makeがインストール済みでしたが、インストールされていない場合は、sudo yum -y install makeでインストールが必要になります。

amazon-efs-utilsインストール

amazon-efs-utilsパッケージをインストールします。

$ sudo yum -y install ./build/amazon-efs-utils*rpm

インストール確認

インストールが行われたか確認してみます。

$ sudo yum list|grep amazon-efs-utils
Failed to set locale, defaulting to C
amazon-efs-utils.noarch     1.5-1.el7           installed

EFSマウント

EC2よりEFSをマウントします。マウントヘルパーの利用したEFSのマウントでは、 EFSのファイルシステムIDが必要になりますので、コンソールよりIDを確認します。

1

IDを確認したところで、マウントを行うEC2にログインします。

マウントポイント作成

EFSをマウントするためのマウントポイントを作成します。 今回は/mnt配下のefsディレクトリをマウントポイントとして利用したいと思います。

$ sudo mkdir /mnt/efs

ファイルシステム確認(マウント前)

マウント前のファイルシステムを確認します。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2       10G  1.4G  8.7G  14% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  483M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000

マウント実行

以下のコマンドでマウントを行います。

$ sudo mount -t efs fs-0630f027:/ /mnt/efs

マウントヘルパーを利用時は、推奨されるマウントオプションが自動で実施されています。
そのため、オプションの指定はありません。

ファイルシステム確認(マウント後)

マウントが実施できたか確認してみます。

$ df -h
Filesystem                                      Size  Used Avail Use% Mounted on
/dev/xvda2                                       10G  1.4G  8.7G  14% /
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           496M     0  496M   0% /dev/shm
tmpfs                                           496M   13M  483M   3% /run
tmpfs                                           496M     0  496M   0% /sys/fs/cgroup
tmpfs                                           100M     0  100M   0% /run/user/1000
fs-0630f027.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /mnt/efs

ただしくマウントが行えました。 なお、EFSへのデータ転送時に、データを暗号化する場合、次のコマンドを使用してファイルシステムをマウントする必要があります。

$ sudo mount -t efs -o tls fs-0630f027:/ /mnt/efs

ただし、暗号化を行うためには、stunnelのアップグレード等の対応が必要な場合があります。
詳細については以下をご確認ください。

ログ確認

マウントヘルパーには、EFSのログ記録が組み込まれています。

$ ll /var/log/amazon/efs
total 4
-rw-r--r--. 1 root root 921 Oct 25 02:27 mount.log

なお、ログの出力先やサイズの指定は/etc/amazon/efs/efs-utils.confで設定が可能です。 設定を確認してみると、ログの最大サイズが制限されているようなので、ログローテ等でケアする必要がなさそうです。

[DEFAULT]
logging_level = INFO
logging_max_bytes = 1,048,576
logging_file_count = 10
    ・
    ・
    ・

また、設定変更を行った際の反映については、EFSのアンマウント/マウントが必要になりますのでご注意ください。

マウントヘルパーを利用しないEFSマウント

マウントヘルパーを利用せずにEFSをマウントしてみます。 マウントヘルパーを利用しない場合は、EC2にNFSクライアントパッケージが必要になります。

NFSクライアントインストール

以下のコマンドでNFSクライアントをインストールします。

$ sudo yum -y install nfs-utils

EFSマウント

マウント方法は、IPアドレスを指定する方法と、DNS名を使用する方法があります。 EFSをIPアドレスで接続する場合、EC2は接続先と同じアベイラビリティーゾーンのIPを使用してマウントする必要がありますのでご注意ください。

IPアドレスでマウント

コンソールよりIPを確認します。

2

ファイルシステム確認(マウント前)

マウント前のファイルシステムを確認します。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2       10G  1.3G  8.8G  13% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  483M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000

マウント実行

以下のコマンドでマウントを行います。 マウントヘルパーを利用した際は指定していなかった推奨オプションを指定しています。

$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 192.168.3.242:/ /mnt/efs

ファイルシステム確認(マウント後)

マウントが実施できたか確認してみます。

$ df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/xvda2        10G  1.3G  8.8G  13% /
devtmpfs         474M     0  474M   0% /dev
tmpfs            496M     0  496M   0% /dev/shm
tmpfs            496M   13M  483M   3% /run
tmpfs            496M     0  496M   0% /sys/fs/cgroup
tmpfs            100M     0  100M   0% /run/user/1000
192.168.3.242:/  8.0E     0  8.0E   0% /mnt/efs

IPアドレスを利用してマウントができました。

DNS名を使用したEFSマウント

DNSホスト名を使用したマウントでは、VPCの「DNS 解決の編集」および「DNS ホスト名の編集」が有効化されている必要があります。

DNS 解決の編集 3

DNS ホスト名の編集 4

EFSのDNS名が必要になりますので、コンソールよりDNS名を確認します。

5

ファイルシステム確認(マウント前)

マウント前のファイルシステムを確認します。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2       10G  1.3G  8.8G  13% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  483M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000

マウント実行

以下のコマンドでマウントを行います。IPアドレスでのマウント同様、オプションを指定しています。

$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-0630f027.efs.ap-northeast-1.amazonaws.com:/ /mnt/efs

ファイルシステム確認(マウント後)

マウントが実施できたか確認してみます。

$ df -h
Filesystem                                      Size  Used Avail Use% Mounted on
/dev/xvda2                                       10G  1.3G  8.8G  13% /
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           496M     0  496M   0% /dev/shm
tmpfs                                           496M   13M  483M   3% /run
tmpfs                                           496M     0  496M   0% /sys/fs/cgroup
tmpfs                                           100M     0  100M   0% /run/user/1000
fs-0630f027.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /mnt/efs

ファイルシステムがDNS名になって、マウントされています。

EFSの自動マウント

fstabを使用すると、EC2起動の度に、EFSを自動的にマウントすることができます。/etc/fstabファイルに以下を追加します。

fs-0630f027:/ /mnt/efs efs defaults,_netdev 0 0

なお、上記はマウントヘルパーを使用したマウント方法となります。
マウントヘルパーなしでマウントする場合は以下をご確認ください。

ファイルシステム確認

以下のようにマウントされていない状態で、再起動を行ってみました。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda2       10G  1.4G  8.7G  14% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  483M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
$ sudo reboot now
Connection to XX.XX.XX.XX closed by remote host.
Connection to XX.XX.XX.XX closed.

再起動後に確認すると、自動でマウントされていることが確認できました。

$ df -h
Filesystem                                      Size  Used Avail Use% Mounted on
/dev/xvda2                                       10G  1.4G  8.7G  14% /
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           496M     0  496M   0% /dev/shm
tmpfs                                           496M   13M  483M   3% /run
tmpfs                                           496M     0  496M   0% /sys/fs/cgroup
fs-0630f027.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /mnt/efs
tmpfs                                           100M     0  100M   0% /run/user/1000

最後に

EFSマウントヘルパーを利用すると、マウントが簡素化されるだけでなく、ログ出力、暗号化等が行えるようになります。 EFSを利用する際に特別な理由がない限りは、マウントヘルパーを使わない手はありませんね!

参考