AWS Lambda本格入門を読んだ

κeenです。講談サイエンティフィック社様から AWS Lambda 本格入門 RustとTerraformでつくるサーバーレスシステムをご恵贈いただいたので読みました。 #PR

本書はタイトルの通りRustをAWS Lambdaで動かし、その諸々をTerraformでIaCする本です。実は私も前職ではほぼ同じことをやっていました。

Idein Ideas — AWSで使うRust

当時は世間にまともな情報がなく、色々手探りで進めていましたので当時、本書があればどれほど救われたかと思いながら読み進めました。

さて、内容の話をしましょう。本書はAWS+Rust+Terraformの3つの技術を扱っていますが、それぞれ基本的な知識はある人向けに書かれています。AWSはCloudWatchやSNSなどが当然のように出てきますし、RustやTerraformの文法の説明もありません。逆にLambdaやTerraformのLambdaの書き方、AWS SDK for Rustの使い方など本書で解説したいことは丁寧に書かれています。普段からAWSをTerraformでIaCしつつ趣味でRustを書いてる人がLamdaを使うのに一歩踏み出すのに向いてますね。

本書で個人的に参考になったと思ったのは4章のユニットテストの箇所と、6章の活用事例です。 4章のテストについて。AWS向けのコードを書いているとどうしても実行をAWSのリソースに依存してしまい、テストがしづらくなってしまいます。モックを使って上手くAWSの環境がなくても動かしたりminiStackを使って手元にAWS環境を再現したりして上手くAWSに直接依存しないテストを用意していました。 6章の活用事例について。Lambdaを使っている方はご存知のとおりLambdaはそれ単体で役に立つということはあまりなく、他のサービスのイベントにトリガするなど色々な方法で動かすことで本領を発揮するサービスです。活用事例ではイベントトリガや定時実行、HTTPリクエストハンドラなど色々な活用方法を示すことで「AWS Lambdaの使い方は分かったけど、どういう場面で使うの?」という疑問に答えてくれます。また、全部Terraformに載ってるのでLambda以外のリソースについても余計な解説を挟まずにコードを動かせばとりあえず準備できるのもいいですね。 本書を読んでLambdaの勘所が分かれば平気で50や100のLambdaをデプロイするようになるでしょう。

私も昔同様のことをやっていたということで、本書にない私の経験を少し書きましょう。

まずパフォーマンスについて、Rustは他の言語に比して明確なメリットがありました。比較対象はnodeで書かれたLambdaで、前職での話なので手元に具体的な数字がある訳ではありませんが、メモリ使用量も実行時間も数分の一になっていました。いちど、NodeのLambdaがやけに遅いので調べたところ、Rust向けのパラメータを流用したのでメモリが全然足りずにGCが頻発していたなんてこともありました。メモリ利用量を4倍くらいに増やしてようやくまともに動きました。書籍の中で具体的な言語と比較するとちょっと角が立つので書きづらいですが、個人ブログならまあいいでしょう。Lambdaはメモリ使用量や実行時間を削ればダイレクトにコスト削減に繋がるので大量に呼ばれるLambdaではRustで書く価値がありますね。

次にパッケージングについて。書籍では無造作にArmにクロスコンパイルしたりcargo-lambdaでパッケージングしていましたが、本来はもうちょっと気を使うものです。ダイナミックリンクライブラリ(DLL)を使ったコードをクロスコンパイルしたりパッケージングするときは適切なDLLを用意してあげる必要があります。これは上の私が以前やったときの記事にも書いてありますし、Cargo Lambdaのクロスコンパイルの章でもKnown cross compilation issuesとして言及があります。

Cross Compiling with Cargo Lambda | Cargo Lambda

当時はこれに大変苦労しました。Rustで使われるTLSライブラリには native-tlsrustlsがあり、 rustls の方はDLLに依存しないのでこちらを使いたいのですが、あるところでは事情により native-tls が必要だったのでフィーチャーで切り替えられるようにしたりなど、パッケージングだけでなくコードの書き方まで気を使う必要があります。また、DLLがちゃんとロードできるか不安なのでDockerにパッケージングしたあとローカル環境で一度起動して動かしてみて、DLLがロードできないことがないかテストしたりしていました。 これについてはそのうちブログに書くぞと思いながら前職を辞めてしまったので各々で苦しみながら乗り越えて下さい。

私も最近はWeb系から離れてしまったので昔を懐しみながら読んでいました。本書が実務で使っている方々の参考になるといいですね。

余談ですが頂いてるので無言で書くとステマになるの…かな…?ということでタグにPRがついてます。まさかこのブログでPRがつく日がくるとは思ってもみませんでした。

Written by κeen