Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Rust on Lambda 大きめCSV生成
Atsushi Yokota
July 19, 2022
Programming
1
390
Rust on Lambda 大きめCSV生成
「Rust、何もわからない... #3」資料
Atsushi Yokota
July 19, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
WindowsコンテナDojo:第6回 Red Hat OpenShift入門
oniak3ibm
PRO
0
170
How GitHub Supports Vim License Detection, The Five Years Journey
othree
1
340
閱讀原始碼 - 再戰十年的 jQuery
eddie
1
290
Cloudflare WorkersでGoのHTTPサーバーを動かすライブラリを作った話
syumai
0
140
このタイミングで知っておきたい 開発生産性の高いエンジニア組織の特徴とは / dev-sumi-20220721-productivity-features
findyinc
7
2.6k
パラメタライズドテスト
ledsun
0
220
Register-based calling convention for Go functions
cjamhe01385
0
390
読みやすいコード クラスメソッド 2022 年度新卒研修
januswel
0
2.9k
これからのスクラムマスターのキャリアプランの話をしよう - スクラムマスターの前に広がる世界
psj59129
0
190
ふんわり理解するcontext
rukiadia
1
180
Google I/O 2022 Android関連概要 / Google I/O 2022 Android summary
phicdy
0
370
実践 SpiceDB - クライドネイティブ時代をサバイブできるパーミッション管理の実装を目指して / Practical SpiceDB
lmt_swallow
0
120
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
239
11k
Scaling GitHub
holman
451
140k
Imperfection Machines: The Place of Print at Facebook
scottboms
253
12k
Embracing the Ebb and Flow
colly
73
3.4k
Designing with Data
zakiwarfel
91
4k
Fireside Chat
paigeccino
13
1.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
VelocityConf: Rendering Performance Case Studies
addyosmani
316
22k
Writing Fast Ruby
sferik
612
57k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.5k
Teambox: Starting and Learning
jrom
123
7.7k
Producing Creativity
orderedlist
PRO
334
37k
Transcript
Rust on Lambda 大きめCSV生成 コケたら立ち上がるまでが技術者 “ “ フルカイテン株式会社 横田
Atsushi Yokota バックエンドエンジニア 2 • 2020年10月 フルカイテン入社 • FULL KAITEN
V3の新規開発に携わり、Rustによる GraphQLサーバーの構築やアーキテクチャーの設計を 行う • 現在は、データ基盤を担当し、ビックデータ処理を PySparkで構築、スクラムマスターも兼任している 自己紹介
3 在庫を利益に 変えるクラウド 今ある在庫で 売上・利益を最大化! データや帳票の 集計は不要! 運用定着まで 徹底サポート! EC・店舗・倉庫、
全ての在庫をAIで予測・分析し、 商品力をワンクリックで見える化。 とは
1. アーキテクチャー概要 2. CSV生成フロー 3. Rust on Lambda 4. CSV生成部分での工夫
Agenda
5 アーキテクチャー概要 Frontend ・Next.js ・React etc データ変換 Athena Aurora PostgreSQL
Redshift Fargate Python Step Functions SQS Lambda ETL 集計処理 データ基盤 Fargate Step Functions S3 Glue GraphQL APIサーバー Rust
actix-web 6 Lambda導入前のCSV生成フロー[Before] • 数十万件の出力をする場合があり、メモリをかなり多めに確保する必要があった • リクエストの集中でサーバー負荷が一気に上がっていた ブラウザ CSV生成 CSVファイル
GraphQL PostgreSQL
Webサーバーの安定化とCSV生成の高速化を実現 actix-web 7 Lambda導入後のCSV生成フロー[After] ブラウザ PostgreSQL 署名付きリンク GraphQL S3 Rust
on Lambda SQS 書き込み CSV生成 アップロード 起動 CSVファイル (ポーリング) メッセージ送信 読み込み
リクエストパラメーターをハッシュ化 8 ジョブ管理機能 データベースに保存 生成済みのCSVを返却 SQSにメッセージを送信 リクエスト重複あり リクエスト重複なし
Rust on Lambda
▪ lambda_runtime ▪ tokio 10 AWS Lambdaのカスタムランタイムで実行 Rustのカスタムランタイム https://github.com/awslabs/aws-lambda-rust-runtime 依存
ライブラリー カスタムランタイムとは Lambdaで標準でサポートされていない言語であっても、 ランタイムのコードと関数をアップロードすることで、Lambdaを使うことができる。 ▪ serde ▪ rusotoやaws sdk
11 実装例 出典: https://github.com/awslabs/aws-lambda-rust-runtime メイン関数からハンドラー関数を実行 ハンドラー内でロジックを記述
12 Lambdaの更新 Rust on Lambda ECR PUSH
13 RustでLambdaを使うメリット Lambdaの標準対応の言語ランタイム (Node.js、Python, Goなど) より起動が早い 出典: AWS Lambda battle
2021: performance comparison for all languages (cold and warm start) メモリフットプリントが少な く、インスタンスサイズが 小さめでも問題がない Lambdaのイメージサ イズが他言語に比べ て小さい 仮想マシンが確保しや すい(はず) 01 02 03
14 RustでLambdaを使うときのデメリット 開発環境では直接アップロード コンパイルに時間がかかる CIを通すと確認まで時間がかかる
15 苦労したこと(現在は解消している) 開発開始時期(2021年4月)が早く、actix-webのtokio 0.2.5だった。 lambda_runtimeのtokioバージョンと不一致のため、サンプル通りにうまく行かなかった。 actix_rtを使用して、実現していた ...
• 100万件のCSVでも処理可能に • 同一リクエストパラメーターなら、一瞬でダウンロード可能 16 CSV生成部分での工夫 メモリ使用量を減らすために、 マルチパートアップロードで S3に分割送信 分割アップロード
Rust on Lambda ECR Lambdaへの移行結果
Rust on Lambdaは 第一線で活躍中 結論
Rustチャレンジしたい人募集中! 一緒に世界の大量廃棄問題を解決しましょう! https://note.com/fullkaiten_re フルカイテン公式note