0Pricing
AWS Solutions Architect · レッスン

EFS:Linux向け共有ファイルストレージ

複数のEC2インスタンスとLambda関数からEFSファイルシステムをマウントし、パフォーマンスモードとスループットモードを設定して、セキュリティグループでアクセスを制御します。

「EFS:Linux向け共有ファイルストレージ」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。

Amazon EFS とは

Amazon Elastic File System(EFS)は、完全マネージド型で伸縮自在な共有 POSIX ファイルシステムです。数千台の EC2 インスタンス、Lambda 関数、ECS/EKS コンテナから同時にマウントできます。単一のインスタンスにアタッチする EBS とは異なり、EFS は接続されているすべてのクライアントが同じファイルをリアルタイムで参照できる共有ファイルシステムを提供します。容量は自動的に増減するため、ストレージを事前にプロビジョニングする必要はありません。EFS は、コンテンツ管理、共有コードリポジトリ、ホームディレクトリ、データ分析に適しています。

EFS ストレージクラス

EFS には 2 つのストレージクラスがあります。EFS Standard(マルチ AZ、最高レベルの可用性、サブミリ秒のレイテンシー)と、EFS One Zone(単一 AZ、47% 低いコスト、わずかに低い耐障害性)です。各クラスには、Infrequent Access(IA)バリアントもあり、通常アクセスされないファイルを Standard より 92% 低いコストで保存できます。S3 との違いは、EFS がアプリケーションからマウントできる完全な POSIX ファイルシステムであり、オブジェクトストアではない点です。

# Create an EFS file system in Standard storage class
aws efs create-file-system \
  --performance-mode generalPurpose \
  --throughput-mode elastic \
  --encrypted \
  --tags Key=Name,Value=SharedFileSystem

# One Zone (cheaper, single-AZ):
aws efs create-file-system \
  --performance-mode generalPurpose \
  --throughput-mode elastic \
  --encrypted \
  --availability-zone-name us-east-1a \
  --tags Key=Name,Value=SharedFileSystemOneZone

EFS のパフォーマンスモード

EFS には 2 つのパフォーマンスモードがあります。General Purpose(デフォルト。ほとんどのワークロードに推奨 — レイテンシーが最も低く、Web サービス、コンテンツ管理、ホームディレクトリに最適)と、Max I/O(わずかに高いレイテンシーを許容して、数千の同時接続を伴う大規模な並列ワークロード向け。ビッグデータやメディア処理に最適)です。パフォーマンスモードは作成時に設定し、ファイルシステムの作成後は変更できません。SAA-C03 試験では、数千の並列接続が明確に必要な場合にのみ Max I/O を選択してください。

# Create EFS with Max I/O for highly parallel workloads
aws efs create-file-system \
  --performance-mode maxIO \
  --throughput-mode provisioned \
  --provisioned-throughput-in-mibps 1024 \
  --encrypted

# Note: Max I/O mode is NOT compatible with Elastic throughput mode
# It must use Provisioned or Bursting throughput

EFS のスループットモード

EFS は 3 つのスループットモードをサポートしています。Elastic(ワークロードに応じてスループットを自動的に増減します。ほとんどのユースケースに推奨され、転送データ 1 GB 単位で課金されます)、Bursting(ストレージサイズに応じてスループットが増加し、EC2 T シリーズと同様にバーストクレジットを獲得・消費します。ベースラインは無料です)、Provisioned(ストレージサイズに関係なく固定スループットを指定します。Bursting で得られる以上の一貫したスループットが必要な場合に便利です)です。Elastic モードは現在のデフォルトであり、スループット容量を計画する必要がありません。

# Migrate an existing EFS from Bursting to Elastic throughput
aws efs update-file-system \
  --file-system-id fs-0abc1234def567890 \
  --throughput-mode elastic

# Check current throughput mode and performance mode
aws efs describe-file-systems \
  --file-system-id fs-0abc1234def567890 \
  --query 'FileSystems[].{ThroughputMode:ThroughputMode,PerfMode:PerformanceMode,SizeBytes:SizeInBytes.Value}'

マウントターゲットとセキュリティグループ

EC2 インスタンスから EFS ファイルシステムにアクセスするには、インスタンスが実行される各サブネット(AZ)にマウントターゲットを作成します。EFS Standard では、VPC 内の各 AZ にマウントターゲットを作成してください。EC2 インスタンスは、レイテンシーを最小にするため、自身と同じ AZ のマウントターゲットに接続します。マウントターゲットにはセキュリティグループが設定されており、インスタンスのセキュリティグループからの NFS トラフィック(TCP ポート 2049)を許可する必要があります。このインバウンドルールがないと、マウント操作はタイムアウトします。

# Create a mount target in each AZ
aws efs create-mount-target \
  --file-system-id fs-0abc1234def567890 \
  --subnet-id subnet-aaa111 \
  --security-groups sg-efsnfs

aws efs create-mount-target \
  --file-system-id fs-0abc1234def567890 \
  --subnet-id subnet-bbb222 \
  --security-groups sg-efsnfs

# The EFS security group needs: Inbound TCP 2049 from instance SG

EC2 Linux への EFS のマウント

EC2 に EFS をマウントする推奨方法は、Amazon EFS Mount Helper(amazon-efs-utils パッケージ)を使用することです。これにより、転送中の TLS 暗号化と自動再接続がサポートされます。IP アドレスではなくファイルシステム ID を使ってマウントすることで、DNS が最寄りの AZ のマウントターゲットを自動的に解決します。再起動後も維持される永続的なマウントを設定するには、_netdev オプションを使用してマウントエントリを /etc/fstab に追加し、マウント前にネットワークが利用可能になるようにします。

# Install the EFS mount helper
sudo yum install -y amazon-efs-utils

# Mount with TLS encryption in transit
sudo mkdir /mnt/efs
sudo mount -t efs -o tls fs-0abc1234def567890:/ /mnt/efs

# Persistent mount in /etc/fstab
# fs-0abc1234def567890:/ /mnt/efs efs defaults,_netdev,tls 0 0

# Verify mount
df -h /mnt/efs

EFS アクセスポイント

EFS Access Points は、アクセスポイントを使用するすべての接続に対して、特定の POSIX ユーザー、グループ、ルートディレクトリを強制する、アプリケーション固有の EFS ファイルシステムへのエントリポイントです。これにより、同じファイルシステム上の複数のアプリケーションを互いに分離できます。Application A は Access Point A 経由でマウントし、/data/app-a/ のみを認識します。一方、Access Point B を使用する Application B は /data/app-b/ のみを認識します。Access Points は、Lambda 関数、ECS タスク、EKS Pod に共有 EFS ファイルシステムへの分離されたアクセスを許可する推奨方法です。

# Create an EFS Access Point for an application
aws efs create-access-point \
  --file-system-id fs-0abc1234def567890 \
  --posix-user Uid=1001,Gid=1001 \
  --root-directory Path=/data/app-a,CreationInfo={OwnerUid=1001,OwnerGid=1001,Permissions=755} \
  --tags Key=App,Value=app-a

# Mount using the access point
sudo mount -t efs \
  -o tls,accesspoint=fsap-0abc1234def567890 \
  fs-0abc1234def567890:/ /mnt/app-a

EFS Intelligent-Tiering とライフサイクル

EFS の Intelligent-Tiering は、アクセスパターンに基づいてファイルを Standard と Standard-IA(低頻度アクセス)のストレージクラス間で自動的に移動します。ライフサイクルポリシーを設定して、たとえば 30 日間アクセスされていないファイルを IA に移動できます。IA 内のファイルに再びアクセスすると、自動的に Standard に戻されます。IA からの取り出しには GB 単位の取り出し料金がかかりますが、ストレージ料金は大幅に安くなります。これは S3 Intelligent-Tiering と同様の仕組みで、ファイルの配置を手動で管理する必要がありません。

# Enable lifecycle management (move to IA after 14 days)
aws efs put-lifecycle-configuration \
  --file-system-id fs-0abc1234def567890 \
  --lifecycle-policies '[
    {"TransitionToIA": "AFTER_14_DAYS"},
    {"TransitionToPrimaryStorageClass": "AFTER_1_ACCESS"}
  ]'

# Check current lifecycle configuration
aws efs describe-lifecycle-configuration \
  --file-system-id fs-0abc1234def567890

Lambda およびコンテナでの EFS

Lambda 関数は EFS ファイルシステムをマウントして、大きなモデルファイル、永続データ、設定を呼び出し間で共有できます。これにより、512 MB~10 GB の /tmp の制限を克服できます。ECS および EKS のタスクは、EFS CSI driver を使用し、永続ボリューム要求経由で EFS をマウントします。Lambda 関数またはコンテナは、マウントターゲットを持つ VPC 内に配置する必要があります。また、EFS のセキュリティグループでは、Lambda またはコンテナの VPC セキュリティグループからのインバウンド NFS を許可する必要があります。EFS と Lambda の組み合わせは、学習済み ML モデルを複数の関数インスタンス間で共有する一般的なパターンです。

# Lambda function with EFS mount (CloudFormation excerpt)
# Resources:
#   MyFunction:
#     Type: AWS::Lambda::Function
#     Properties:
#       VpcConfig:
#         SubnetIds: [subnet-aaa]
#         SecurityGroupIds: [sg-lambda]
#       FileSystemConfigs:
#         - Arn: arn:aws:elasticfilesystem:us-east-1:111122223333:access-point/fsap-0abc
#           LocalMountPath: /mnt/models

# In function code:
# import os
# model_path = '/mnt/models/my-model.pkl'
# with open(model_path, 'rb') as f:
#     model = pickle.load(f)

EFS と EBS の違い:試験で重要なポイント

SAA-C03 試験では、EFS と EBS のどちらを選ぶかを問われることがよくあります。EFS:POSIX 共有ファイルシステム、複数の EC2 インスタンスに同時マウント可能、容量が伸縮自在、Linux のみ(NFS)、Lambda とコンテナからアクセス可能、GB 単価は高め。EBS:ブロックデバイス、単一の EC2 インスタンスにアタッチ(io1/io2 Multi-Attach を除く)、プロビジョニングした固定サイズ、Linux と Windows の両方に対応、Lambda からネイティブにはアクセス不可、GB 単価は低めです。シナリオに「複数のインスタンスで同じファイルを共有する必要がある」とある場合、答えは EFS です。

EFS の暗号化

EFS は保管時の暗号化(KMS キーを使用してファイルシステムの作成時に有効化します。作成後は変更できません)と転送中の暗号化(EFS Mount Helper で tls オプションを使用した場合の TLS 暗号化)をサポートしています。AWS は両方を有効にすることを推奨しています。EFS のリソースベースポリシーで、TLS なしのマウントを拒否するようにして、転送中の暗号化を強制できます。その際は elasticfilesystem:ClientRootAccess および elasticfilesystem:ClientWrite の条件を必須にします。

# Create an EFS file system with encryption at rest
aws efs create-file-system \
  --encrypted \
  --kms-key-id arn:aws:kms:us-east-1:111122223333:key/KEY_ID

# Mount with TLS to encrypt in transit
sudo mount -t efs -o tls fs-0abc1234def567890:/ /mnt/efs

# Deny unencrypted mounts via EFS resource policy (condition)
# Condition: elasticfilesystem:AccessedViaMountTarget = true
# and aws:SecureTransport = true

クイックチェック

このレッスンで扱った AWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、EFS は共有 POSIX ファイルシステムであるため、伸縮自在な容量で数千のインスタンスや Lambda 関数に同時にマウントできること、Access Points によって POSIX ユーザーとルートディレクトリを強制したアプリケーション単位の分離を実現できること、そしてIntelligent-Tiering によってアクセス頻度の低いファイルを低コストの IA ストレージクラスへ自動的に移動できることを学びました。次は、FSx for Windows File Server と、特殊なワークロード向けの Lustre について学びます。

よくある質問

「EFS:Linux向け共有ファイルストレージ」レッスンは無料ですか?

はい。「EFS:Linux向け共有ファイルストレージ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。

「EFS:Linux向け共有ファイルストレージ」で何を学びますか?

複数のEC2インスタンスとLambda関数からEFSファイルシステムをマウントし、パフォーマンスモードとスループットモードを設定して、セキュリティグループでアクセスを制御します。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AWS Solutions Architectを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「EFS:Linux向け共有ファイルストレージ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAWS Solutions Architectレッスンでコードを書いて実行できますか?

はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. EBSボリュームタイプ:gp3、io2、st1、sc1
  2. EBSスナップショット、暗号化、RAID
  3. EFS:Linux向け共有ファイルストレージ
  4. FSx:WindowsファイルサーバーとLustre
← AWS Solutions Architectに戻る