この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
- マルチAZ構築演習でEFSのファイルシステムのマウントについてあまりしっくりこなかったので、今回記事にして理解を深めていこうと思いました。本記事ではEFSでファイル共有できることを確認することを目的とします。2つのEC2上にEFSをマウントし、Apacheで"Hello World!!!!!!"を両方のEC2で表示するまでの手順を紹介します。
EFSについて
- Amazon Elastic File System(EFS)は、複数のEC2インスタンスからアクセスできるスケーラブルなファイルシステムです。EFSは、複数のAZにわたってファイルシステムを作成することができ、高可用性や耐久性が確保されます。また、ストレージ容量を自動的にスケーリングすることができ、データの増加に柔軟に対応できます。
目的
- EC2とEFSを使ってファイルが共有されているか確認
DocumentRootである/var/www/htmlをマウントポイントとし、
配下にあるindex.htmlの中身を編集し、EC2-AとEC2-B両方から
ブラウザでアクセスして両方からHello World!!!!!!を確認すること
前提
VPC、サブネット、AZは事前に作成してあります。
構成図
構成手順
セキュリティグループを作成する
EC2とEFSにアタッチするためのセキュリティグループをそれぞれ用意します。
まずはEC2にアタッチするセキュリティグループから作成します。
EC2のダッシュボードの左側メニューから「セキュリティグループ」を選択し、「セキュリティグループを作成」をクリックします。
以下を入力し、「セキュリティグループを作成」をクリックします。
名前 | インバウンドルール・タイプ | インバウンド・ソース |
---|---|---|
SG-EC2 | ①SSH ②HTTP |
MYIP 0.0.0.0/0 |
マイIPからの22番ポート接続(ssh接続に使用します)
0.0.0.0/0(すべて)からの80番ポート接続(http接続確認で使用します)
同じ手順でEFSにアタッチするセキュリティグループを作成します。
適用する値は以下です。
名前 | インバウンドルール・タイプ | インバウンド・ソース |
---|---|---|
SG-EFS | NFS | SG-EC2(EC2用のセキュリティグループを選択) |
EC2に適用したセキュリティグループ"SG-EC2"からの
NFS2049番ポート接続を許可(これでEFSをEC2にマウントすることができます)
EFSを作成する
それではEFSの用意をしていきます。
まずはAWSコンソール上のEFSのページに移動してください。そしてファイルシステムの作成を選択します。
VPCとAZはマウント対象インスタンスが存在するものを選択します。
セキュリティグループは先ほど作成した’SG-EFS’を選択してください。
その他細かい設定も可能ですが、今回はデフォルトのままで作成してください。
これでEFSの準備も完了です。
EC2を2台作成する
コンソール画面からEC2を選択します。
インスタンスを起動をクリックします。
自分が分かりやすい名前をEC2につけます。
1台目のEC2インスタンスを"EC2-A"としました。
AMIはAmazon Linux2を選択します。
インスタンスタイプは無料利用枠のt2.microを選択し、キーペアは事前に作成したものを使用します。
VPCは作成したものを選択します。
基本的にはデフォルトの設定で良いのですがセキュリティグループも作成したものを設定していきます。
作成したファイルシステムを選択し、インスタンスを起動します。
同じようにEC2インスタンスをもう1台作成します。
2台目のインスタンスを"EC2-B"とします。
EC2にApacheをインストールする
まずはApacheをインストールします。両方のインスタンスにインストールしてください。
※index.htmlファイルの編集はEC2-Aのみで大丈夫です。
$ sudo yum install -y httpd
↑Apacheをインストールするためのコマンドです。
↑のようにComplete!となればインストール成功です。
$ sudo systemctl start httpd
↑このコマンドでApacheを起動させます。
$ sudo systemctl status httpd
↑このコマンドはApacheのステータスを確認するためのものです。
今回はちゃんとApacheが起動しているか確認するために使いました。
↑このように緑色で
●active (running)となっていればOKです。
Apacheが起動しているということです。
↑インストールされたApacheの/etc/httpd/conf/httpd.confファイルに設定されているデフォルトドキュメントルートは/var/www/htmlです。
この/var/www/htmlの配下にindex.htmlを配置すると、ブラウザでパブリックIPアドレスで接続した際にindex.htmlの内容を表示することができます。
$ sudo vi /var/www/html/index.html
↑ viコマンドでindex.htmlファイルを編集しています。
↑EC2-Aのindex.htmlファイルの中身はHello World!!!!!!としておきます。
ブラウザでEC2-Aの確認をしてみましょう。
EC2-AのパブリックIPアドレスをブラウザに入力します。
↑このようにHello World!!!!!!が表示されます。
EC2上でEFSをマウントする。
それではEC2にEFSをマウントしていきましょう。
まずは作成したEC2のどちらかに接続してください。
(今回は先にEC2-AにTeraTermでSSH接続しています。)
ではEFSマウントツールをインストールしましょう。
$ sudo yum -y install amazon-efs-utils
↑これをインストールすることでマウントが行えるようになります。
↑自分の作成したファイルシステムからアタッチを選択し
赤枠の部分をコピーして使用します。
それではマウントしていきましょう!
$ sudo mount -t efs -o tls fs-xxxxx:/ /var/www/html
↑ fs-xxxxxには自分の作成したファイルシステムIDが入ります。
実際にマウントされているかを確認してみましょう。
$ df -h
↑これはマウントがされているか確認するコマンドです。
↑127.0.0.1:/ 8.0E 0 8.0E 0% /var/www/html
最後の一文で無事マウントされていることが確認できます。
ここまでの作業をもう一方のインスタンスにも行います。
注意点
注意する点は、マウントする前からあったファイルは同期されず、マウント後に作成したファイルのみ同期されるということです。この為、両インスタンスをマウント後は、もう一度index.htmlファイルをどちらかのインスタンスに作成しファイル共有されるか確認する必要があります。
マウント後に作成されたindex.htmlなどのファイルに変更が生じた際に
わざわざ両方のインスタンスで修正をかける必要がなくなり
双方で同じEFSを使用することが可能となります。
$ sudo vi /var/www/html/index.html
↑もう一度こちらのコマンド使いindex.htmlを作成します。
ファイルの中身はこれまでと同じHello World!!!!!!にします。
↑EC2-BからもHello World!!!!!!が確認できたので検証成功です。
まとめ
マウントされる前に存在したファイルは、マウントポイントが共有される前に存在したファイルシステムに書き込まれたものであり、マウント後に追加されたファイルは、その時点でマウントされているファイルシステムに書き込まれたものです。したがって、EC2-Aで作成されたマウント前のファイルは、EC2-Bでマウントポイントを共有した後でも、EC2-Bでそのファイルを見ることができないということを検証できました。また、DocumentRootである/var/www/htmlをマウントし配下にあるindex.htmlの中身を編集し、EC2-AとEC2-BのパブリックIPアドレスでブラウザアクセスして両方からHello World!!!!!!を確認することができましたので、EFSでファイル共有が出来ていることも検証できました。このことから、EFSはファイル共有や冗長化構成に活かせるサービスであるということを学べました。
最後までこの記事を読んでいただきありがとうございました。