ハマログ

株式会社イーツー・インフォの社員ブログ

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したかったら特権付与にチェックを入れろ』ということで――


(゜々。)おつかれさまでした。(。々゜)
AWSCodeBuildCodePipeline

  Y.W   2023年1月20日


関連記事

AWSのインスタンスストアボリューム(エフェメラルストレージ)

はじめに AWSでEC2インスタンスを停止する時に表示されるこれ。 いつも雰囲気…

AWSセミナーへ行ってきました!

AWSビジネスセミナーへ行ってきました!! ご無沙汰してます。 おなじみmitc…

Terraformのディレクトリ構成を他記事を参考に考えてみる。

環境ごとにディレクトリを分けて、moduleを参照する メリット 再利用性が高い…


← 前の投稿

次の投稿 →