AWS再入門ブログリレー2022 Amazon EFS編

弊社コンサルティング部による『AWS 再入門ブログリレー 2022』の7日目のエントリでテーマはAmazon EFSです。 色々な機能がありますのでおさらいしていきます。1つでも知らない機能があり、学びにつながれば幸いです。
2022.02.09

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

初めに

こんにちは、クラメソコリアのヌヌです。

当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2022』の 7日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとっても AWSサービスの再発見や2022 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。7日目のテーマはAmazon EFSです。

Amazon EFSとは

Amazon EFS(Elastic File System)はファイルシステムの簡単な作成・管理や自動拡張できるファイルシステムを提供するマネージドサービスで、AWSクラウドサービスとオンプレミスリソースで使用可能です。NFSで共有ファイルシステムを提供しており、Linuxワークロードでは使用できますがWindowsベースのクライアントはEFSを使えません。(WindowsはAmazon FSx for Windows File Serverでファイルストレージサービスを利用できます)

EFSのアーキテクチャ

One ゾーンストレージクラス(左)と標準ストレージクラス(右)EFSのアーキテクチャです。

NFS Client はEFSをマウントするVPC内のEC2、EKS、ECS、LambdaなどのコンピューティングインスタンスのことでMount Targetを通じてEFSにアクセスします。

各AZごと一つ作成されるMount Target はNFS ClientがEFSをマウントするために必要な NFSv4のエンドポイントのことでIPアドレスを提供します。構成図には記載されていないですが、ユーザーID・グループIDを適用してアプリケーションごとのアクセス管理を簡単に実現可能なアクセスポイントを作成することも可能です。そしてアクセスポイントとIAMポリシーを使って特定のデータへのアクセスを保護することも可能です。

シングルAZのOne ゾーンストレージクラスEFSはEFSと同一なAZに Mount target1つを作成することが可能です。他のAZのNFS Client、例えばAZ 2のEC2の場合、AZ 3のEFSにアクセスするためデータアクセスコストが課金されます。マルチAZの標準ストレージクラスEFSは各AZごとのMount targetがありNFS Clientがアクセスする形になります。

Use case

  • Big data 及び 分析
    • 高い処理量とデータ完全性、低レイテンシなどBig dataアプリケーションに必要な拡張性や性能を提供します。
  • コンテンツ管理及びデプロイ
    • Webサイトやアーカイブのようなアプリケーションのデータを保存・処理に使用できます。
  • ホームディレクトリ
    • 共通のデータセットにアクセスしたりデータの共有が必要な場合有用です。

EFSの特徴

EFSは下記のような特徴があります。

  • サーバーレス
  • 容量・性能の自動拡張
  • Full AWS Compute 統合(EC2インスタンス, コンテナー, Serverless)
  • 4個のストレージクラス
  • 高可用性

ではEFSの特徴について確認していきます。

拡張性

EFSの容量とパフォーマンスは自動拡張されます。ファイルの追加・削除によって自動的に増加したり減少したりし、最大Peta Byte規模で拡張できますのでユーザはファイルシステムの容量について気を使わなくても大丈夫です。そしてファイルシステムのサイズ(保存されているデータ量)によってパフォーマンスも変わります。スループットモードのEFSは保存されてるデータ量に基づいてスループットが決定されます。そしてクレジットシステムを利用してスループットを一時的に上昇させることも可能です。詳細のことは下記のパフォーマンス項目で続けて行きます。

パフォーマンス

容量は自動拡張ですが、EFSのパフォーマンスに関しては設定が必要です。ワークフロー次第で選択肢が存在するのはいいところだと思います。

さまざまなワークロードに必要なスループット、IOPS、および低レイテンシーを実現するように設計されています。Amazon EFS では、2 つのパフォーマンスモードおよび 2 つのスループットモードから選択できます。

  • パフォーマンスモード: General Purpose(汎用)、Max I/O (最大 I/O)
  • スループットモード:バーストスループット、プロビジョニングされたスループット

ではパフォーマンスモードから確認していきます。どのようなパフォーマンスモードを選ぶのか選択するためにレイテンシのことを考慮した方がいいです。低レイテンシは汎用、レイテンシが重要ではない場合はMax I/Oです。

レイテンシ 制限 その他
汎用 低レイテンシ 35,000のRead/7000のWrite IOPS制限 Defaultの設定値
Max I/O 汎用より高いレイテンシ IOPSの制限制限なし OneゾーンEFSは使用不可
  • 汎用パフォーマンスモードはEFS作成時Defaultで設定されているモードで、低レイテンシが長所ですがIOPSの制限(35,000のRead/7000のWrite)があります。普段の場合は汎用パフォーマンスモードを使用しても問題ないです。
  • Max I/Oパフォーマンスモードは、汎用パフォーマンスモードに比べて高レイテンシですが、IOPSの制限がないので全体的な処理量・IOPSが重要なワークロードには有用です。OneゾーンのEFSはMax I/Oパフォーマンスモードを使えませんので確認が必要です。

続いてスループットモードのバーストスループット、プロビジョニングされたスループットです。EFSのバーストスループットモードはDefaultで設定されているモードです。バーストスループットモードの処理量は保存されているデータ量の影響を受けますが、「バーストクレジット」を使って短時間だけ高い処理量を「バースト」することが可能です。しかし、一定的な処理量を要求するワークロードがあるかもしれません。その場合、一定的なIOPSが提供されるプロビジョニングされたスループット利用することが可能です。

  • バーストスループットモードは汎用パフォーマンスモードと同じくDefaultで設定されているモードであり、一般的なワークロードで使用します。
  • プロビジョニンドスループットモードは継続して高いスループットが必要・データは少ないが高いIOPSが必要な場合に使用します。しかし、追加料金が発生します。

EFSの作成後、パフォーマンスモードは変更できませんがスループットモードは変更することが可能ですので、作成の前に注意する必要があります。

詳細なことはこちらをご参考ください。

このようなオプション以外にもEFSの性能を向上することが可能です。

  • NFSv4.1を使用
  • Multi-thread環境で データを分散保存して使用
  • データコピーはMulti-thread + large I/O sizeを使用
    • コピーコマンドはrsync < cp < fpsync 順で高性能
  • インスタンスタイプも重要
    • アプリケーションが必要とするリソースのインスタンスを選択

などがあります。

高可用性・耐久性

EFSはAWSリージョンの各AZにデータを冗長化して保存することで高い可用性と耐久性を実現します。EFSを作成する時、マルチAZのRegionalとシングルAZのOne ゾーンのストレージクラスオプションを設定可能することが可能です。

Regionalの標準ストレージクラスはAWSリージョンの全てのAZにデータとメタデータを重複保存して99.99%の可用性と99.999999999(11 9s)の耐久性を提供しています。

One ゾーンのOne ゾーンストレージクラスの場合、単一AZにデータとメタデータを重複保存して99.999999999(11 9s)の耐久性を提供していますが可用性は99.90%で0.09%少ないです。それでEFSが位置するAZに影響与える障害や災害が発生すると保存されているデータの損失が発生する可能性もあります。

可用性・耐久性のためにストレージクラスという言葉が出ましたが、ストレージクラスの詳細なことに関しては下の項目から確認していきます。

ストレージクラス・ライフサイクル

EFSには使用するAZとアクセス頻度を基準として4つのストレージクラスがあります。AZがマルチかシングルかによって標準ストレージクラスとOne ゾーンストレージクラスがあり、さらにアクセス頻度によってIA(Infrequent Access)かそうでないかに別れます。ストレージクラスはEFSを作成する時、可用性・耐久性とライフサイクルオプションで設定することが可能です。

マルチAZ シングルAZ
頻繁なアクセス スタンダード One ゾーン
低頻度アクセス スタンダード-IA One ゾーン -IA

可用性・耐久性オプションは上で説明しましたが、ライフサイクルは何なのか気になると思います。ライフサイクル管理オプションは設定された期間の間、アクセスがないファイルに関して -IAストレージクラスに自動マイグレーションするオプションです。

IAへ移行はファイル移行基準日を設定することで、ファイルの最後のアクセスが設定した日を過ぎたファイルに対してスタンダードはスタンダード-IAへ、One ゾーンはOne ゾーン -IAへ自動移行します。IAから移行はIAクラスのデータをスタンダード(One ゾーン)クラスへ移行することで、最初アクセス時データを移行する「最初アクセス時」とアクセスがあっても移行しない「なし」を設定することが可能です。

– IAストレージクラスを利用することでストレージコストを削減できますが、データの read/wirte のレイテンシは– IAではないクラスより高くなるので低レイテンシを必要とするファイルの場合、ファイルをファイルシステムの別の場所にコピーすることで– IA ストレージクラスから頻繁にアクセスされるストレージクラスにファイルを移動することも可能です。

EFSの作成後、ライフサイクルの設定は変更できますが可用性・耐久性のRegionalとOne ゾーンオプションは変更できませんので、作成の前に注意する必要があります。

セキュリティー

EFSのセキュリティは下の通りです。

  • クライエントのアクセス管理
  • ディレクトリやファイルへアクセス管理
  • APIのアクセス管理
  • データの暗号化

セキュリティグループとNACLでネットワークの管理が可能です。そしてIAMポリシーやIDプロバイダーで暗号化を強制したり、read-onlyアクセスだけ許可したり権限の管理が可能です。そしてアクセスポイントを作成してディレクトリやファイルのアクセス権限も管理できます。

EFSは転送データの暗号化と保存されているデータの暗号化が可能です。

保存されているデータの暗号化は、EFSを作成する時「保管時のデータの暗号化を有効にする」オプションを有効化することで簡単に暗号化ができます。データの暗号化と解読のためにAWS KMSを利用してファイルシステムのメタデータやコンテンツを暗号化します。この暗号化オプションはEFSを作成後には変更できません。暗号化されてないEFSを暗号化したい場合は、暗号化を有効にした新しいEFSを構築してAWS Data Syncでデータを転送したり、AWS Backupでバックアップしたデータを暗号化を有効化した新しいEFSとして復元したりするなどかなりの手間がかかります。そのため、EFSの作成時には注意する必要があります。

転送データの暗号化はTLSを利用する暗号化で、Amazon EFS マウントヘルパーの手助けが必要です。EFSをマウントする時マウントヘルパーのTLSオプションを有効化することで転送中データの暗号化が可能です。

暗号化がEFSの性能に影響を与えますが、多すぎるRead/Wirte作業やデータ処理ではなければ問題はありません。

EFSとEBS

EFS以外にもEBSというストレージサービスがあります。EFSとEBSの違いについては紛らわしいかと思いますので、EFSとEBSの違いについて確認していきます。

  • *: EBSの「io2 Block Express 」タイプで、 R5bインスタンスだけ使用できます。
EFS EBS
ストレージタイプ File Storage Block Storage
可用性 マルチAZ, 単一AZ選択可能 単一AZ
アクセス AWSサービス・オンプレミスに最大数千の同時アクセス 単一AZの最大16のインスタンス
ボリューム量 最大Petabyteまで自動拡張 最大64TiB手動拡張
処理量 1秒あたり10GB以上 1秒あたり最大4GB*
IOPS 500,000 IOPS以上 最大 256,000*
レイテンシ 低, 一定 最低(ミリ秒未満*), 一定

基本的にEFSとEBSはFile StorageとBlock Storageという違いがあります。可用性はEFSがマルチAZで高可用性のストレージで、EFSはAWSサービスだけではなくオンプレミスサーバーもアクセスできるという特徴もあります(オンプレミスの場合、DXやAWS VPNとの連携が必要)。そしてEFSはペタバイトまで自動で拡張できるのでEBSより拡張性がいいサービスだと言えます。

処理量とIOPSの場合、EFSは分散設計でEBSより性能が高いですが両方ワークロードによったボリュームタイプを選択することが可能です。レイテンシの場合、EBSは最大ミリ秒未満の低レイテンシを提供しています。大規模の並列アクセスが必要な場合はEFSが、Bootボリュームやトランザクション処理が必要な場合はEBSが良いだと思います。

特にEFSの場合、DockerからAmazon ECSとEFSの使用を推奨されるほどサーバーレス環境でアプリケーションの状態を保存できるストレージとして重要な役割を担当します。(関連記事はこちら)

その他の機能

バックアップ

AWS Backupサービスを使用してEFSのバックアップが簡単にできます。コンソル画面でEFSを作成する時、自動バックアップオプションを有効化することでEFSのバックアップ設定は終わります。詳細なことは下記の記事を参考してください。

データ転送

EFSのデータ転送のためにはAWS DataSyncとの連携が必要になります。AWS DataSyncはただのデータ転送だけではなくEFSのバックアップのためにも使用しました。過去、AWS Backupがなかった時期にはAWS DataSyncを使用してEFS-to-EFSバックアップをしたこともありました。AWS DataSyncを使用したEFSのデータ転送は下記の記事を参考してください。

EFSレプリケーション

最新のEFSレプリケーション機能が追加されました。過去、EFSのレプリケーションを作成するためには新しいEFSを作成してAWS DataSyncでEFS間データを転送する、かなりの工数がかかりました。しかしEFSレプリケーション機能が追加され、簡単にレプリケーションを作成することが可能でなりました。過去のEFSは「面倒」だと思われるかもしれない作業が多かったと思いますが、新機能続いて追加されることをみて次はどのようなEFSの発展があるのか期待されますね。

最後に

以上、『AWS 再入門ブログリレー 2022』の 7日目のエントリ『Amazon EFS』編でした。

Amazon EFSについて多くの方々に役に立てると幸いです。

明日 (2/10) はますかわさんの「CodeBuild」の予定です。お楽しみに!!