Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
AWS LambdaでのRust利用
forcia_dev_pr
September 02, 2021
1
280
AWS LambdaでのRust利用
forcia_dev_pr
September 02, 2021
Tweet
Share
More Decks by forcia_dev_pr
See All by forcia_dev_pr
フォルシアのフレームワークとTypeScript
forcia_dev_pr
0
30
TypeScript(WebGL)+React+Viteで、さくっとGeodesic Polyhedronを描画してみた
forcia_dev_pr
0
20
RedCoderがTypeScriptで競技プログラミングに挑戦して挫折した話
forcia_dev_pr
0
25
エンジニア募集 ~技術は「売れて」初めて価値となる~
forcia_dev_pr
0
73
Gitlab CIでMRを自動生成する
forcia_dev_pr
0
290
フォルシアにおけるPostgreSQLの活用
forcia_dev_pr
0
180
PostgreSQL開発とテスト
forcia_dev_pr
0
190
PostgreSQL vs Elasticsearch -ファセットカウント編-
forcia_dev_pr
0
230
そのSQL、もっと速くなりますよ。
forcia_dev_pr
0
220
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
24
4.6k
The Brand Is Dead. Long Live the Brand.
mthomps
48
2.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
63k
Product Roadmaps are Hard
iamctodd
38
7.7k
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
The Invisible Side of Design
smashingmag
292
48k
What's in a price? How to price your products and services
michaelherold
233
9.7k
Designing for humans not robots
tammielis
245
24k
Statistics for Hackers
jakevdp
785
210k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
239
19k
The Language of Interfaces
destraynor
149
21k
Transcript
Rust で AWS Lambda 原 旅人(フォルシア株式会社 技術研究所) 2021.08.31 Shinjuku.rs #17
自己紹介 • 原 旅人 (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年間従事。
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
rusoto を使ったRust による Lambda 関数 4
なぜ Rust で Lambda • 実行速度が速い! • メモリフットプリントが小さい ◦ lambda
は実行時間xメモリ量で課金されるので、実行時間が 短く、メモリ量が小さいとコストが抑えられる 世の中には既に同様の指摘をされている方がおられます • 「RustとLambdaの相性が良い7つの理由 〜RustでLambdaをやっていく〜」 https://zenn.dev/hinastory/articles/b603b76bf01ccc 5
他の言語のプログラムと比べる実験をしました • サーバーレスの鉄板の使い方 ◦ Lambda で DynamoDB の CRUD をするAPI
• 全く同じ機能のプログラムを4つの言語で実装 ◦ Rust, Python, Typescript, Go 言語 ◦ ロジック、関数の分け方はすべて同じ。 • いずれも AWS SAM でコンテナにして deploy • 同一のJest のテストをそれぞれに実行して実行時間、使用メモリ量を測定 ◦ cloudwatch log insight のメトリックスを使用 ◦ 330 回のAPIリクエスト (非同期、エラーとなることを確認するリクエストも含む ) 6
最大使用メモリを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 (平均)
最大使用メモリを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 (平均)
まとめ • Rust のAWS Lambda における実行時間、メモリ使用量の他の言 語に対する優位性を実験で確認しました。 ◦ 少ないCPU資源でも高速な実行が可能。実行時間のバラツキが他の言語 に比べて小さいことが特徴的。
◦ メモリ使用量が他の言語に比べて小さい 9