LoginSignup
2
1

More than 1 year has passed since last update.

Alpine 3.17のNodeコンテナをLambdaで動かす

Posted at

タイトルに書いたように、Alpine 3.17+NodeのコンテナをLambdaで動かすことに成功しました。

TL; DR

  • Alpine 3.17ではlibexecinfoが消えている
  • 代わりにlibdwelfutils)を使うことができる
  • libbfdlibdwarfではうまくいかない

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はインストールしてもビルドプロセスで存在が認識されず失敗
  • libbfdbinutils-devパッケージにあり)は、aws-lambda-ric添付のaws-lambda-cppが古いバージョンで、libbfdサイドの変遷についていっていないという不具合が残ったままで失敗
  • libdwelfutils-devパッケージにあり)…成功

ということで、ビルド環境にelfutils-dev、実行環境にelfutilsを入れておけば無事に解決しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1