Help us understand the problem. What is going on with this article?

【AWS EFS】共有ファイルストレージ構築

目標

・AWS EFS(※1)を利用して共有ネットワークファイルストレージを構築する。
・EFS固有の特徴をハンズオンで検証する。

※1 EFSとは
AWSが提供するフルマネージド型のNFSサーバ(※2)のことです。
マネージドサービスのため自前でNFSサーバを構築するより高速構築が出来、
かつ管理の手間を省くことが可能です。

※2 NFSとは
ネットワークを通じてファイルシステムを共有する際に使われる通信プロトコルのことです。
主にUnix系OS同士のファイルシステム共有にはNFSが古くから使われているようです。

前提

・複数AZにEC2サーバ(Amazon Linux 2 AMI (HVM), SSD Volume Type)が構築済みであること。
・基本的なLINUXコマンド操作が出来ること。

利用環境

ハードウェア : AWS EC2サーバ 2台(別AZ構成)
OS(AMI) : Amazon Linux 2 AMI (HVM), SSD Volume Type
その他ソフトウェア:
amazon-efs-utils(EFS操作用ユーティリティ)
…NFSクライアントを利用するよりEFSに関しては便利な様です。

EFSとEBSの違い

ほぼAWS資格本の抜粋ですが、今一度まとめます。

EFS    EBS
接続 EC2インスタンスとネットワーク接続 EC2インスタンスとネットワーク接続
接続台数 1台のEC2インスタンスと接続可能    複数のEC2インスタンスと接続可能     
データ永続性 永続化可能 永続化可能
耐久性 単一AZ内で冗長化 複数AZで冗長化
拡張性 手動ボリューム拡張 自動ボリューム拡張
パフォーマンス 高速 高速
料金体系 ギガバイトあたりの重量課金(安) ギガバイトあたりの重量課金(高)

以上より、EFSがEBSと比較して優れているところは、

・複数のEC2インスタンスから接続可能であること
・複数AZで冗長化されるため、耐久性が高い
・自動サイズ拡張機能があるため、管理が楽

が該当するかと思います(デメリットは少し料金が高いとこ)。

完成図

異なるAZに存在するEC2インスタンスから共通のEFSファイルシステムへ接続します。
EC2⇔EFS間はマウントターゲット(※)とよばれるNFSエンドポイントを経由してアクセスします。

Untitled Diagram (3).png

※マウントターゲットは各AZ毎に作成されます。
セキュリティグループをつけることで、仮想ファイアフォールとしても機能しています。

作業の流れ

項番 タイトル
1 EFSファイルシステムを作成する
2 EFSファイルシステムをEC2にマウントする
3 動作検証

手順

1.EFSファイルシステムを作成する

①Amazon EFS マネジメントコンソール (https://console.aws.amazon.com/efs/) を開きます。
ファイルシステムの作成をクリック
③ネットワークアクセスの設定
以下のように、各値を投入してください。
設定が終わったら次のステップ

VPC: 接続元EC2インスタンス群が所属するVPCID
サブネット: 接続元インスタンス群が所属するサブネットID
セキュリティグループ: 各マウントターゲットに付与したいセキュリティグループ(※)

NFS通信を許可したセキュリティグループを使用しなければならないことに注意してください!
(投稿者はここの不備が原因でEC2⇔EFS間の疎通が取れなく時間食ってしまいました。。)
確認する手順は後述致します。

tempsnip.png

④ファイルシステムの設定を行う
設定は任意です。
Nameタグはつけといた方がわかりやすいです。
ライフサイクル管理を有効化するとコストパフォーマンスがよくなるらしいので一応設定しました。
tempsnip.png

パフォーマンスや暗号化に関する設定です。
特別な要件がなければデフォルトでよいかと思います。
設定が終わったら次のステップ
tempsnip.png

⑤クライアントアクセスを設定(※)
今回の要件では設定不要です。
次のステップをクリック

※設定内容
EFSファイルシステムへIAM、及びアクセスポイントを利用してのアクセス制御をかけることが出来るようです。
マウントターゲットに付与したセキュリティグループに加え、より高度なアクセス制御が可能となります。
以下、参考にさせて頂いた記事でEFSの詳細仕様がまとまっています。

Amazon Elastic File System(EFS)を使ううえでの勘所(EFSってアクセス制御できるの?)
https://qiita.com/taichimachima/items/f7d47b68aac2a11ea7cc

tempsnip.png

⑥設定内容確認
設定内容問題なければ、ファイルシステムの作成をクリック
tempsnip.png

⑦ファイルシステム作成確認
マウントターゲット状態が利用可能になるまで待ちます。
tempsnip.png

⑧マウントターゲットに付与されているセキュリティグループの確認
マウントターゲットに付与されているセキュリティグループのIDを確認します。
tempsnip.png

上記で確認したセキュリティグループがNFS2049番ポートを許可していることを確認してください。
tempsnip.png

2.EFSファイルシステムをEC2にマウントする

①マウント実行
sudo yum install -y amazon-efs-utils 実行(EFS操作ユーティリティのインストール)
Complete!と出力されること

[root@AZ-a-test ~]# sudo yum install -y amazon-efs-utils
Installed:
  amazon-efs-utils.noarch 0:1.25-3.amzn2

Dependency Installed:
  stunnel.x86_64 0:4.56-6.amzn2.0.3

Complete!

マウント用のディレクトリ(対象ディレクトリは任意です)を作成します
mkdir /mnt/efs 実行

[root@AZ-a-test ~]# mkdir /mnt/efs

マウント実行します
mount -t efs <ファイルシステムID(※)>:/ /mnt/efs 実行(EFSの場合ファイルシステムタイプの指定がEFSになるようです)
※EFSファイルシステムの一覧画面上から確認可能です。

[root@AZ-a-test ~]# mount -t efs fs-74444555:/ /mnt/efs
[root@AZ-a-test ~]#

正常にマウントされたか確認を行います。
df-h 実行
⇒マウントポイントとして指定したディレクトリにEFSファイルシステムがマウントされていること

[root@AZ-a-test ~]# df -h
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           492M     0  492M   0% /dev/shm
tmpfs                                           492M  460K  492M   1% /run
tmpfs                                           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1                                      8.0G  1.3G  6.8G  16% /
tmpfs                                            99M     0   99M   0% /run/user/1000
tmpfs                                            99M     0   99M   0% /run/user/0
fs-74444555.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /mnt/efs

3.動作検証

①EFSに存在するファイルをEC2サーバ間(複数AZ)で共有可能か検証
EFSのマウントポイント配下に任意のファイルを作成します(AZ-a上のEC2サーバ)。

# Az-aに存在するEC上でファイルを作成
[root@AZ-a-test ~]# touch /mnt/efs/test_AZa

別AZに存在するEC2サーバ上で、前述した2.EFSファイルシステムをEC2にマウントするを再度実行し、
EFSファイルシステムをマウントしてください。

別AZ上に存在するEC2サーバ上でEFSファイルシステムのマウントポイント配下を確認します。
⇒前手順で作成されたファイルが表示されればOKです!

# Az-cに存在するEC2上でも、他AZ上のEC2サーバで作成されたファイルが共有できている
[root@AZ-c-test ~]# ll /mnt/efs/
total 4
-rw-r--r-- 1 root root 0 Jun 20 03:22 test_AZa
[root@AZ-c-test ~]#

②EFSの自動拡張を検証
EFSファイルシステム初期構築時点では、サイズは12kiBでした。
tempsnip.png

そこで10MBのファイルをEC2上で作成してみます。
まず、マウントポイントへ移動

[root@AZ-c-test ~]# cd /mnt/efs/

dd if=/dev/zero of=test10M bs=1M count=10 を実行し、10MBのファイルを作成します。

[root@AZ-c-test efs]# dd if=/dev/zero of=test10M bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.271142 s, 38.7 MB/s

数分後、EFSファイルシステムのサイズが10MBまで自動拡張されていることを確認出来ました!
tempsnip.png

参考記事

手順途中でも掲載しましたが、以下の記事ではより詳細にEFSの仕様をまとめられています。

Amazon Elastic File System(EFS)を使ううえでの勘所
https://qiita.com/taichimachima/items/f7d47b68aac2a11ea7cc

aWdfcfG2jLr73pe
分類はクラウドエンジニア。 業務では主にAWSCLI&Bashプログラミングを利用したInfrastructure As Code領域の設計、開発、運用を担当してました。NARUTOが好き🍥(ドラゴンボール、スラムダンク、ヒカルの碁も)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした