目次Category
はじめに
今回は、AWSのフルマネージド型ファイルストレージサービス:Elastic File System(EFS)を使って,複数のEC2からアクセスできる共有ファイルシステムを作成していきましょう!
Elastic File System(EFS)
ファイルの保存や共有に利用されるフルマネージド型のスケーラブルなNFSファイルストレージサービス
*NFS: Network File System
4つの特徴
・サーバーレスで自動スケーリング
・高い可用性と耐久性
・複数のEC2/コンテナから同時アクセス
・オンプレミスの連携も容易
今回使用するサービス

構成
今回構築するシステムの構成図はこちらになります。

今回の構築は、実務ベースに近い形になるようにしています。
・実務では、基本EC2はプライベートサブネットに設置
・マウントターゲット:EC2からEFSへ接続するための入り口
→EFSは特定のサブネットにはなく、リージョンやAZのどこかにあり、
EFS本体にIPアドレスはない。
・NATゲートウェイは、EC2で”amazon-efs-utils”をインターネットからインストールするために
必須
→プライベートサブネット内からインターネットへのアクセスは
NATゲートウェイがないとできない。
*amazon-efs-utils:EFSを簡単・安全にマウントするためにAWSが提供している
コマンドラインツール
→これがないとEC2の仮想サーバにあるフォルダにEFSをマウントできない。
*EC2はパブリックサブネットに作成してもらっても大丈夫です。
その時は、構築手順にあるNATゲートウェイとルートテーブルの作成は不要です。
今回のゴール
共有ファイルシステムを構築し、2台のEC2間でファイルの作成・編集を行い、同じファイルを共有できていることを体験する
構築手順
2-0.構築するにあたって
今回使用するVPCは下記ブログで作成したものを使用しています。
まだ、VPCを作成していない方はこちらを参考に作成してから続きに進みましょう!
・VPC/パブリックサブネット
EC2でWebサーバ構築、ALBで負荷分散、オートスケーリングを行う | YAZエンジニアが運営するメディア Blilliant Engineer
・プライベートサブネット
EC2 + RDSでTodoアプリ作成 | YAZエンジニアが運営するメディア Blilliant Engineer
それでは、システム構築に移りましょう!!
2-1.SG・NATゲートウェイ準備
SGの作成
まずは、2つのセキュリティグループ(SG)を作成していきます。
1つ目:EC2用のSG
SG名:sgp-ec2-[name]-01
【インバウンドルール】
タイプ:SSH プロトコル:TCP ポート:22 送信先:0.0.0.0/0
【アウトバウンドルール】
デフォルト
2つ目:マウントターゲット用のSG
SG名:sgp-mt-[name]-01
【インバウンドルール】
タイプ:NFS ポート:2049 送信先:sg-ec2-[name]-01
【アウトバウンドルール】
デフォルト
NATゲートウェイの作成

【名前】ntgw-[name]-01
【アベイラビリティーモード】ゾーナル
【サブネット】VPC内のパブリックサブネット
【接続タイプ】パブリック
【Elastic IP割り当てID】 ”Elastic IPを割り当て”をクリック
*サブネットは、どちらかのAZにあるパブリックサブネットであれば何でもOK!
(今回の構成図だとap-northeast-1aにあるパブリックサブネット)
ルートテーブルの作成&設定
下記の設定でルートテーブルの作成をしてください。
【名前】rtb-ntgw-[name]-01
【VPC】使用するVPC
ルートテーブルの作成が完了したら、プライベートサブネットの関連付けを行います。
作成したルートテーブルの詳細を開き、”サブネットの関連付け”タブを開いてください。

【明示的なサブネットの関連付け】の”サブネットの関連付けを編集”をクリック
↓
EC2を配置するプライベートサブネット2つを選択して、保存
これで、SGとNATゲートウェイの準備は以上になります。
次に、EFSの作成に移ります。
2-2.EFSの作成
”ファイルシステムを作成”をクリックしてください。
次のようなダイアログが表示されますが、今回は料金がかからないように細かく設定を行うので下部にある”カスタマイズ”をクリックしてください。
こちらの画面からEFSの作成を行っていきます。

次の内容で設定してください。指定していない箇所はデフォルトで大丈夫です。
【名前】efs-[name]-01
【自動バックアップ】チェックを外す
この下に【パフォーマンス設定】がありますが、デフォルトのままでよいので画像は省略してます。

【VPC】使用するVPC
【マウントターゲット】
画像のようにマウントターゲットは2つ作成
AZ:使用するAZ2種類(今回:ap-northeast-1a,1c)
サブネット:AZ内にあるプライベートサブネット
SG:2-1で作成したEC2用SG
次へ行くと【ファイルシステムポリシー】の設定がありますが、今回は設定しないので飛ばしてください。
【ファイルシステムポリシー】では、EFSで管理するファイルのアクセス制御の設定を行います。
最後まで進んで、作成してください。
以上がEFSの作成になります。
最後のEC2作成に移ります。
2-3.EC2の作成(2台分)
EC2を2台次の設定で作成してください。変更箇所のみ書いているので、それ以外はデフォルトでよいです。
2つ記載がある個所は右側が2台目の設定です。
【名前】ec2-[name]-01 / ec2-[name]-02
ネットワーク設定
【VPC】使用するVPC
【サブネット】ap-northeast-1aのプライベートサブネット / 1cのプライベートサブネット
【パブリックIPの自動割り当て】有効化
【ファイヤーウォール(セキュリティグループ)】既存を選択して、sg-ec2-[name]-01(2-1で作成したもの)
”インスタンス起動”を押して、作成してください。
2台分作成出来たら、動作確認に移りましょう。
2-4.動作確認
まずは、ec2-[name]-01と02をEC2 instance Connectで接続しましょう。
接続ができたら、セットアップします。
1.amazon-efs-utilsのインストール sudo dnf install -y amazon-efs-utils 2.インストールできているか確認 rpm -q amazon-efs-utils 3.EFSのマウント先フォルダの作成 sudo mkdir -p /mnt/efs 4.EFSのマウント sudo mount -t efs -o tls fs-00ab697485aea8011:/ /mnt/efs 5.マウントできているか確認 df -hT or mount | grep efs 6.フォルダに遷移 cd /mnt/efs 7.フォルダ内に何もファイルがないことの確認 ls
2台ともセットアップが完了したら、ec2-[name]-01側でファイルを作成します。
現在は、両方のフォルダには何もない状態になっていると思います。
1.テキストファイルの作成 echo "Hello EFS from EC2-1" | sudo tee test.txt 2.ファイルの内容と存在確認 cat test.txt
ec2-[name]-02側で01で作ったファイルがあるかを確認してみましょう。
確認ができたら、そのファイルを編集しよう!
1.ファイルの内容と存在確認 cat test.txt → Hello EFS from EC2-1と出てくればOk 2.ファイルの編集(内容は変更してもらってOK) echo "Hello EFS from EC2-2" | sudo tee test.txt 3.編集できているか確認 cat test.txt
最後に、ec2-[name]-01でもう一度ファイルの内容を確認して02の内容が反映されているか見てみましょう!
1.ファイルの内容が変更されているか確認 cat test.txt
ちゃんと反映できていたでしょうか?
これで共有ファイルシステムを体験できたかなと思います。
以上で今回のハンズオンは終了です。
最後に
今回作成したもので片づけるものをリストアップします。
上から順に削除してもらえるとスムーズに進むと思います。
・EFS
・ルートテーブル
・NATゲートウェイ
・Elastic IP
・EC2
・SG
*Elastic IPは必ず削除してください。料金が発生しちゃいます。
*SGのec2-[name]-01は、汎用性が高いので残してもOKです。
同じカテゴリーの記事
同じカテゴリの記事を読む