🐈

CloudFlare+WebAssemblyでサーバーレス: Rustが征く(13)

2022/05/09に公開

CloudFlare Workerいいかも

関連記事:

Rustが征くシリーズ過去記事

サーバーレスってなんやねん


次世代Webの革新技術になるとおもって調査をしたWebAssemblyだが、
今のところ"凄い技術だと思うけど使いどころがわからない"っていう感じだ。
計算量が要求されるAIやブロックチェーン、ゲームなどの用途はもちろんあるが、
Web全体を見ると限定的だと思う。
Web3もまだピンときてない。
(画像サイズ変換も遅かったしなぁ)

調査も大体一段落した折り、こんな記事を見た。
https://blog.cloudflare.com/workers-rust-sdk/

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のアカウントが必要なので、
予め済ませておく。
https://www.cloudflare.com

プロジェクト作成

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のエンドポイントになる

------------------- ↓ 後書きはここから ↓-------------------

さて、パブリッシュまでやってみたわけだが、

(・ω・) これは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