やさしいEFS の構築

12月 17, 2021AWS,EFS

概要

  • 今回も、これまでペーパー上しか(AWS 認定試験しか)関わってこなかった Amazon EFS を学ぶ機会が出来ました。案件に感謝です。
  • 前職ではUnix/Linux を使ったNFS サーバーの構築や、NAS ストレージを担当した経験があるため、EFS には親近感がありますね。

EFS とは

  • Amazon EFS(Elastic File System)は、Linux ワークロードに NFS ファイルシステムのストレージを提供するフルマネージド型サービスです。
  • NFS v4.0/4.1 に対応。Linux からmount して使用します。Windows のファイル共有(CIFS/SMB)としては利用できません。
  • EFSは、NFS を利用するためファイル単位でのアクセスとなります。(EBSはブロックアクセス)
  • 同一のファイルシステムに、複数のEC2 から同時にアクセスが可能です。
  • 強い整合性があり、読み込みには最新のデータが反映されます。
  • ファイルの追加・削除に合わせ、ファイルシステムが自動拡張・縮小されます。
  • 保存容量に応じて、スループット性能が向上します。

 

EFS の活用シーン

  • EFSの活用シーンは、大量のEC2 インスタンスでデータを共有・分散して分析を行うアプリケーション、AutoScaling するWebサーバでコンテンツを共有するリポジトリなどのケースが考えられます。
  • S3 は直接EC2 にmountすることはできないため、S3 をファイル共有に利用できないケースやパフォーマンスが求められるケースでは、EFS が活躍しますね。
  • Lambda 関数から EFS にアクセスすることはできません。Lambda 関数の間で情報共有を行う場合は、DynamoDB あるいは S3 を利用します。

 

EFS の利用料

  • 保存容量に対する課金であり、データ転送量やリクエスト数による課金は発生しないシンプルな料金となります。

 

 

EFS の構築

  • AWS コンソールからEFS のサービスを開きます。

 

  • 「ファイルシステムの作成」を選択します。

 

  • 「ファイルシステムの作成」にて、以下を指定します。
    • ファイルシステムの名前(オプション)
  • 「カスタマイズ」を押します。

 

  • 「ファイルシステムの設定」にて、以下を指定します。
    • 可用性と耐久性: リージョン or 1 ゾーン
    • 自動バックアップ(デフォルト: 有効)
    • ライフサイクル管理 ※IAは低頻度アクセスのストレージクラスです
      • IA へ以降(デフォルト: 最後のアクセスから 30日)
      • IA から以降(デフォルト: 初回アクセス時)
    • パフォーマンスモード(汎用(デフォルト) or 最大I/O)
      • パフォーマンスモードの説明はこちら
    • スループットモード(バースト(デフォルト) or プロビジョニング済み)
      • スループットモードの説明はこちら
    • 保管時のデータ暗号化(デフォルト: 有効)
      • KMSキー

 

  • 必要に応じて、タグを入力。「次へ」を押します。

 

  • 「ネットワークアクセス」にて、EFS のマウントターゲットを作成する VPCを指定します。
  • 次に、マウントターゲットを作成するAZ、サブネット、セキュリティグループを指定します。マウントターゲット毎にセキュリティグループは設定可能です。

 

  • 「ファイルシステムポリシー」にて、ポリシーオプションが指定できます。

 

  • ファイルシステム、ネットワークアクセス、ファイルシステムポリシーの設定を確認し、「作成」を押します。

 

  • EFS ファイルシステムの作成が完了しました。

 

  • 今回作成したファイルシステムID は、"fs-01e42e11e4bd05f01″ となります。

 

  • ファイルシステムを選択すると、詳細が確認できます。

 

  • 「ネットワーク」タブを選択すると、マウントターゲットが確認できます。マウントターゲットは、EC2 インスタンスが接続するNFS のエンドポイントです。
  • AZ毎にマウントターゲットが作成され、ENI、IPアドレスが割り当てられます。
  • EC2 からマウント時は、ファイルシステムID を使用するため、マウントターゲットは意識しません。

 

 

EC2 からEFS をmount する

  • EFS は、Linux からNFS v4.0/4.1 プロトコル(TCP 2049ポート)にて使用可能です。以下、Amazon Linux2 からEFS をmount する際の手順です。
  • EFS マウントヘルパー(amazon-efs-utils パッケージ)をインストールします。
$ yum list installed | grep amazon-efs-utils

$ sudo yum install amazon-efs-utils
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                               | 3.7 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package amazon-efs-utils.noarch 0:1.31.2-1.amzn2 will be installed
--> Processing Dependency: stunnel >= 4.56 for package: amazon-efs-utils-1.31.2-1.amzn2.noarch
--> Running transaction check
---> Package stunnel.x86_64 0:4.56-6.amzn2.0.3 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch        Version                Repository       Size
================================================================================
Installing:
 amazon-efs-utils      noarch      1.31.2-1.amzn2         amzn2-core       46 k
Installing for dependencies:
 stunnel               x86_64      4.56-6.amzn2.0.3       amzn2-core      149 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 195 k
Installed size: 479 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): amazon-efs-utils-1.31.2-1.amzn2.noarch.rpm          |  46 kB   00:00
(2/2): stunnel-4.56-6.amzn2.0.3.x86_64.rpm                 | 149 kB   00:00
--------------------------------------------------------------------------------
Total                                              988 kB/s | 195 kB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : stunnel-4.56-6.amzn2.0.3.x86_64                              1/2
  Installing : amazon-efs-utils-1.31.2-1.amzn2.noarch                       2/2
  Verifying  : stunnel-4.56-6.amzn2.0.3.x86_64                              1/2
  Verifying  : amazon-efs-utils-1.31.2-1.amzn2.noarch                       2/2

Installed:
  amazon-efs-utils.noarch 0:1.31.2-1.amzn2

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

Complete!
$ yum list installed | grep amazon-efs-utils
amazon-efs-utils.noarch               1.31.2-1.amzn2                 @amzn2-core

 

  • mount コマンドを使って、EFS をmount します。EFS マウントヘルパーで提供される tls オプションを指定します。"fs-01e42e11e4bd05f01″ は、先ほど作成したEFS のファイルシステムID です。
  • EFS マウントヘルパーによって、EFS に最適な以下のマウントオプションが自動的に設定されます。
    • nfsvers=4.1, rsize=1048576, wsize=1048576, hard, timeo=600, retrans=2
$ sudo mkdir /efs

$ sudo mount -t efs fs-01e42e11e4bd05f01 -o tls /efs

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        230M     0  230M   0% /dev
tmpfs           240M     0  240M   0% /dev/shm
tmpfs           240M  524K  240M   1% /run
tmpfs           240M     0  240M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  23% /
tmpfs            48M     0   48M   0% /run/user/0
tmpfs            48M     0   48M   0% /run/user/1000
127.0.0.1:/     8.0E     0  8.0E   0% /efs

 

  • 以下のエラーが出力された場合は、マウントターゲットに割り当てたセキュリティグループにNFS(TCP 2049ポート)のアクセスが許可されていません。
$ sudo mount -t efs fs-01e42e11e4bd05f01 -o tls /efs
b'mount.nfs4: Connection reset by peer'

 

  • 次は、/etc/fstab にエントリを追加して、自動で mount されるように設定します。
$ sudo umount /efs

$ vi /etc/fstab

$ cat /etc/fstab
#
UUID=e6c06bf4-70a3-4524-84fa-35484afc0d19     /           xfs    defaults,noatime  1   1
fs-01e42e11e4bd05f01:/ /efs efs tls,_netdev 0 0 -

$ sudo mount /efs

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        230M     0  230M   0% /dev
tmpfs           240M     0  240M   0% /dev/shm
tmpfs           240M  468K  240M   1% /run
tmpfs           240M     0  240M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  23% /
tmpfs            48M     0   48M   0% /run/user/1000
127.0.0.1:/     8.0E  1.0G  8.0E   1% /efs

 

 

参考資料

AWS,EFS

Posted by takaaki