Amazon EFSが東京リージョンにやってきたので改めて情報整理

## はじめに
2018年7月に東京リージョンで一般利用可能になった Amazon EFS について
その特徴や最近のアップデートについてまとめます。

2018/12/03 Amazon FSx for Windows File Serverについて補足を追記しました。
2019/01/17 AWS Backupについて補足を追記しました。
2019/09/11 内容を見直して追記やリンクの修正等を行いました。
2020/01/14 時点の情報に更新しました。
2020/07/25 時点の情報に更新しました。

## 特徴
EFSは 一貫性の保証とロック機能を提供しながら共有アクセスを提供する。

### 1. 他のストレージサービスとの違いを整理
#### EFS ネットワークストレージ
ディレクトリ階層にファイルとして格納されたデータ、ネットワーク上で共有する
#### EBS ブロックストレージ
ディスクに複数のブロックとして格納されたデータ、ローカルに接続されている
#### S3 オブジェクトストレージ
データは、キーで識別されるオブジェクトとして保存される


### 2. 分散ストレージ
EFSは単なるNFSの共有ストレージサービスでなく、分散ストレージサービスである。
一貫性の保証とロック機能を提供しながら1000台規模の共有アクセスを提供する。
EBSはSingle AZ で提供されるサービスだがEFSは複数のAZに自動的に複製され、保存される。
これにより高い可用性とデータの耐久性を得ることができる。

### 3. 強い一貫性
S3の PUT/DELETE後の 結果整合性とは異なり、全ての読み込みは最新のデータが
反映されていることが保証されている。

**Amazon EFS のデータ整合性**
https://docs.aws.amazon.com/efs/latest/ug/how-it-works.html#consistency

オペレーションあたりのレイテンシーに関しても、一貫した低いレイテンシーを提供する。
S3はレイテンシーが一定でないため、一貫したレイテンシーを重要視するなら、
S3よりもEFSが選択肢となる。(もちろん、Single AZ の EBS よりはレイテンシーが高い)

**パフォーマンスの概要**
https://docs.aws.amazon.com/ja_jp/efs/latest/ug/performance.html#performance-overview
**各 AWS ストレージサービスの比較**
https://www.slideshare.net/AmazonWebServicesJapan/20180704-aws-black-belt-online-seminar-amazon-elastic-file-system-amazon-efs-201889-update/52


## 性能関連
### パフォーマンスモードの選択
汎用モードと最大I/Oモードの2種類から選択する。多くの場合、汎用モードで事足りる。
最大I/Oモードは大量のクライアントから接続する際にI/O操作のレイテンシより合計スループットを優先する。
CloudWatch の PercentIOLimitメトリックがで汎用モードの性能が100%に
到達するような環境では最大I/Oモードの効果がある。

2つのパフォーマンスモードの違い
https://www.slideshare.net/AmazonWebServicesJapan/20180704-aws-black-belt-online-seminar-amazon-elastic-file-system-amazon-efs-201889-update/52

### スループットモードの選択
BurstingモードとProvisionedモードから選択する。

**Throughput Modes**
https://docs.aws.amazon.com/efs/latest/ug/performance.html#throughput-modes

BurstingモードではEBSの汎用SSD(gp2)のI/Oクレジットと同様に、バーストクレジットという考え方がある。
スループットがベースラインより低い場合はクレジットを蓄積し、高い場合は消費する。
ベースライン性能とバースト時の性能はEFSストレージの割当容量によって異なるのがポイント。
ex. 1TiBのファイルシステムの場合、ベースラインが 50MiB/秒で、最大12時間連続100 MiB/秒までバースト可能。

**バーストモデル: サイズによるスループット性能**
https://www.slideshare.net/AmazonWebServicesJapan/20180704-aws-black-belt-online-seminar-amazon-elastic-file-system-amazon-efs-201889-update/52

Provisionedモードを選択すると 1～1024MiBの範囲で必要なスループットを指定可能。
追加料金として MiB/秒 あたり 月額 7.20 USD (東京リージョン）が発生する。
https://aws.amazon.com/jp/efs/pricing/

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/45d149a9-b2a7-d5ac-d501-c4ad0f84035d.png)

そのため、明示的に性能をあげたい場合はダミーファイルを作って容量をかさ増しするか
Provisionedモードを使用するということになる。

### 注意点
EFSの最大スループットに関しては、並列で複数インスタンスからアクセスされた場合の性能値。
EC2 1インスタンスあたりの最大スループットは 500MiB/s という制限値がある。
(2020/7/23 のアップデートで 250MiB/s →　500MiB/s に向上) 
そのため、どれだけ容量を割り当てても単一インスタンスはこの制限値を超えられない。

## バックアップについて
~~2018年8月時点でEFSのバックアップは機能としては提供されていない。~~
~~複数AZにデータが複製されているという耐久性を考えれば、データ保護目的でのバックアップは~~
~~さほど重要ではないかもしれないが、データの誤削除等により特定時点のデータに戻すことはできない。~~

2019/1/17に発表されたAWS BackupでEFSのバックアップをS3に取得できるようになった。
AWS Backup は2019/6/27より東京リージョンでも利用可能。

**AWS Backup – Automate and Centrally Manage Your Backups**
https://aws.amazon.com/jp/blogs/aws/aws-backup-automate-and-centrally-manage-your-backups/

また2020年1月に AWS Backupで取得したファイルシステムのバックアップからファイル単位での復元が可能になった

AWS Backupが登場する以前はAWSサービスを活用したバックアップ構成をとる必要があった。

* AWS Answers で公開されているソリューションテンプレート(CloudFormation)を活用
    * https://aws.amazon.com/jp/answers/infrastructure-management/efs-backup/
* AWS Data Pipeline を使用して、Amazon EFS ファイルシステムをバックアップする
    * https://docs.aws.amazon.com/ja_jp/efs/latest/ug/alternative-efs-backup.html

## Windows 対応
EFSはNFSv4のみをサポートしている。
Windowsのファイル共有で使用されるSMBプロトコルには対応していない。
また Windowsの NFS クライアント機能は ネイティブに NFSv4をサポートしていないため、
Amazon EFSにおいても Windows はサポート対象外となっている。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/AmazonEFS.html

> 重要
> Amazon EFS は Windows インスタンスではサポートされていません。

#### 2018/12/3 追記
AWS re:Invent 2018で **Amazon FSx for Windows File Server** が発表された。
Windows Server 100%互換を謳うマネージドファイルサーバー。
MicrosoftADとの連携や、SMBによるアクセスが実現でき、S3へのバックアップも可能。
~~EFSと異なる点としてはインスタンスはSingle AZのサービスであるため、マルチAZと構成とするには~~
~~複数AZでインスタンスを構築した後にDFS(Distributed File System)による~~
~~レプリケーション構成を組む必要がある。~~
→ 2019/11/20 のアップデートで マルチAZ構成がサポートされました。

**新発表 – Amazon FSx for Windows ファイルサーバー – 高速・完全マネージド型・セキュアなファイルサーバー**
https://aws.amazon.com/jp/blogs/news/new-amazon-fsx-for-windows-file-server-fast-fully-managed-and-secure/
**Amazon FSx for Windows File Server now supports file systems that span multiple Availability Zones**
https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-fsx-for-windows-file-server-now-supports-file-systems-that-span-multiple-availability-zones/

## 直近の主要なアップデート
* [クライアント毎のスループット制限が 500MiB/S に向上(2020/07)](https://aws.amazon.com/about-aws/whats-new/2020/07/amazon-elastic-file-system-increases-per-client-throughput/)

* [新しい EFS コンソールのリリース(2020/07)](https://aws.amazon.com/about-aws/whats-new/2020/07/new-amazon-elastic-file-system-console-simplifies-file-system-creation-and-management/)

* [自動バックアップのデフォルト有効化(2020/07)](https://aws.amazon.com/about-aws/whats-new/2020/07/announcing-automatic-backups-for-amazon-elastic-file-system/)

* [バーストスループットモードの最小スループットが 1 MiB/s に向上(2020/06)](https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-efs--increases-file-system-minimum-throughput/)

* [AWS Lambda のサポート(2020/06)](https://aws.amazon.com/about-aws/whats-new/2020/06/aws-lambda-support-for-amazon-elastic-file-system-now-generally-/)

* [SLA が 99.99% に向上(2020/04)](https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-efs-updates-service-level-agreement-to-99-99-percent/)

* [Amazon ECS / AWS Fargate のサポート(2020/04)](https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-ecs-aws-fargate-support-amazon-efs-filesystems-generally-available/)

* [汎用モードの1秒あたりの読み込みオペレーション数が 35,000 に向上(2020/04)](https://aws.amazon.com/about-aws/whats-new/2020/04/amazon-elastic-file-system-announces-increase-in-read-operations-for-general-purpose-file-systems/)

* [AWS CodeBuildのサポート(2020/02)](https://aws.amazon.com/about-aws/whats-new/2020/02/aws-codebuild-adds-support-for-amazon-efs/)

* [IAM を使用してアクセスを管理できるように(2020/01)](https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-elastic-file-system-amazon-efs-now-supports-aws-identity-and-access-management-iam-for-network-file-system-clients/)

* [EFSアクセスポイント機能を利用可能に(2020/01)](https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-elastic-file-system-introduces-efs-access-points/)

* [IAMを使用して、EFSへのNFSアクセスを制御可能に(2020/01)](https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-elastic-file-system-introduces-efs-access-points/)

* [AWS Backupで取得されたEFSのバックアップからファイル単位での復元が可能に(2020/01)](https://aws.amazon.com/about-aws/whats-new/2020/01/aws-backup-delivers-fast-restore-experience-amazon-efs-item-level-recovery/)

* [Service-Linked Rolesをサポート(2019/12)](https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-elastic-file-system-now-supports-service-linked-roles/)

* [IAストレージクラスのライフサイクル管理で7日が選択可能に(2019/11)](https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-elastic-file-system-infrequent-access-now-supports-7-day-lifecycle-management-policy/)

* [PrivateLinkのサポート(2019/10)](https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-efs-supports-aws-privatelink/)

* [EC2の起動ウィザード内で、既存のファイルシステムをマウントする設定が可能に(2019/10)](https://aws.amazon.com/jp/about-aws/whats-new/2019/10/amazon-efs-now-in-ec2-launch-instance-wizard/)

* [Amazon EKS で EFS用のCSIドライバーがサポート(2019/09)](https://aws.amazon.com/jp/about-aws/whats-new/2019/09/amazon-eks-announces-beta-release-of-amazon-efs-csi-driver/)

* [EFS IAストレージクラスの料金値下げ(2019/09)](https://aws.amazon.com/about-aws/whats-new/2019/09/announcing-amazon-efs-price-reduction-for-infrequent-access-storage/)

* [EFS IAストレージクラスのライフサイクル管理(2019/07)](https://aws.amazon.com/jp/about-aws/whats-new/2019/07/optimize-cost-amazon-efs-infrequent-access-lifecycle-management)
    * 一定期間アクセスがないファイルを自動的に低価格なEFS IAストレージクラス移動できる
    * 14、30、60、90日から選択可能になった

* [AWS DataSync で EFS-to-EFS 転送をサポート(2019/05)](https://aws.amazon.com/jp/about-aws/whats-new/2019/05/aws-datasync-now-supports-efs-to-efs-transfer/)

* [IAストレージクラスが利用可能に(2019/02)](https://aws.amazon.com/jp/about-aws/whats-new/2019/02/amazon-efs-introduces-lower-cost-storage-class/)

* [99.9%のSLAを設定(2019/01)](https://aws.amazon.com/jp/about-aws/whats-new/2019/01/amazon-efs-announces-99-9-service-level-agreement/)

* [アカウントおよびVPCをまたいだアクセスが可能に(2018/11)](https://aws.amazon.com/jp/about-aws/whats-new/2018/11/amazon-efs-now-supports-access-across-accounts-and-vpcs/)
    * 別アカウントからのアクセスは別途Shared VPCを設定する必要がある
    * 別VPCからのアクセスはVPC PeeringまたはTransig Gatewayを設定する必要がある
        * ただし同一リージョン内のVPC PeeringにおけるアクセスはNitro世代のインスタンスタイプに限定
    * VPC Peeingの場合、別VPCのファイルシステムのDNS名を名前解決を使用することはできない
        * 対応するアベイラビリティーゾーンのマウントポイントのIPアドレスを指定する

* [ECS が Docker Volume および Volume Plugin をサポート(2018.08)]
(https://aws.amazon.com/jp/about-aws/whats-new/2018/08/amazon-ecs-now-supports-docker-volume-and-volume-plugins/)
    * EFS ではなく ECS のアップデートだが、ECS が Docker Volume をサポートしたことにより、EFS 上 に Docker Volume を作成することで、コンテナインスタンスを意識しない永続ストレージアクセスを簡単に設定できるようになった。

* [東京リージョンでの提供開始(2018/7)]
(https://aws.amazon.com/jp/about-aws/whats-new/2018/07/amazon-elastic-file-system-amazon-efs-available-in-asia-pacific-tokyo-region/)

* [PCIDSSへの準拠(2018.07)](https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-efs-achieves-pci-dss-compliance/)

## その他メモ

### コスト
(当然だが)Single AZのEBSと比較すると利用料金がかかる。
ただしプロビジョニングした料金に対して課金されるEBSに対し、
EFSは実際に使用した分のみの課金。

### 主要な制限
* アカウントあたりのファイルシステム数: 1,000
* VPC毎の マウントターゲットの数: 400
* 1台のインスタンスから同時にオープンできるファイル数: 32,768
* 1ファイルあたりのロックの数: 512
* 単一ファイルの最大サイズ：52,673,613,135,872バイト（47.9 TiB）
* パフォーマンスモードの変更は不可(ファイルシステムの再作成が必要)

## 参考
* AWS Summit Tokyo 2018
    * [AWS Storage Service Deep Dive](https://d1.awsstatic.com/events/jp/2018/summit/tokyo/aws/46.pdf)
* AWS クラウドサービス活用資料集
    * [【 AWS Black Belt Online Seminar 】
Amazon Elastic File System (Amazon EFS)](https://d1.awsstatic.com/webinars/jp/pdf/services/20180704_AWS-BlackBelt_AmazonEFS.pdf)

以上です。
参考になれば幸いです。