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