旅とプログラミングを少々

趣味に関する記録などをします。おそらくプログラミング入門に関しての内容を連ねていきます。

最近(2022中期〜)のAWS Lambda + Rust

以前のRust製lambdaがたいへん古いのに、世間にあまりアップデートされた例が見られないためここに記録する。

比較的最近のやりかたの例 github.com

以前の書き方の例 AWS LambdaでRustを使う - 旅とプログラミングを少々

  • lambda向けコード

lambda_runtimeとaws_lambda_eventsが用いられる。Go用SDKからの変換でRustの型を作っているため稀に型がおかしかったが、両方ともに日進月歩で改良されておりおおむね実用可能。 https://github.com/naokiri/clean_house_public/blob/master/apiauth/src/main.rs の例のようにlambda_runtime::runでLambdaEvent<inputの型> -> Result<outputの型> の関数を書くだけでlambdaが起動した時にmainでのセットアップを、そして各コールでrunの内容を走らせてくれる。

  • AWS ライブラリ

rusotoはdeprecatedとなり、awslabsのSDKを用いるようになった。AWS SDK for Rust | aws-sdk-rust 非公式の間牽引してきたrusotoの作者の方々には感謝である。

  • ビルド+パッケージング

以前はまだAmazon公式にはRustをサポートしていなかったためmusl向けにビルドした後、さらにコンテナ化していた。最近は https://docs.aws.amazon.com/sdk-for-rust/ の通り公式に様々なRustライブラリをサポートしはじめており、それらのリポジトリから読む限りcargo-lambdaでビルドすることが一般的のようである。さらにAWSがGravitonコアを推奨しているのでそれに従うと

cargo lambda --arm64 

とコマンドを打つだけでアップロードすべきbootstrapが作成される。muslライブラリやらlibcの互換性やらの問題はもう考えなくとも良い。