【AWS】今更ながらEFS触ってみた【共有ストレージ】

2月 12, 2022

どもども。旅先から失礼します。saisaiです。


本日は今更ながらAWSの共有ファイルシステムであるAmazon EFS(Elastic File System)を触ってみましたので、備忘録として記事にして使用感を残しておこうと思います。


説明に使用しようとしていたスクリーンショットが手違いで消えてしまったので文面のみとなりますが、伝わるように頑張って書きますので温かい目で見ていただければ幸いです(泣)


それでは早速設定方法などを説明いたします。


事前設定

まずはファイルシステムを共有するEC2インスタンスを二台立ち上げます。

OSは今回はAmazon Linux2を使用します。それぞれを識別できるようにnameタグなどをつけておくといいでしょう。

基本的にはデフォルトの設定で良いのですがセキュリティグループは以下のように設定してください。

インバウンドルールは以下を許可
マイIPからの80ポート接続(http接続確認で使用します)
マイIPからの22ポート接続(ssh接続に使用します)

上記のセキュリティグループを備えたEC2インスタンスを2台作成いただければOKです。


次にEFSの準備です。

まずはEFSに適用するセキュリティグループを作成します。


インバウンドルールは以下のように許可
->EC2に適用したセキュリティグループからの2049ポート接続を許可(これでEFSをEC2にマウントすることができます)


それではEFSの用意をしていきます。まずはAWSコンソール上のEFSのページに移動してください。

VPCとAZはマウント対象インスタンスが存在するものを選択します。セキュリティグループは先ほど作成したものを選択してください。


その他細かい設定も可能ですが、今回はデフォルトのままで作成してください。


これでEFSの準備も完了です。

EFSをマウントする

それではEFSをEC2にマウントしていきましょう。作成したEC2のどちらかに接続してください。


まずはEFSマウントツールをインストールしましょう。

$ sudo yum -y install amazon-efs-utils

次にEFSのマウントポイントを作成します。

$ sudo mkdir /mnt/efs

それではマウントして見ましょう。

$ sudo mount -t efs fs-xxxxx:/ /mnt/efs

実際にマウントされているかを確認してみましょう。

$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 420K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.6G 6.5G 20% /
tmpfs 99M 0 99M 0% /run/user/1000
fs-xxxxxxxx.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs

最後の一文で無事マウントされていることが確認できます。

しかし、インスタンスが停止したりするとマウントは解除されてしまいます。永続的にマウントした状態にしたい場合は/etc/fstabに下記を追記してください。

$ fs-xxxxx:/ /mnt/efs efs defaults,_netdev 0 0

これでEC2インスタンスにおけるEFSのマウント作業は完了です。ここまでの作業をもう一方のインスタンスにも行うことで、双方で同じEFSを使用することが可能となります。


マウントポイントに指定したディレクトリにどちらか片方のインスタンスからファイルを設置すると、もう片方のインスタンスからも閲覧できることが分かります。

$ cd /mnt/efs
$ mkdir test
$ cd test
$ vi index.html

上記のようにしてみるとindex.htmlファイルを双方のインスタンスから確認できるはずです。

apacheのドキュメントルートを共有してみる

せっかくなのでweb上に表示されるファイルをEFSで共有してみましょう。


まずはさくっとapacheをインストールします。双方のインスタンスにインストールしてください。

$ sudo yum install -y httpd

インストールされたapacheのデフォルトドキュメントルートは/var/wwwなので、この配下にディレクトリを作成しindex.htmlを配置すると、ブラウザでhttp://パブリックIPアドレス/ディレクトリ名で接続した際にindex.htmlの内容を表示することができます。

$ cd /var/www/html
$ mkdir apache-test
$ vi index.html

上記を実行した上でブラウザにてhttp://パブリックIP/apache-test/index.htmlに接続するとindex.htmlの内容が表示されるかと思います。

次にweb上に表示するindex.htmlをEFSにて共有してみます。このような構成にすることで、index.htmlなどのファイルに変更が生じた際にわざわざ両方のインスタンスで修正をかける必要がなくなります。

いったん先ほど作成したindex.htmlは削除し、EFSのディレクトリの内容を参照するようシンボリックリンクを作成します。

$ rm -f index.html
$ ln -s /mnt/efs/test /var/www/html/apache-test (こちらはもう一方のインスタンスでも行ってください)

リンク付けが完了したらブラウザでhttp://パブリックIP/apache-test/test/index.htmlに接続してみましょう。


両インスタンスのパブリックIPから同様のindex.htmlの内容が表示されていることが確認できたでしょうか。


このようにEFSをうまく使用すればアプリケーションのデプロイの手間を大幅に削減してくれる場合があることがわかりますね!


一通り検証が完了しましたら、お片付けはEC2->EFS->セキュリティグループの順に行ってください。


EFSを削除する際の

これは、元に戻すことができない破壊的なアクションです。

がなんとも物騒ですが、必要がない場合は躊躇なく削除してしまいましょう。

まとめ

今回はEFSについて基本的な使用方法をまとめて記事にしてみました。


非常に使い勝手がよく、アプリによっては使うべきケースが多々見られるサービスです。


これから作成するアーキテクチャにおいても積極的に提案していきたいと思います!


最後まで読んでいただきありがとうございました。


↓オススメ教材

AWS

Posted by CY