タイトルに書いたように、Alpine 3.17+NodeのコンテナをLambdaで動かすことに成功しました。
TL; DR
- Alpine 3.17では
libexecinfoが消えている - 代わりに
libdw(elfutils)を使うことができる -
libbfd、libdwarfではうまくいかない
Nodeコンテナの意味
Lambdaで、Node.jsにはデフォルトのサポートがあるので、別にコンテナを立てずともコードを書いて動かすことが可能です。
ただ、ネイティブの実行ファイルと絡めて動作させたいような場合など、コンテナ内でNode.jsを動かすという構成も意味のあるものとなりえます。
Lambda用ライブラリと問題
Node用のLambdaランタイムはaws-lambda-ricとして公開されていますが、これはネイティブコードのコンパイルを伴います。
Alpine 3.16であれば、libexecinfo-devというライブラリを追加すればビルド処理が可能です。ところが、Alpine 3.17では標準のリポジトリからlibexecinfo-devがなくなっていて、そのままビルドすることができない状況です。
さらに調べて他の選択肢へ
さらに調べると、aws-lambda-ricのネイティブコードは、aws-lambda-cppにパッチを当てたものだということが判明しました。そしてソースコードを見てみると、libexecinfoだけでなく、4通りのライブラリパターンが想定されていました。
libdwlibbfdlibdwarflibexecinfo
そして、4通り全てを試してみたのですが、正常に動作するパターンが1つだけ存在しました。
-
libexecinfoはAlpine 3.17に存在せず -
libdwarfはインストールしてもビルドプロセスで存在が認識されず失敗 -
libbfd(binutils-devパッケージにあり)は、aws-lambda-ric添付のaws-lambda-cppが古いバージョンで、libbfdサイドの変遷についていっていないという不具合が残ったままで失敗 -
libdw(elfutils-devパッケージにあり)…成功
ということで、ビルド環境にelfutils-dev、実行環境にelfutilsを入れておけば無事に解決しました。