Amazon EFS

#ネットワークファイルシステム(NFS)って？#
ネットワークを介してサーバ上のストレージ領域をローカルストレージと同様にマウントして使える点です。

#EFSの特徴#

- EBSは容量確保型であり、使った容量分だけの課金がされます。データアクセスには課金されません。
- バースト機能によって、スケーラブルに対応します。
- ペタバイトまで利用可能です。
- スループット、IOPSは自動的にスケーリングし、低レイテンシーを維持します。
- 数千の同時接続をサポートします。
- 複数のAZに複製、保存された高耐久性、高可用性を担保している。

[Amazon EFS の制限](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/limits.html)　もあるので注意を。

#ユースケース#

- 高スループット、低レイテンシーを必要とするビックデータアプリケーション
- コンテンツ管理用ファイルシステム
- 組織全体のユーザがアクセス可能なファイルシステムを作成し、ユーザーグループのファイルレベル、またはディレクトリレベルのアクセス許可。

#スループット#

##バーストのスループット##

- ピーク時にクレジットを消費してバーストを実行して一時的な性能を向上させる方式
- 最大スループットとバースト時間に宣言がある
- スループット性能向上にはストレージ容量の増大が必要
- [[2021/01/30 アップデート]Amazon EFSのリードスループットがお値段据え置きで3倍になりました](https://dev.classmethod.jp/articles/efs-read-throughput-3-times-faster/)


##プロビジョンドスループット##

- 一貫したスループットを事前に設定する方式
- API／AWS CLI／マネジメントコンソールにより制御
- 1日に1回だけスループット性能を減少できる

#バックアップ#

- AWS Backup で自動的にバックアップされるようになりました。

[Amazon Elastic File System の自動バックアップが登場](https://aws.amazon.com/jp/about-aws/whats-new/2020/07/announcing-automatic-backups-for-amazon-elastic-file-system/)

#ストレージクラス#

- リージョン
  複数の AZ にデータを冗長的に保存

- One Zone
  単一の AZ 内にデータを冗長的に保存

「One Zone」が新しくリリースされました。ただし、単一の AZ 内に保存されるので、本番用途には向いていなく開発環境などでコストを抑えるために利用するべきである。
[[Mar 9, 2021]Amazon Elastic File System 向けの低コストのストレージクラスのご紹介](https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html)

![スクリーンショット 2021-03-12 012224.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/1b3897cd-feef-7532-b90c-76d663424188.png)

#注意#
EFSは、CIFS/CIFSプロトコルをサポートしていないため、Windowsファイル共有をサービスからはマウントできません。
その代替えサービスとしては、Amazon FSx for Windowsがあり、SMBプロトコルを使ってアクセス可能な、高い耐久性と可用性を備えたWindowsファイルシステムを構築することができます。


#リンク#
[AWS CLIを利用して、EFS をEC2 にマウントしてみた](https://qiita.com/leomaro7/items/32c8cc73cf11f41df078)


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

Amazon EFS から 「ファイルシステムの作成」 をクリックします。
![スクリーンショット 2018-08-23 19.36.33.png](https://qiita-image-store.s3.amazonaws.com/0/280929/e743a84a-1395-61fd-1da4-39247995c98f.png)

##ステップ 1: ファイルシステムアクセスの設定##
マウントターゲットはエンドポイントのような役割をします。
EC2→マウントターゲット→1つのEFSを共有するイメージです。

「VPC：デフォルト」、[マウントターゲットの作成]はすべてチェックし、「次のステップ」 をクリックします。
![スクリーンショット 2018-08-23 19.39.48.png](https://qiita-image-store.s3.amazonaws.com/0/280929/2eee0464-324e-4b82-0230-43b50c4c3017.png)

##ステップ 2: オプション設定の構成##
基本は汎用モードで使用されることが推奨されています。
最大I/Oモードとの違いは、[パフォーマンスモード](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/performance.html)を確認して見ましょう。

デフォルトのまま「次のステップ」 をクリックします。
![スクリーンショット 2018-08-23 19.43.29.png](https://qiita-image-store.s3.amazonaws.com/0/280929/3d354b61-54be-fa69-e375-4b51117d49b5.png)

##ステップ 3: 確認と作成##

デフォルトのまま「ファイルシステムの作成」 をクリックします。
![スクリーンショット 2018-08-23 19.41.57.png](https://qiita-image-store.s3.amazonaws.com/0/280929/73890423-9106-1336-f549-5a691a1d3ffc.png)


#2.Amazon EC2 で仮想マシンを作成する#
[AWS EC2 ハンズオン](https://qiita.com/leomaro7/items/8560bfbeb0672d0d83ec) を参考に以下の用件でインスタンスを作成します。
　インスタンス：Amazon Linux AMI
　type:t2.micro
　他:デフォルト

※インスタンスがファイルシステムにアクセスできるようにする必要がるため、TCP 2049番ポートをセキュリティグループで許可するようにしてください。※

ssh で EC2 インスタンスに接続後、マウントしていきます。

ファイルシステムにアクセスするには、標準の Linux のマウントコマンドとファイルシステムの DNS 名を使用して、ファイルシステムをマウントします。
マウントが完了すると、ローカルファイルシステム内と同じように、ファイルシステムでファイルやディレクトリを操作できるようになります。

EFS を開き、「Amazon EC2 のマウント手順 (ローカル VPC から)」を選択します。
![スクリーンショット 2018-11-16 22.17.26.png](https://qiita-image-store.s3.amazonaws.com/0/280929/fb84b1d8-ce0b-8844-da82-58972e407472.png)

[Amazon EC2 のマウント手順 (ローカル VPC から)] ウィンドウの通り進めます。
![スクリーンショット 2018-11-16 22.40.56.png](https://qiita-image-store.s3.amazonaws.com/0/280929/88ae9f05-1a49-e72e-4f89-f919c109d0aa.png)

今回は、Amazon Linux EC2 インスタンスを使用しているので、次のコマンドを使用して EFS マウントヘルパーをインストールします。

```
sudo yum install -y amazon-efs-utils
```

インスタンスに新しいディレクトリを作成します。

```
sudo mkdir efs
```

新しいディレクトリにファイルシステムをnfs4タイプでマウントします。
[Amazon EC2 のマウント手順 (ローカル VPC から)]に書かれている、sudo mount –t nfs4...の部分を実行します。

```
sudo mount –t nfs4... `
```

マウントされているか確認しましょう。

```
df -h
```

![スクリーンショット 2018-11-16 22.30.33.png](https://qiita-image-store.s3.amazonaws.com/0/280929/a1071c8e-769e-d125-2cbd-5223c699f430.png)


新しいディレクトリに 1 GiB のファイルを生成し、新しいファイルシステムでテストファイルを作成します。

```
sudo dd if=/dev/zero of=~/efs/1GiB bs=1M count=1024 status=progress
```

![スクリーンショット 2018-11-16 22.32.52.png](https://qiita-image-store.s3.amazonaws.com/0/280929/fb507dee-e3f3-cb89-8775-b07ac0f93f2a.png)


#トラブルシュート#
- Connection timed out

[[小ネタ][EFS]マウント時にConnection timed outが出て少しハマる](https://dev.classmethod.jp/articles/20181209-efs/)

- Failed to resolve

[【AWS】EC2からEFSをマウントする](https://komepea.hatenablog.com/entry/2019/07/24/203030)