CloudFlare+WebAssemblyでサーバーレス: Rustが征く(13)
CloudFlare Workerいいかも
関連記事:
Rustが征くシリーズ過去記事
- WSL2で作るWindows開発環境: Rustが征く(1)
- wasmerでWebAssemblyの門を叩く: Rustが征く(2)
- JavaScriptからWebAssemblyの関数を呼び出す: Rustが征く(3)
- TypeScriptとRollupでWebassemblyを稼働させる: Rustが征く(4)
- SvelteでWebAssemblyでTypeScriptでRollupで: Rustが征く(5)
- WASMのサイズでかすぎね?: Rustが征く(6)
- Webassemblyマルチスレッド用crateを調べる: Rustが征く(7)
- WebAssemblyでSleep: Rustが征く(8)
- Web Workerでマルチスレッド(JSのみ): Rustが征く(9)
- Web Worker+WebAssemblyでマルチスレッド: Rustが征く(10)
- Web Worker+WebAssemblyのパフォーマンス計測: Rustが征く(11)
- Web Worker+WASM+Parcel+TypeScriptでマルチスレッド実行: Rustが征く(12)
- CloudFlare+WebAssemblyでサーバーレス: Rustが征く(13) ← イマココ
サーバーレスってなんやねん
次世代Webの革新技術になるとおもって調査をしたWebAssemblyだが、
今のところ"凄い技術だと思うけど使いどころがわからない"っていう感じだ。
計算量が要求されるAIやブロックチェーン、ゲームなどの用途はもちろんあるが、
Web全体を見ると限定的だと思う。
Web3もまだピンときてない。
(画像サイズ変換も遅かったしなぁ)
調査も大体一段落した折り、こんな記事を見た。
Cloudflare WorkersがNative Rustに対応するとのこと
(゚-゚) Cloudflare Workersってなんぞ?
You write code.
We handle the rest.
Deploy serverless code instantly across the globe to give it exceptional performance, reliability, and scale.
https://workers.cloudflare.com
サーバーサイド実行環境ってことかな。
(クラウド?コンテナ?エッジコンピューティング?言い方がわからない)
(そもそもサーバーレスって言い方がピンとこない。サーバーやんけ。)
AmazonでいうとLambdaみたいなものか。
これがRustネイティブに対応したと。
WebAssemblyにはもっと前に対応してるっぽい。
クラウドネイティブでWebAssemblyなら活路はあるかもなぁ。
用途を考えるのはあとにしてちょっと使ってみよう。
Cloudflare Workersに近いサービスは以下のものだそうな。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
アカウントの作成
当然だがCloudflareのアカウントが必要なので、
予め済ませておく。
プロジェクト作成
Cloudflare Workers用のCliにwranglerというのがあり、
プロジェクト作成からパブリッシュまでこれを使うことになる。
npmでもインストールできるが、
今回はcargoで一緒に入れてしまおう
cargo install wrangler wasm-pack wasm-bindgen-cli
cargo install cargo-generate --version 0.6.1
cargo install cargo-edit --version 0.7.0
wrangler generate --type=rust wasm-cloud
cd wasm-cloud
cargo upgrade
Token認証
Token取得
以下のページに行きTokenを発行する。
\https://dash.cloudflare.com/profile/api-tokens
「Create Token」を押下
"Edit Cloudflare Workers"の「Use Template」を押下
「Account Resources」「Zone Resources」を選択して「Continue Summary」を押下しそのまま進めるとTokenが表示される。
Token設置
ローカルの開発環境にAPITokenを設定する。
wrangler config
Enter API Token:
[発行されたAPI]
💁 Validating credentials...
✨ Successfully configured. You can find your configuration file at: /home/dozo/.wrangler/config/default.toml
パブリッシュ
wrangler build
wrangler publish
❯ wrangler publish
🌀 Running cargo install -q worker-build && worker-build --release
[INFO]: Checking for the Wasm target...
[INFO]: Compiling to Wasm...
Finished release [optimized] target(s) in 0.04s
✨ Build completed successfully!
✨ Successfully published your script to
https://wasm-cloud.~~~~~.dev
実行
最後に表示されたURL(https://wasm-cloud.~~~~~.dev)がAPIのエンドポイントになる
- https://wasm-cloud.~~~~~.dev/
- https://wasm-cloud.~~~~~.dev/form/abc
- https://wasm-cloud.~~~~~.dev/worker-version
------------------- ↓ 後書きはここから ↓-------------------
さて、パブリッシュまでやってみたわけだが、
(・ω・) これはAPIサーバーとちゃうの?
Can I deploy a Worker that uses tokio or async_std runtimes?
Currently no. All crates in your Worker project must compile to wasm32-unknown-unknown target, which is more limited in some ways than targets for x86 and ARM64.
https://github.com/cloudflare/workers-rs#faq
tokioやasync_stdみたいなHTTPリクエストを処理する機構が不要で、
リクエストベースで実装できる・・・ってことかしら。
Rustのランタイムがあるわけではなく、
あくまでWebAssemblyビルドしたものを使っているようだ。
('ω') ネイティブではないな
使える仕組みとしては
- cron
- KV Storage
cronはpush通知やfeedなどに使えそうか、
KVはカンバンボードみたいな小さめのツールを作るのに便利だな。
Discussion