Amplify Gen2でホスティングしていた際に発生したエラーについての備忘録です。
Amplify Gen2でホスティング中に遭遇したエラー
開発中に突然、以下のようなエラーでデプロイに失敗するようになりました。
> build
> remix vite:build
node:internal/errors:496
ErrorCaptureStackTrace(err);
^
Error: ENOSPC: System limit for number of file watchers reached, watch
使用環境
- Amplify Gen2
- Remix:2.15.1 (SPA Mode)
- Node.js: v18
原因
このエラー「ENOSPC: System limit for number of file watchers reached, watch」は、Linuxシステムでinotifyウォッチャーの数が上限に達した場合に発生します。ビルドプロセス中(特にViteを使用したRemixのフロントエンドビルド時)に、システムが監視できるファイル数の上限を超えてしまったことが原因のようです。
解決策
Github記事のように、以下の環境変数を設定することで解決しました。
CHOKIDAR_USEPOLLING=true
Amplifyコンソール上の設定
この環境変数を設定したところ、無事にビルドが通るようになりました!
CHOKIDAR_USEPOLLINGの影響
CHOKIDAR_USEPOLLING
はファイル監視ライブラリである「Chokidar」の動作を制御する環境変数です。
trueに設定すると、ファイルの変更を検出するためにポーリング方式(定期的にファイルの状態をチェックする方式)を使用するようになります。
RemixやViteではホットリロード(コード修正後即座に画面をリロード)をサポートしており、デフォルトではファイルシステムのイベント通知(fs.watch)を使用しています。
ビルドプロセスにおいてポーリングに切り替えても問題はないと思うので、しばらくはこの設定で運用してみようと思いますが、ご自身の環境に合わせて適切に設定を行ってください。
さいごに
今回は、Amplify Gen2ホスティング時に発生したエラー
Error: ENOSPC: System limit for number of file watchers reached, watch
に対する備忘録を書かせていただきました。
どなたかのお役に立てると幸いです。