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
740
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)開発チーム
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
980
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
4
3k
AIエージェント開発のノウハウと課題
pharma_x_tech
10
7.1k
AIエージェントについてまとめてみた
pharma_x_tech
24
17k
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
1
1.8k
LLMアプリケーションの Fine-tunningと蒸留を活用した改善
pharma_x_tech
7
2.3k
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
5
860
EMとして 自分の弱さと向きあい 人に背中を任せられるようになった話
pharma_x_tech
4
710
LLMアプリケーションの継続的改善のためのFine-tuningの活用
pharma_x_tech
0
110
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
780
It's Worth the Effort
3n
184
28k
How STYLIGHT went responsive
nonsquared
100
5.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.4k
The Cult of Friendly URLs
andyhume
78
6.3k
What's in a price? How to price your products and services
michaelherold
245
12k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
How to train your dragon (web standard)
notwaldorf
91
6k
Bash Introduction
62gerente
612
210k
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 ご清聴ありがとうございました!