Slide 1

Slide 1 text

Rust で AWS Lambda
 原 旅人(フォルシア株式会社 技術研究所) 
2021.08.31 Shinjuku.rs #17


Slide 2

Slide 2 text

自己紹介 ● 原 旅人 (Tabito Hara) ● ソフトウェアエンジニア@フォルシア株式会社 ○ 研究開発、顧客案件 ● 活動領域 ○ データ分析 ○ コンテナ・Kubernetes(CKA/CKAD取得)・クラウド(AWS認定資格全12種取得) ○ Rust ■ 技術評論社Software Design 2020年6月号「入門! Rust」 ● 現在、Rust 関連書籍を執筆中 ■ 日経コンピュータ「新世代プログラミング言語の使いどころ 」 ● https://xtech.nikkei.com/atcl/nxt/mag/nc/18/042800230/042800001/?P=2 2 前職では、スーパーコンピュータで 天気予報をするプログラムの開発 に14年間従事。 


Slide 3

Slide 3 text

AWS Lambda とは? ● AWS のサーバーレスサービスの要 ○ サーバーレス: プログラムを実行するマシンを自分で用意する必要がない。 ○ コードだけを用意すれば、それを動かすことができる。 ● 実行回数とメモリ量x実行時間による従量課金 ● zip でコードをまとめる or docker image で用意 ○ AWS SAM (Serverless Application Model) で簡単に build, deploy できる ● AWS 公式SDK: python, node.js, Go, Java など ● Rust には rusoto という非公式ではあるが多くのAWSサービスをカバーするSDKがあ る。 ○ AWS から Rust SDK(公式) のα版が発表 ■ https://aws.amazon.com/jp/blogs/news/a-new-aws-sdk-for-rust-alpha-launch/ 3

Slide 4

Slide 4 text

rusoto を使ったRust による Lambda 関数 4

Slide 5

Slide 5 text

なぜ Rust で Lambda ● 実行速度が速い! ● メモリフットプリントが小さい ○ lambda は実行時間xメモリ量で課金されるので、実行時間が 短く、メモリ量が小さいとコストが抑えられる 世の中には既に同様の指摘をされている方がおられます ● 「RustとLambdaの相性が良い7つの理由 〜RustでLambdaをやっていく〜」 https://zenn.dev/hinastory/articles/b603b76bf01ccc 5

Slide 6

Slide 6 text

他の言語のプログラムと比べる実験をしました ● サーバーレスの鉄板の使い方 ○ Lambda で DynamoDB の CRUD をするAPI ● 全く同じ機能のプログラムを4つの言語で実装 ○ Rust, Python, Typescript, Go 言語 ○ ロジック、関数の分け方はすべて同じ。 ● いずれも AWS SAM でコンテナにして deploy ● 同一のJest のテストをそれぞれに実行して実行時間、使用メモリ量を測定 ○ cloudwatch log insight のメトリックスを使用 ○ 330 回のAPIリクエスト (非同期、エラーとなることを確認するリクエストも含む ) 6

Slide 7

Slide 7 text

最大使用メモリを128MBにした場合 7 Rust
 Go
 TS
 Python
 Rust
 Go
 TS
 Python
 実行時間(msec)頻度分布 
 課金時間(msec)頻度分布 
 どの言語でも2つのピーク に分かれているが、Rust はそのピークの乖離が一 番小さく、処理速度のバラ ツキが小さい。
 
 短時間で処理ができるもの は Go の方が Rust よりも 速い。
 
 コンパイラを介する言語 (Rust, Go)とそれ以外 (Python, TS)で実行時間分 布の差が大きい。
 
 Rust が最も省メモリ 
 最大使用メモリ: 42MB(平均)
 最大使用メモリ: 53MB(平均)
 最大使用メモリ: 101MB(平均)
 最大使用メモリ: 75MB (平均)


Slide 8

Slide 8 text

最大使用メモリを1024MBにした場合(=CPU資源を増強) 8 Rust
 Go
 TS
 Python
 Rust
 Go
 TS
 Python
 実行時間(msec)頻度分布 
 課金時間 (msec)頻度分布 
 メモリを増やすと割り当てら れる vCPU も大きくなる。 
 
 Rust と Go は2つのピーク がなくなっているが、TSや Python では残っており、ロ ングテールになっている。 
 
 CPU性能が十分にあれ ば、Go が最も実行時間が 短い。
 (Rust はCPU性能が十分で なくても速い)
 
 
 最大使用メモリ: 42MB(平均)
 最大使用メモリ: 53MB(平均)
 最大使用メモリ: 101MB(平均)
 最大使用メモリ: 75MB (平均)


Slide 9

Slide 9 text

まとめ ● Rust のAWS Lambda における実行時間、メモリ使用量の他の言 語に対する優位性を実験で確認しました。 ○ 少ないCPU資源でも高速な実行が可能。実行時間のバラツキが他の言語 に比べて小さいことが特徴的。 ○ メモリ使用量が他の言語に比べて小さい 9