Rustのglibc依存問題

Rustはコンパイルできれば動くと思いきや、そうでもない。 cargo-lambdaを使って、ローカル環境で動作確認したlambda関数をデプロイしたら、動かなかった。

/var/task/bootstrap: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /var/task/bootstrap)`

Amazon Linux2(AL2)とAmazon Linux2023(AL2023)のそれぞれのglibcのバージョンは ツールチェーンの改善: gcc、binutils、 glibc - Amazon Linux 2023 に記載のとおり、2.26, 2.34なので、AL2だとエラーが出たということだった。AL2023でデプロイしなおしたら問題なく動いた。

aws-lambda-rust-runtimeのREADMEを見ると al2023を使うことを勧めている。

この記事もみつけた。 cargo lambda deployした関数が `GLIBC_2.28' not found でうごかない

ビルド時に--target を指定することで解決できるようだ。

cargo lambda build --release --target aarch64-unknown-linux-gnu.2.26

下記の記事ではいろいろな選択肢がリストアップされているが、結局のところどれが良いかはアプリの実装内容や、環境や運用の方法によって異なりそう。

Rust でバイナリを配布する