Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS LambdaでのRust利用

forcia_dev_pr
September 02, 2021
280

AWS LambdaでのRust利用

forcia_dev_pr

September 02, 2021
Tweet

More Decks by forcia_dev_pr

Transcript

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


  2. 自己紹介 • 原 旅人 (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年間従事。 

  3. 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
  4. rusoto を使ったRust による Lambda 関数 4

  5. なぜ Rust で Lambda • 実行速度が速い! • メモリフットプリントが小さい ◦ lambda

    は実行時間xメモリ量で課金されるので、実行時間が 短く、メモリ量が小さいとコストが抑えられる 世の中には既に同様の指摘をされている方がおられます • 「RustとLambdaの相性が良い7つの理由 〜RustでLambdaをやっていく〜」 https://zenn.dev/hinastory/articles/b603b76bf01ccc 5
  6. 他の言語のプログラムと比べる実験をしました • サーバーレスの鉄板の使い方 ◦ Lambda で DynamoDB の CRUD をするAPI

    • 全く同じ機能のプログラムを4つの言語で実装 ◦ Rust, Python, Typescript, Go 言語 ◦ ロジック、関数の分け方はすべて同じ。 • いずれも AWS SAM でコンテナにして deploy • 同一のJest のテストをそれぞれに実行して実行時間、使用メモリ量を測定 ◦ cloudwatch log insight のメトリックスを使用 ◦ 330 回のAPIリクエスト (非同期、エラーとなることを確認するリクエストも含む ) 6
  7. 最大使用メモリを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 (平均)

  8. 最大使用メモリを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 (平均)

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

    ◦ メモリ使用量が他の言語に比べて小さい 9