CodeBuildでError: ENOSPC: System limit for number of file watchers reachedにハマった
厳密にはこのエラーを解決するために必要な、fs.inotify.max_user_watchesの変更が通らなくてハマりました。
ここから経過をつらつら書くので、さっさと解決法を知りたい人はEndキーでも叩いてください。
OS:Amazon Linux2
PHP:8.0
Laravel:9.39.0
Apache:最新
Aurora MySQL:8.0.mysql_aurora.3.02.1
以上の環境を構築するに当たって、既存の設定内容を流用してホイホイホイとCodePipelineを作成してGoしたところ、CodeBuildがエラー吐きました。
Error: ENOSPC: System limit for number of file watchers reached(まだ延々続くけど秘匿情報につき略)
なにこれ知らない……(゜々。)
『知らないなら調べよう』が鉄則の職種なのでとりあえずは検索。
そして出てきたのがこちら。
LinuxでSystem limit for number of file watchers reachedが出る場合の原因と対策
掻い摘んで書くと、
「ファイル監視APIが走っててその監視上限を超えたら出るエラー」
とのこと。
で、「だったら上限値を書き換えてやればよいのじゃよ」と。
sudo sysctl fs.inotify.max_user_watches=524288
こんなんで。
ふむふむなるほど、とCodeBuildで使うbuilspec.ymlにコマンドを追加して実行。
[Container] 2023/01/18 12:25:43 Running command sudo sysctl fs.inotify.max_user_watches=524288 sysctl: setting key "fs.inotify.max_user_watches": Read-only file system [Container] 2023/01/18 12:25:44 Command did not exit successfully sudo sysctl fs.inotify.max_user_watches=524288 exit status 255 [Container] 2023/01/18 12:25:44 Phase complete: INSTALL State: FAILED [Container] 2023/01/18 12:25:44 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: sudo sysctl fs.inotify.max_user_watches=524288. Reason: exit status 255
(゜々。)WTF?
「sysctl: setting key “fs.inotify.max_user_watches”: Read-only file system。つまり読み込み専用のファイルってことだぁよ」
フジャッケンナどないなっとんねんと、CodeBuildでこの問題にぶつかった先人を検索で探してみるも、
見つかるのは片手の指で、なおかつ同じ上限変更コマンドで解決しているという……。
上等じゃねえかよう。やってやんよぉ……(゜々。)
と、なんかキマった定時過ぎのテンションで、
『コマンド実行箇所を変えてみる』『通らねえからsudoつけてみる』
『環境変数で組み込んで実行時点で上限値を変えてみる』
7パターンほどやってみるも……全滅。
※CodePipelineで実行する関係でymlを直しては作業ブランチをコミットしてリモートにプッシュしてデプロイブランチにプルリクしてマージの作業も付録しています。
(゜々。)モウダメダー… シヌンダー…
白旗挙げてAWSサポートに相談。
「CodeBuildで監視上限エラーが出てビルドが通らないんです。上限値変更も通らないんです。助けてください」
《結論から申し上げますと、ビルド環境に特権が付与されていないため、 sysctl コマンドがエラーとなっている状況と判断しております》
《環境の設定より特権付与を有効にしていただければ、 sysctl コマンドのエラーは回避していただける想定です》
(੭ ᐕ)つまりこう。
(੭ ᐕ)੭もうちっとわかりやすいところだと、ここが、こう。
というわけで、
『CodeBuildでsudoしたかったら特権付与にチェックを入れろ』ということで――
(゜々。)おつかれさまでした。(。々゜)