EFS のマウントミスでプロジェクトが消えたと勘違いした(模擬案件の失敗談)

記事タイトルとURLをコピーする

この記事は約5分で読めます。

こんにちは!アプリケーションサービス部ディベロップメントサービス 1 課の三宅です!
研修の一環で模擬案件に取り組みました。 その中で多くの学びがあったので、特に印象的だった失敗談とそこから得た知見を共有します。 AWS 環境での EFS のマウントに失敗し、「お客様のプロジェクトが消えた!?」と焦った話を共有します。

テストや手順書を正しく書くことの重要性がよくわかった出来事です!

模擬案件の内容

研修課題は「オンプレミスで運用されているホームページを AWS 環境に移行する」というものでした。 ストレージには EFS を利用し、複数の EC2 インスタンスから同じファイルを参照できる構成になっています。
EFS を /mnt/efs にマウントしました。 Apache で Web サイトを公開するため、Apache の公開ディレクトリ /var/www/html を EFS 上の /mnt/efs へシンボリックリンクとして設定しました。 この設定により、EFS に配置したコンテンツが Web サイトとして公開されるようになります。

作成した構成図は以下になります。

AWS構成図

事件の経緯

今回起きたトラブルは、EFS マウントに失敗した状態でお客様(模擬案件)に AWS 環境をお渡ししてしまったことになります。

検証環境では問題なく成功

検証環境では EFS のマウントに問題なく成功しました。以下が実施したマウント設定になります。
以下を参考に設定しました。
既存の EC2 Linux インスタンスでの自動マウントの有効化

  1. Amazon EFS クライアント(amazon-efs-utils) をインストール
  2. /etc/fstab にマウント設定を記載
  3. 複数のインスタンス間でファイルが共有できることを確認
  4. /mnt/efs と /var/www/html でシンボリックリンクを作成

※EFS クライアントに関しては、後述のEFSに関する豆知識を参照してください。

設定した /etc/fstab

fs-hoge:/ /mnt/efs efs defaults,_netdev  0 0

この時点では、「完璧!」と思っていました。。

本番環境で構築、お客様に引き渡し

検証で成功した通りに本番環境を構築し、 AWS 環境をお客様に引き渡しました。

お客様から「マウントできていない」というご連絡

お客様に AWS 環境を引き渡し、これで OK と思っていたのですが、 お客様から「マウントできていないです。」という連絡がありました。 急いで df コマンドで確認すると、確かにマウントできていなかったです。

30 分後にお客様とのミーティングを実施予定だったため、その MTG でトラブルシューティングを実施することになりました。

トラブルシューティング開始: fstab の修正でマウント成功!

公式ドキュメントを確認しながら /etc/fstab の記述を修正しました。 その結果、 df コマンドでマウントが確認でき、無事解決しました! 以下を参考に設定しました。
NFS を使用した EC2 Linux または Mac インスタンスでの自動マウントの有効化

修正した /etc/fstab です。

fs-hoge.efs.ap-northeast-1.amazonaws.com:/ /mnt/efs nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0

これで解決と思ったのですが、お客様からこのような指摘がありました。 「マウントに成功しましたが、マウントする前に作成していた Web サイトのプロジェクトは見えなくなるのではないか??」

お客様が作成した Web サイトのプロジェクトがあるはずの Apache の公開フォルダ(/var/www/html)に行くと、そこにプロジェクトはありませんでした。 「お客様の作成した Web サイトが消えている!?」と大焦りしました。

原因判明

EFS がマウントされていなかった原因

なぜ、検証で成功していたはずの AWS 環境が、お客様にお渡しした際にマウントされていなかったのでしょうか? 実は、最初に本番環境に AWS 環境を構築した際、Amazon EFS クライアントのインストールを忘れていたため、/etc/fstab に記述していても EFS のマウントが正しく行われていませんでした。
修正前の設定

fs-hoge:/ /mnt/efs efs defaults,_netdev  0 0

この設定では、Amazon EFS クライアントを使用する前提となっていましたが、Amazon EFS クライアント自体がインストールされていなかったため、マウントに失敗していました。 修正後の設定では、Amazon EFS クライアントが不必要で標準でサーバーにインストールされている Linux NFS クライアントを利用してマウントしたため成功しました。
修正後の設定

fs-hoge.efs.ap-northeast-1.amazonaws.com:/ /mnt/efs nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0

EFS を正しくマウントしたことで発生した問題

EFS のマウント設定を修正し、適切な方法でマウントできるようになったものの、お客様のプロジェクトが見えなくなるという新たな問題が発生しました。
トレーナーと再度確認し、以下の事実が判明しました。

  1. お客様が作成した Web サイトのプロジェクトは、ローカルの /var/www/html にある。
  2. しかし、EFS を /mnt/efs にマウントし、/var/www/html にシンボリックリンクを設定していたため、EFS 上のデータが参照されるようになり、ローカルのデータが見えなくなってしまった。

お客様の Web サイトのプロジェクトは、消えたわけではなく、参照先が変わっていただけでした。 そのため、umount /mnt/efs を実施し、アンマウントをすると、/var/www/html にお客様のプロジェクトがありました。

反省点と次回の改善点

テスト不足

複数のインスタンス間で同じファイル( test.html )が存在するかでマウントのテスト確認していました。 test.html を作成した状態で複数のインスタンスを起動させたので、マウントが成功しているかどうかのテストになっていませんでした。

本来なら、以下のテストを実施しないといけないはずです。

  1. df コマンドでマウントが成功しているか確認。
  2. 新しくファイルを作成し、そのファイルが複数のインスタンス間で共有されているか確認。

AWS 構築手順の資料を適当に作った

EFS マウントヘルパーの導入自体は、手順書に書いていたのですが読み飛ばしていました。これは、AWS 構築手順書をメモ書き程度のクオリティで作成したためだと思っています。チェックリストを導入し、確実に手順が実行されたか確認できるような資料を作成するべきでした。またほかのメンバーがレビューできるように見やすいドキュメントを心がけるべきでした。

EFSに関する豆知識

  1. Amazon EFS クライアント(amazon-efs-utils)は、Amazon EFS を簡単にマウント・管理できるようにするツール。このクライアントには EFS マウントヘルパー が含まれており、EFS マウントヘルパーを利用するとマウントを簡単に実行できる。AWS公式ドキュメント - Amazon EFS クライアントの手動インストール
  2. EFS をマウントするには、以下のどちらかのクライアントを利用する。利点は以下の通り。

    • 標準の Linux NFS クライアント:オプションを細かく指定してマウントが可能。AWS公式ドキュメント - NFS クライアントをインストールする
    • Amazon EFS クライアント(AWS推奨):
      • 転送時のデータの暗号化を簡単に設定できる。
      • EFS ファイルシステムのログ記録が組み込まれている。
      • 標準の Linux NFS クライアントとは違い、細かなオプションを指定せずに Amazon EFS 用に最適化された設定が可能。

まとめ

テストと AWS 構築手順書は丁寧に作成し、しっかりレビューしていただく必要があるとわかりました!

三宅陽子(執筆記事の一覧)

アプリケーションサービス部ディベロップメントサービス 1 課

2024年新卒入社です。 アプリケーションサービス部ディベロップメントサービス 1 課に所属しています。