【AWSサービス 基礎編】Amazon EFS で共有ファイルシステムを作成しインスタンスからマウントする

目次

概要

Amazon EFS(Elastic File System)は、AWS が提供するフルマネージドの共有ファイルシステムサービスです。複数の EC2 インスタンスから同時にアクセスでき、ファイルの追加・削除に応じて自動的に容量が拡張・縮小されます。

アプリケーションの運用では、複数のサーバーから同じファイルにアクセスしたいケースが頻繁に発生します。例えば、Web サーバーのコンテンツ共有、ログの集約、機械学習の学習データの共有などです。EFS はこうしたユースケースに対応する NFS(Network File System)互換のファイルシステムを提供します。この記事では、EFS ファイルシステムの作成から EC2 インスタンスへのマウント、ファイルの共有確認までの基本操作を体験します。

Amazon EFS ファイルシステムに複数の EC2 インスタンスからマウントしてファイルを共有する構成の図解
Amazon EFS ファイルシステムに複数の EC2 インスタンスからマウントしてファイルを共有する構成の図解

この記事のメリット

  • Amazon EFS の基本概念(ファイルシステム、マウントターゲット、アクセスポイント)を理解できる
  • EFS ファイルシステムを作成する手順を習得できる
  • EC2 インスタンスから EFS をマウントしてファイルを読み書きする手順を体験できる
  • 複数のインスタンスからの同時アクセスを確認できる
  • パフォーマンスモードとスループットモードの違いを把握できる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

クラウドおさる

とひさん、Amazon EFS とはどんなサービスでござるか?

土肥

Amazon EFS は、NFS v4.1 プロトコルに対応したフルマネージドのファイルストレージサービスだよ。EBS が単一のインスタンスにアタッチされるブロックストレージであるのに対し、EFS は複数のインスタンスから同時にマウントできるネットワークファイルシステムなんだ。容量はペタバイトスケールまで自動的にスケールして、事前のプロビジョニングが不要なんだよ。

クラウドおさる

EBS とはだいぶ違うのでござるな。具体的には、どう違うのでござる?

土肥

いい質問だね。EFS と EBS の主な違いをまとめるとこうなるよ。

特徴Amazon EFSAmazon EBS
アクセス方式NFS(ネットワーク経由)ブロックデバイスとしてアタッチ
同時接続複数のインスタンスから同時アクセス可能通常1つのインスタンスにアタッチ
容量管理自動スケーリング事前にサイズを指定
対応OSLinuxLinux / Windows
可用性複数 AZ にデータを自動複製単一 AZ 内
EFS と EBS のアクセス方式の違いを比較した構成図
EFS と EBS のアクセス方式の違いを比較した構成図
クラウドおさる

複数のインスタンスから同時にアクセスできて、容量も自動で増えるのでござるな! 猿山のみんなで使う共同のバナナ倉庫のようでござる。でも、EC2 インスタンスからはどうやって EFS にアクセスするのでござるか?

土肥

マウントターゲットというものを使うんだ。マウントターゲットは、VPC 内の各アベイラビリティゾーン(AZ)に作成される EFS へのアクセスポイント(ネットワークインターフェース)だよ。EC2 インスタンスは同じ AZ のマウントターゲットを経由して EFS にアクセスするんだ。高可用性を確保するために、使用するすべての AZ にマウントターゲットを作成することが推奨されているよ。

クラウドおさる

AZ ごとに入口を用意するのでござるな。パフォーマンスの設定などもあるのでござるか?

土肥

あるよ。まずパフォーマンスモードから説明するね。

モード特徴ユースケース
汎用(General Purpose)低レイテンシーで幅広い用途に対応。デフォルト設定Web サーバー、コンテンツ管理、開発環境
最大 I/O(Max I/O)高いスループットと IOPS に最適化。レイテンシーは若干高いビッグデータ分析、メディア処理
クラウドおさる

用途に応じて選べるのでござるな。スループットの設定もあるのでござる?

土肥

うん、スループットモードも3種類あるよ。

モード特徴
エラスティックワークロードに合わせて自動的にスループットをスケーリングする。新規作成時のデフォルトで、AWS の推奨
プロビジョンドストレージ量に関係なく、指定したスループットを確保する
バーストファイルシステムのサイズに比例したベーススループットを提供し、一時的なバーストが可能
クラウドおさる

いろいろあって迷いそうでござる……。ストレージクラスにも種類があるのでござるか?

土肥

そうだね、ストレージクラスは「どこに置くか(リージョナル / One Zone)」と「アクセス頻度」の組み合わせで選ぶよ。

ストレージクラス説明
EFS Standard(リージョナル)頻繁にアクセスするデータ向け。複数 AZ に保存
EFS 低頻度アクセス(IA)月に数回程度しかアクセスしないデータ向け。保存コストが低い
EFS アーカイブ年に数回程度しかアクセスしないデータ向け。最も保存コストが低い
One Zone(Standard / IA / アーカイブ)単一 AZ にデータを保存する版。複数 AZ 複製が不要ならさらに安い
土肥

IA やアーカイブへの移行は、ライフサイクル管理で「最後のアクセスから何日」という条件を設定すると自動で行われるよ。

クラウドおさる

アクセス頻度や可用性の要件に応じて、コストを最適化できるのでござるな! 全体像がつかめたでござる!

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

ここでは、EFS ファイルシステムを作成し、2台の EC2 インスタンスからマウントしてファイルの共有を確認します。

前提条件

  • リージョン: ap-northeast-1(東京)
  • AWS マネジメントコンソールにログイン済み
  • 同一 VPC 内に2台の EC2 インスタンスが起動済みであること(異なる AZ に配置されていることが望ましい)
  • EC2 インスタンスに SSH 接続できること
  • EC2 インスタンスにセキュリティグループが設定されていること(このセキュリティグループを EFS 側の許可元として指定します)
  • VPC の「DNS 解決」と「DNS ホスト名」が有効であること(mount -t efs が使う <ファイルシステムID>.efs.<リージョン>.amazonaws.com の名前解決に必要です)
リソース種別リソース名用途
EFS ファイルシステムmy-shared-efs共有ファイルシステム
セキュリティグループefs-sgEFS マウントターゲット用

EFS 用セキュリティグループを作成する

  • 上部の検索バーに EC2 と入力し、表示された「EC2」を選択します
  • 左側ナビゲーションの「ネットワーク&セキュリティ」→「セキュリティグループ」を選択します
  • 「セキュリティグループを作成」をクリックします
  • 「基本的な詳細」で以下を設定します
  • セキュリティグループ名: efs-sg
  • 説明: Security group for EFS mount targets
  • VPC: EC2 インスタンスと同じ VPC を選択(ドロップダウンに VPC ID を入力すると絞り込めます)
  • 「インバウンドルール」セクションで「ルールを追加」をクリックし、以下を入力します
  • タイプ: NFS(プロトコル TCP、ポート範囲 2049 が自動で入ります)
  • ソース: カスタム のまま、右の検索ボックスに EC2 インスタンスのセキュリティグループ ID(sg- で始まる)を入力して候補から選択
  • 「アウトバウンドルール」はデフォルト(すべてのトラフィックを許可)のままにします
  • 「セキュリティグループを作成」をクリックします
EFS 用セキュリティグループの作成画面(NFS インバウンドルールの設定)
EFS 用セキュリティグループの作成画面(NFS インバウンドルールの設定)

EFS ファイルシステムを作成する

  • 上部の検索バーに EFS と入力し、表示された「EFS」を選択します
  • 「ファイルシステムの作成」をクリックします
  • 表示されるダイアログで「カスタマイズ」をクリックして、4 ステップの作成ウィザードを開きます
  • 「ステップ 1: ファイルシステムの設定」で以下を設定します
  • 名前: my-shared-efs
  • ファイルシステムのタイプ: リージョン(デフォルト。複数 AZ にデータを保存)
  • 自動バックアップ: 自動バックアップを有効化 にチェックが入ったまま(AWS Backup による日次バックアップ。不要なら外しても構いません)
  • ライフサイクル管理: IA への移行 最後のアクセスから 30 日、アーカイブへの移行 最後のアクセスから 90 日(デフォルト)
  • 暗号化: 保管時のデータの暗号化を有効にする にチェックが入ったまま
  • スループットモード: 拡張 → 伸縮自在 (推奨)(デフォルト)
  • 「追加の設定」を開くと、パフォーマンスモードが 汎用 (推奨) になっていることが確認できます
  • 「次へ」をクリックします
EFS ファイルシステム作成画面(名前、ストレージクラス、パフォーマンスモードの設定)
EFS ファイルシステム作成画面(名前、ストレージクラス、パフォーマンスモードの設定)

マウントターゲットを設定する

「ステップ 2: ネットワークアクセス」で、マウントターゲットの構成を行います。

  • Virtual Private Cloud (VPC): EC2 インスタンスと同じ VPC を選択します
  • VPC を選ぶと、「マウントターゲット」に VPC 内のアベイラビリティーゾーンごとの行が自動で追加されます。各行について以下を確認・設定します
  • サブネット ID: 自動で選ばれたサブネットが EC2 インスタンスの配置先と同じか確認します(違う場合は選び直します)
  • セキュリティグループ: 自動で入っている default の「×」で削除し、「セキュリティグループを選択」から先ほど作成した efs-sg を選択します
  • 「次へ」をクリックします
マウントターゲットのネットワーク設定画面(AZ ごとのサブネットとセキュリティグループの選択)
マウントターゲットのネットワーク設定画面(AZ ごとのサブネットとセキュリティグループの選択)
  • 「ステップ 3: ファイルシステムポリシー」はデフォルト(ポリシーなし)のまま「次へ」をクリックします
  • 「ステップ 4: 確認して作成する」で設定内容を確認し、「作成」をクリックします

ファイルシステムが正常に作成されたことを確認します。ステータスが「利用可能」になるまで待ちます。

EFS ファイルシステム一覧画面(作成したファイルシステムのステータスが「利用可能」になった状態)
EFS ファイルシステム一覧画面(作成したファイルシステムのステータスが「利用可能」になった状態)

EC2 インスタンスに EFS をマウントする

1台目の EC2 インスタンスに SSH 接続し、以下のコマンドを実行します。

EFS マウントヘルパーをインストールします(Amazon Linux 2023 の場合)。

sudo yum install -y amazon-efs-utils

マウントポイントを作成します。

sudo mkdir /mnt/efs

EFS ファイルシステムをマウントします。ファイルシステム ID は EFS コンソールで確認した値に置き換えてください。

sudo mount -t efs <ファイルシステムID>:/ /mnt/efs

マウントされたことを確認します。

df -h /mnt/efs

/mnt/efs の行にサイズ 8.0E(エクサバイト)と表示されればマウントは成功です。EFS は容量を事前に確保しないため、事実上無制限の値が表示されます。

mount -t efs はファイルシステムの DNS 名で接続します。VPC の DNS ホスト名が無効で名前解決に失敗する場合は、EFS コンソールの「ネットワーク」タブでマウントターゲットの IP アドレスを確認し、-o mounttargetip=<IPアドレス> オプションを付けてマウントできます。

ファイルの共有を確認する

1台目のインスタンスでファイルを作成します。

sudo sh -c 'echo "Hello from Instance 1" > /mnt/efs/test.txt'

2台目の EC2 インスタンスに SSH 接続し、同様に EFS をマウントします。

sudo yum install -y amazon-efs-utils
sudo mkdir /mnt/efs
sudo mount -t efs <ファイルシステムID>:/ /mnt/efs

1台目で作成したファイルが参照できることを確認します。

cat /mnt/efs/test.txt

Hello from Instance 1 と表示されれば、複数インスタンス間でのファイル共有が正常に動作しています。

2台目のインスタンスからもファイルを追加します。

sudo sh -c 'echo "Hello from Instance 2" > /mnt/efs/test2.txt'

1台目のインスタンスに戻り、2台目で作成したファイルが参照できることを確認します。

cat /mnt/efs/test2.txt

Hello from Instance 2 と表示されれば、双方向のファイル共有が確認できます。

まとめ

  • Amazon EFS は NFS 互換のフルマネージドファイルシステムであり、複数の EC2 インスタンスから同時にアクセスできる
  • ファイルの追加・削除に応じて容量が自動的にスケーリングされ、事前のプロビジョニングが不要である
  • マウントターゲットを各 AZ に作成することで高可用性を確保できる
  • パフォーマンスモード(汎用 / 最大 I/O)とスループットモード(バースト / プロビジョンド / エラスティック)でワークロードに合わせた設定が可能である
  • EFS 用のセキュリティグループで NFS 通信(TCP 2049)を許可する必要がある
  • amazon-efs-utils を使用することで簡単にマウントできる

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次