Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Axum+RustをWebAssemblyを使ってCloudflare Workersで動かしてみた
Search
PharmaX(旧YOJO Technologies)開発チーム
October 16, 2023
0
680
Axum+RustをWebAssemblyを使ってCloudflare Workersで動かしてみた
axumで開発中のSlackbotをCloudflare Workersで動かす際に得た知見をシェアします。
PharmaX(旧YOJO Technologies)開発チーム
October 16, 2023
Tweet
Share
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
AIエージェントについてまとめてみた
pharma_x_tech
20
14k
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
1
1.1k
LLMアプリケーションの Fine-tunningと蒸留を活用した改善
pharma_x_tech
7
2k
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
5
750
EMとして 自分の弱さと向きあい 人に背中を任せられるようになった話
pharma_x_tech
4
660
LLMアプリケーションの継続的改善のためのFine-tuningの活用
pharma_x_tech
0
75
LLMアプリケーションの評価と継続的改善
pharma_x_tech
3
450
開発チームから始める 「学習する組織」に 成長するための取り組み
pharma_x_tech
3
830
LLMマルチエージェントの アプリケーション設計のコツと未来
pharma_x_tech
1
650
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
244
12k
Adopting Sorbet at Scale
ufuk
74
9.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
Git: the NoSQL Database
bkeepers
PRO
427
64k
A designer walks into a library…
pauljervisheath
205
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Transcript
Axum+Rustを WebAssemblyを使って Cloudflare Workersで 動かしてみた 2023/10/18 古家 大
(C)PharmaX Inc. 2023 All Rights Reserve 2 自己紹介 • YOJO事業部
エンジニアリーダー • 開発生産性集計SlackBotをRustで 開発中です • 息子の運動会のためにリングフィッ ト再開しました 古家 大 X(旧Twitter)
(C)PharmaX Inc. 2023 All Rights Reserve 3 今回やりたいこと Axum+Rustで開発中のSlackbotをCloudflare Workersで動かす
(C)PharmaX Inc. 2023 All Rights Reserve 4 rustupでRust環境をインストール Rust開発環境の準備
(C)PharmaX Inc. 2023 All Rights Reserve 5 rust-analyzerの導入 Rust開発環境の準備
(C)PharmaX Inc. 2023 All Rights Reserve 6 型推論による返り値の型の表示 rust-analyzerの機能例
(C)PharmaX Inc. 2023 All Rights Reserve 7 メソッド呼び出し時の引数情報の表示 rust-analyzerの機能例
(C)PharmaX Inc. 2023 All Rights Reserve 8 定義へのジャンプ機能 rust-analyzerの機能例
(C)PharmaX Inc. 2023 All Rights Reserve 9 Rust開発環境の準備 Even Better
TOMLを導入 (.tomlのシンタックスハイライト用)
(C)PharmaX Inc. 2023 All Rights Reserve 10 WranglerでCloudflare Workersのワーカーの雛形作成 npx
wrangler generate [プロジェクト名] https://github.com/cloudflare/workers-sdk/templates/experimental/worker-rust
(C)PharmaX Inc. 2023 All Rights Reserve 11 Cloudflare Workersについて •
Cloudflare社のCDNのエッジでJavaScriptを動かせる • 他にもVercel Edge Functions・Deno Deployとか色々ある • コンテナを使用しないサーバーレス環境
(C)PharmaX Inc. 2023 All Rights Reserve 12 Cloudflare Workersの対応言語 •
JavaScript / TypeScriptが基本 • JavaScriptにコンパイルできる他言語もサポート (Kotlin / Dart / Python / Scala / Perl / PHP / OCaml / F#) • WebAssembly(Wasm)に対応しているので、Rust・C・C++等でコンパ イルしたバイナリを使ってネイティブに近い速度で実行可 → Rustで書いたコードを動かすにはWasmコンパイルが必要
(C)PharmaX Inc. 2023 All Rights Reserve 13 WebAssemblyについて • 元々Webブラウザ上でJavaScriptでは荷が重い処理(グラフィック処理な
ど)を高速に実行できるバイナリーフォーマットとして開発 • 2017年に主要なブラウザはすべてサポートを開始 • 今ではWebブラウザ以外でもエッジコンピューティングなど 高速動作が求められる環境で活用が広まっている
(C)PharmaX Inc. 2023 All Rights Reserve 14 WranglerでCloudflare WorkersにRustアプリをデプロイ •
npx wrangler deployをするだけでWasmコンパイルされ秒速デプロイ • CloudFlareのアカウント登録は事前に必要 • 無料でhttps://プロジェクト名.サブドメイン.workers.dev を発行
(C)PharmaX Inc. 2023 All Rights Reserve 15 axumをCloudflare Workersで動かすには •
そのままだとCloudflare Workersとaxumが競合して動かない • リクエストとレスポンスの型が異なるため変換が必要だったり (Worker::Request ⇔http::Request) • Cloudflare Workersのworker::ENVがAxumルート内で使えなかったり • 上記を行うため axum-cloudflare-adapter というクレートを使う
(C)PharmaX Inc. 2023 All Rights Reserve 16 Cargo.tomlはaxum-cloudflare-adapterに合わせる https://github.com/logankeenan/axum-cloudflare-adapter/blob/main/example/Cargo.toml 依存関係がシビアで
バージョンまで合わせないとな かなか動かない
(C)PharmaX Inc. 2023 All Rights Reserve 17 axumをWasm対応させる • axumのデフォルト機能の一つであるtokioを無効化(wasm未対応のため)
https://docs.rs/tokio/latest/tokio/#wasm-support • 他のデフォルト機能も無効化するため必要なjson機能は明示的に有効化 https://docs.rs/axum/latest/axum/#feature-flags
(C)PharmaX Inc. 2023 All Rights Reserve 18 axum-cloudflare-adapterを使った書き方でmainを更新 • workerとaxumの
request・responseを変 換 • Workerのenvをラッパー 用の構造体に格納して State管理
(C)PharmaX Inc. 2023 All Rights Reserve 19 axumのStateを利用した環境変数の渡し方 • 状態管理のためのStateという概念はaxum
v0.6から導入された • axum+Cloudflare WorkersではWorkerで設定した環境変数をstateで渡す
(C)PharmaX Inc. 2023 All Rights Reserve 20 Cloudflare Workersでの環境変数の設定方法
(C)PharmaX Inc. 2023 All Rights Reserve 21 Cloudflare Workersでの環境変数の設定方法 •
SecretsもGUIから設定可能
(C)PharmaX Inc. 2023 All Rights Reserve 22 Slackbotの認証処理でSecretsを読み取り
(C)PharmaX Inc. 2023 All Rights Reserve 23 Slackbotの認証処理でSecretsを読み取り
(C)PharmaX Inc. 2023 All Rights Reserve 24 axumをCloudflare Workersで使ってみて •
現状、axum-cloudflare-adapterを使うしかなさそう • Cloudflare WorkersやWasm対応のまとまったドキュメントがないので大変 • Cloudflare Workersの爆速デプロイ・レスポンスには感動したので 引き続きSlackbot開発など小さい所から使っていきたい (個人利用なら無料でも十分そう) • axum-cloudflare-adapterのコードリーディングを通して Rustやaxumの仕組みについて理解が深まった
(C)PharmaX Inc. 2023 All Rights Reserve 25 ご清聴ありがとうございました!