EFS から応答がないときの対処方法

2020.04.22

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

困っていた内容

  • mount コマンドを実施してプロンプトが返ってこない
  • マウントポイントに対して cd コマンドや ls コマンドを実施してプロンプトが返ってこない
  • ELB -> EC2 -> EFS の構成において、ヘルスチェックで返すコンテンツを EFS に置いていたが応答がなく、EC2 が unhealthy となった

どう対応すればいいの?

EFS からの応答が返ってこない原因はさまざまありますが、主に以下の 4 つに大別されるかと思います。

  • セキュリティグループの設定変更ミス
  • 接続クライアントの問題
  • EC2 インスタンスの問題
  • AWS 基盤障害

エラーの切り分けをしていきましょう。

エラーの切り分け

セキュリティグループの設定変更ミスがないか

急に接続できなくなった場合はセキュリティグループの変更有無を確認しましょう。

CloudTrail で誰が変更したかを確認できます。

また、EFS と EC2 両方のセキュリティグループで、互いのインバウンドとアウトバウンドのアクセスが許可されていることを確認します。(セキュリティグループの作成 参照)

ここでは記載を割愛しますが、ネットワーク ACL やルートテーブルの変更を行った場合なども同様に接続性に影響しますので、心当たりがあれば確認しましょう。

接続クライアントの問題がないか

EFS の接続には、Amazon EFS マウントヘルパー (amazon-efs-utils) を使う方法と、使わない方法 (nfs-utils を使う方法) の二種類あります。

接続元 EC2 の OS がサポートされているかそれぞれ確認しましょう。

また、マウントオプションの不備はないか確認しましょう。

EC2 インスタンスの問題がないか

EC2 にアタッチされているボリュームの種類によっては、ボリュームのクレジット枯渇が影響する場合があります。(Amazon EBS ボリュームの種類 参照)

CloudWatch でメトリクス BurstBalance が枯渇してないか確認しましょう。該当する場合は、クレジットが回復すれば EFS への接続も回復する可能性があります。

[EBS] gp2のBurstBalanceが確認可能となったのでボリュームサイズ別に検証してみた

ここまででエラーの特定ができていない場合は、以下の確認を実施しましょう。

  • /var/log/messages 等に不審なエラーが出ていないか
  • OS 内でファイアウォールが動作していないか、動作している場合は EFS に対する 2049 ポートがブロックされていないか
  • EFS の DNS 名を引いて名前解決できるか(dig コマンド、nslookup コマンド等)
  • EFS の DNS 名ではなく IP アドレスを指定して接続できるか
  • 他の EC2 からはマウントできるか
  • ドキュメントに該当する事象がないか(Amazon EFS のトラブルシューティング 参照)

原因究明より復旧を優先する場合は、インスタンスの再起動を試してください。これにより問題解消する可能性があります。

いよいよ調査に行き詰まったら

サポートプランをご契約であればサポートに問い合わせてみてください。

以下の情報を添えるとサポート側での調査がスムーズになるかと思います。

  • 問題発生日時 (JST)
  • 事象
  • 該当リソースの情報(AWS アカウント ID、リージョン、ファイルシステムID、インスタンスID など)
  • OS、カーネルバージョン
  • 接続クライアントのバージョン (amazon-efs-utils, nfs-utils)
  • マウントオプション
  • EFS の用途
  • その他
    • (疑わしいエラーメッセージがあれば)/var/log/messages など
    • (正常に動作していた実績があれば)その日時、問題発生前の環境変更の有無など
    • (他のインスタンスから正常に接続できていれば)その日時、インスタンスIDなど
    • ps aux コマンド結果
    • mount コマンド実施時の tcpdump コマンド結果

サポートプランをご契約でない場合はフォーラムで質問する手もあります。

参考情報