最近新たに開始したプロジェクトで、開発環境をNode.js v18 + Next.js v13に更新した。検証のためにAWS Amplifyにデプロイしたがエラーが発生。
ちょっと調べるとあるあるらしいので、何番煎じかわからないが対応方法をメモ。
環境
Node.js v18.16.1, Next.js v13.4.19。
問題
AWS Amplifyに前述のバージョンのNext.jsアプリケーションをホストした。ビルドの設定は以下。
- 構築イメージ:
Amazon Linux:2 (デフォルト)
- ライブパッケージの更新
- Next.js version: 13.4.19
- Node.js version: 18.16.1
この状態でデプロイすると、以下のエラーが「構築」>「フロントエンド」で発生し、アプリケーションのビルドに失敗する。
[WARNING]: node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node) node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node) [ERROR]: !!! Build failed
なお、AmplifyはNext.js v13に対応済み。
原因
「node GLIBC not found」で検索すると、同様の事例が出てくる。OSにインストールされているGLIBC(GNU C Library)が古いのが原因らしい。
コンテナイメージとしてはデフォルトのAmazon Linux 2を指定していた。Amazon Linux 2のベースと思われるCentOS7でも同様の問題が発生する模様。
対応
コンテナイメージを変更してやればいい。ECR Public GalleryでNode.jsの公式イメージが使用できる。
今回はv18.16.1を使うので、構築イメージのURLとして public.ecr.aws/docker/library/node:18.16.1
を指定。
これでビルドが通るだろうと思ったが、今度は [ERROR]: !!! Node version not available: 18.16.1
というエラーが発生。
「ライブパッケージの更新」でNode.jsのバージョンを指定しているのが悪いのかと思い、 Node.js version
を削除したところ、エラーが発生しなくなった。
振り返り
今回の問題が起こるまで、Amplifyのアプリケーション実行環境を気にしていなかった。適切なコンテナイメージがあれば、それを指定したほうがいいかもしれない。
Amazon Linux 2、サポート期限が2023年6月末じゃなかったっけと思ったら、2年延長してたのね。正式リリースが2018年6月、それだけ古ければ、そろそろ動かないものが出てくることもあるよなぁ。