(初心者向け)EC2インスタンスにEFSをマウントしてみた

意外とやったことがなかったのでやってみました
2020.07.27

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

コンサル部@大阪オフィスのYui(@MayForBlue)です。

今回は、ファイルシステムのマネージドサービスであるEFSをEC2インスタンスにマウントする(接続設定をして使用可能にする)方法をご紹介します。

以下のリンクを参考にしましたが、こちらは AWS CLI を使用する方法だったので、この記事では主にマネジメントコンソールを使用してやってみました。
Amazon EFS ファイルシステムを作成し、AWS CLI を使用して Amazon EC2 インスタンスにマウントする

手順

前提条件

  • EC2、EFSを構築するためのVPCとサブネットが用意されていること

セキュリティグループを作成する

EC2とEFSにアタッチするためのセキュリティグループをそれぞれ用意します。

まずはEC2にアタッチするセキュリティグループから作成します。
EC2のダッシュボードの左側メニューから「セキュリティグループ」を選択し、「セキュリティグループを作成」をクリックします。

以下を入力し、「セキュリティグループを作成」をクリックします。

  • セキュリティグループ名:efs-walkthrough1-ec2-sg
  • 説明:Amazon EFS walkthrough 1, SG for EC2 instance
  • VPC:対象のVPCを選択
  • インバウンドルール
    • タイプ:SSH
    • ソース:マイIP
  • タグ
    • キー: Name
    • 値: efs-walkthrough1-ec2-sg

同じ手順でEFSにアタッチするセキュリティグループを作成します。
適用する値は以下です。

  • セキュリティグループ名:efs-walkthrough1-mt-sg
  • 説明:Amazon EFS walkthrough 1, SG for mount target
  • VPC:対象のVPCを選択
  • インバウンドルール
    • タイプ:カスタムTCP
    • ポート範囲: 2049
    • ソース:カスタム / efs-walkthrough1-ec2-sg(EC2用のセキュリティグループを選択)
  • タグ
    • キー: Name
    • 値: efs-walkthrough1-mt-sg

EC2インスタンスを作成する

次にEC2インスタンスを作成します。

EC2のダッシュボードから「インスタンスを起動」をクリックします。

今回は AMI に Amazon Linux AMI を選択します。

インスタンスタイプにt2.microを選択します。

詳細画面で以下を設定して「ストレージの追加」をクリックします。今回は他の値はデフォルトのままとしました。

  • ネットワーク:対象のVPCを選択
  • サブネット:対象のサブネットを選択(今回はパブリックサブネットを使用しました。)
  • 自動割り当てパブリックIP:有効

ストレージはデフォルトのままで「タグの追加」をクリックします。

次はタグの設定です。 今回は以下のようにNameタグのみ設定しました。設定したら「セキュリティグループの設定」をクリックします。

  • Name: efs-test-server

セキュリティグループの設定で「既存のセキュリティグループを選択する」を選択し、EC2用のセキュリティグループを選択したら「確認と作成」をクリックします。

内容を確認して問題なければ「起動」をクリックします。

EC2インスタンスにSSHログインするためのキーペアを選択し、「インスタンスの作成」をクリックします。
キーペアがない場合は新しく作成してください。

EFSを作成する

EC2にマウントするEFSを作成します。

EFSのダッシュボードの左側メニューから「ファイルシステム」を選択肢、「ファイルシステムの作成」をクリックします。

名前とVPCを入力し、作成をクリックします。

作成が完了したら、詳細画面の「ネットワーク」のタブから「マウントターゲットを作成」をクリックします。

以下を設定して「保存」をクリックします。

EC2にEFSをマウントする

EC2にSSH接続して、EFSをマウントします。

以下のコマンドでEC2にSSH接続します。

$ ssh -i 【キーペアのパス】 ec2-user@【パブリックIP】

EFSを接続するディレクトリを作成します。

$ mkdir ~/efs-mount-point

以下のコマンドでEFSをマウントします。

$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 【EFSのファイルシステムID】.efs.【リージョンID】.amazonaws.com:/   ~/efs-mount-point

動作確認する

マウントしたファイルシステムはデフォルトでは再起動するとマウントの設定がリセットされます。 今回は以下の手順を使用して、ファイルシステム内にファイルが作成できることをテストしてみました。

  1. ファイルシステムをマウントしたディレクトリ(~/efs-mount-point)にファイルを作成する
  2. EC2を再起動する
  3. 再起動後、ファイルシステムをマウントしたディレクトリ(~/efs-mount-point)が空になっていることを確認する
  4. 再度同じディレクトリにファイルシステムをマウントする
  5. 1.で作成したファイルが存在することを確認する

1. ファイルシステムをマウントしたディレクトリにファイルを作成する

ディレクトリを変更します。

$ cd ~/efs-mount-point

一覧して中身が空であることを確認します。

$ ls -al

ファイルを追加できるように権限を変更します。

$ sudo chmod go+rw .

テキストファイルを作成します。

$ touch test-file.txt

ディレクトリにファイルが追加されていることを確認します。

$ ls -l
test-file.txt

2. EC2を再起動する

以下のコマンドでEC2を再起動します。

$ sudo reboot

再起動後、数分待って再度SSH接続します。

3. 再起動後、ファイルシステムをマウントしたディレクトリ(~/efs-mount-point)が空になっていることを確認する

ディレクトリを変更します。

$ cd ~/efs-mount-point

一覧して中身が空であることを確認します。

$ ls

4. 再度同じディレクトリにファイルシステムをマウントする

先ほどと同じコマンドで、同じディレクトリに同じファイルシステムをマウントします。  

$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 【EFSのファイルシステムID】.efs.【リージョンID】.amazonaws.com:/   ~/efs-mount-point

5. 1.で作成したファイルが存在することを確認する

$ ls -l
test-file.txt

これで、ファイルシステムがマウントが成功していて、その中にファイルが作成できていることが確認できました。

さいごに

EFSをEC2にマウントするという作業を意外とやったことがなかったので、今回手順を記事にしてみました。
この記事がどなたかのお役に立てば幸いです。

以上、コンサル部@大阪オフィスのYui(@MayForBlue)でした。