タイトルに書いたように、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通りのライブラリパターンが想定されていました。
libdw
libbfd
libdwarf
libexecinfo
そして、4通り全てを試してみたのですが、正常に動作するパターンが1つだけ存在しました。
-
libexecinfo
はAlpine 3.17に存在せず -
libdwarf
はインストールしてもビルドプロセスで存在が認識されず失敗 -
libbfd
(binutils-dev
パッケージにあり)は、aws-lambda-ric添付のaws-lambda-cppが古いバージョンで、libbfd
サイドの変遷についていっていないという不具合が残ったままで失敗 -
libdw
(elfutils-dev
パッケージにあり)…成功
ということで、ビルド環境にelfutils-dev
、実行環境にelfutils
を入れておけば無事に解決しました。