PROD欧州主権の BaaS プラットフォームダッシュボードを開く →

エンジニアリング · 8 分読み取り

Rust/WASM Edge Functions と Cloudflare および Vercel Edge の比較

Affane Daylami · Fondateur · 2026年6月22日

ブログに戻る

Cloudflare Workers と Vercel Edge Functions は、コンテナーや仮想マシンではなく、軽量の JavaScript コンテキストである V8 分離でコードを実行します。 Aurabase は、そのコードで検証された 2 番目のパスを提供します。それは、WebAssembly でコンパイルされた Rust を、Wasmtime ランタイムを介して aura-functionsservice でネイティブに直接実行する wasm モードです。

この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
このページは自動翻訳されました。英語版が正式です。

ただし、 Aurabase の Rust コアに記載されているように、Aurabase のデフォルト モードは Deno のままです (V8 Isolates も)。 「Rust のエッジ機能」では、プラットフォームに応じた 3 つの異なる現実を取り上げています。Cloudflare 側のコミュニティ SDK、Vercel 側の公式ルートなし、Aurabase 側の独自の CLI によるネイティブ実行モードです。この比較では、何が検証され、何がプラットフォームの目標として残されているかを混同することなく、3 つのアーキテクチャを詳しく説明します。

必需品

  • Aurabase は、deno (V8 Isolates、専用サービス、デフォルト モード) と wasm (Rust コンパイル、Wasmtime 経由でネイティブに実行) という 2 つの Edge Functions ランタイムを提供します。
  • Cloudflare Workers は V8 分離で実行され、特に workers-rsコミュニティ SDK を介して、さらに WebAssembly を実行できます。これは、Aurabase の wasm モードのような専用のネイティブ Rust ランタイムではありません。
  • Vercel Edge Functions は、isolates V8 の Node.js API のサブセットである Edge Runtime に依存しています。Rust で関数自体を記述するための公式 SDK や CLI はありません。
  • Aurabase の wasm モードは、Wasmtime 燃料 CPU バジェット、専用メモリ制限、およびエポックごとのタイムアウトを使用して各実行を分離しますが、現時点ではゲスト モジュールへの送信ネットワーク アクセスは公開されていません。
  • 同じ目標を達成するための 3 つの異なるアーキテクチャ: 完全なコンテナーにコストをかけずに、迅速に開始し、各実行を分離します。
#
コンテキスト

V8 の分離と WASM モジュール: 2 つのサンドボックス メカニズム

V8 アイソレートは、同じ V8 エンジン内の軽量の JavaScript 実行コンテキストです。新しいシステム プロセスや新しいカーネルを開始する必要はありません。これは、Cloudflareが最初にWorkers向けに公開したメカニズムであり、VercelがEdge Runtimeに再利用しています。目的はどちらの側でも同じです。つまり、リクエストごとにコンテナまたは VM のコストを回避することです。

A WebAssembly module meets the same need through a different mechanism. The WASM bytecode runs in a bounded linear memory, defined by the specification itself. The guest module cannot address outside this area, regardless of the source language (Rust, C, Go…) that produced the binary. It is this model that Wasmtime applies in the wasm mode of Aurabase, detailed below. For startup measurements between the two mechanics, see our file on WebAssembly cold start benchmarks.

#
WASM ランタイム

本番環境で実行される Aurabase wasm モード

各 Aurabase 関数には、 "wasm" または "deno"に相当する runtime フィールドがあります。呼び出しエンジンはそれに応じて実行パスを選択します。

runtime/dispatch.rsrust
// ランタイムに応じたディスパッチ: WASM (wasmtime) または Deno (エッジランタイム経由の V8 分離)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // aura-edge-runtime へのプロキシ — V8 分離 (supabase/edge-runtime、MIT)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

サンドボックスは、3 つの Wasmtime メカニズムを組み合わせて利用しています。 CPU バジェットは「燃料」としてカウントされます。各 WASM 命令がそれを消費します。エポック増分で適用されるタイムアウト: 専用スレッドは、設定された遅延の後に Wasmtime クロックを増加させ、現在の実行を中断します。 StoreLimitsによって設定されたメモリ制限。 3 つのターミナルは、エンジンがインスタンス化されるときに構成されます。

runtime/wasm.rsrust
let mut cfg = Config::new();
cfg.consume_fuel(true);
cfg.epoch_interruption(true);

// StoreLimits によって制限されたメモリ、初期燃料 = max_fuel、
// timeout = timeout_secs 後のエポック増分 (専用スレッド)

コンパイルされたモジュールは code_hashによってキャッシュされます。デプロイされた同じバイナリは呼び出しごとに再コンパイルされません。ただし、各呼び出しでは、新しい Store とインスタンスがインスタンス化されます。ある呼び出しから次の呼び出しに状態が漏洩することはありません。ゲスト モジュールに公開される表面積は意図的に最小限に抑えられており、合計 5 つのホスト関数: aura.log、 aura.get_input、 aura.set_output、 aura.get_env と、AssemblyScript 互換性のためのスタブ env.abort です。現時点では、発信ネットワーク呼び出しを公開するホスト機能はありません。

検証済みと製品の目的

wasm モードは、検証、データ変換、スコアリング、分析などの純粋な計算に適しています。サードパーティ API (支払い、電子メール、外部サービス) を呼び出す必要がある関数は、引き続き denoモードを経由する必要があります。これは Aurabase のデフォルトモードであり、既存の Deno コードを移行する場合に推奨されるモードです。

デプロイメント側では、CLI は送信前にクレートをローカルでコンパイルします。 aura functions new はクレート cdylibをスキャフォールドし、 aura functions deploy はそれをコンパイルして送信します。

terminalbash
# スキャフォールディング: aurabase/functions/<name>/ を作成します (Cargo.toml crate-type = cdylib)
aura functions new my-fn

# カーゴビルド --target wasm32-unknown-unknown --release、アップロード
# POST /v1/functions/:project_id { ランタイム: "wasm"、コード: <base64 の wasm> }
aura functions deploy my-fn
#
クラウドフレア

Cloudflare Workers: V8 を分離し、WebAssembly を追加します

Cloudflare Workers は、Cloudflare のグローバル ネットワーク全体に分散された V8 分離で JavaScript と TypeScript をネイティブに実行します。 WebAssembly はプラットフォームの初期から第一級市民であり、.wasm モジュールは他のモジュールと同様にワーカーに直接インポートできます。

Rust で完全に Worker を記述する場合、最もよく使用されるルートは、コードを wasm32-unknown-unknown にコンパイルし、Workers ランタイムで実行するコミュニティ SDK workers-rsです。 Aurabase の wasm モードとの違いは、利用可能な表面積です。この SDK を介して Rust で作成されたワーカーは、完全なワーカー環境で実行されるため、fetch または他のプラットフォーム バインディングを呼び出すことができます。 Aurabase の wasm モードは、意図的に縮小されたホスト サーフェスから開始します (前のセクション)。

#
ヴェルセル

Vercel Edge Functions: Node.js サブセット、公式 Rust パスなし

Vercel の Edge ランタイムは、完全な Node.js 環境ではなく、標準 Web API (fetch、 Request/Response、 crypto.subtle…) のサブセットを使用して、V8 分離でコードを実行します。そこには、ネイティブ ノード モジュールや任意のコンパイル ツールチェーンが入る余地はありません。

WebAssembly オブジェクトはこのサブセットの一部です。.wasm バイナリをロードし、JavaScript または TypeScript 関数から手動でインスタンス化することを妨げるものはありません。しかし、私たちの知る限り、Cloudflare 側の workers-rs や Aurabase 側の aura functions deploy とは異なり、Vercel は Rust で Edge 関数を直接記述するための公式 SDK や CLI を公開していません。このパスは引き続き可能ですが、専用ツールを使用せずに完全に手動で行われます。

#
セキュリティ

サンドボックス: WASM リニア メモリと V8 の分離

V8 アイソレートは、同じエンジン プロセス内の専用ヒープと独自のコンテキストによって実行されるコードを分離します。これは、Cloudflare と Vercel で 1 秒あたり数百万リクエストの規模で実績のあるメカニズムですが、単一の JavaScript エンジン内のソフトウェア分離メカニズムのままです。

WASM モデルの分離方法は異なります。各インスタンスは独自のリニア メモリ、つまりバイナリ フォーマット自体の構築により外部にアクセスできない連続バッファを、それを実行するエンジンから独立して取得します。 Aurabase ランタイムでは、ゲストモジュール (aura.log、 aura.get_env…) によって提供されるポインタを操作する各ホスト関数は、メモリアクセスの前に境界を明示的に再検証します。これは、悪意のあるモジュールまたはバグのあるモジュールに対する追加の多層防御です。

#
概要

3 つのアーキテクチャを並べて表示

オーラベース (wasm)Cloudflare ワーカーバーセルエッジ機能
実行モデルネイティブ WASM モジュール、WasmtimeV8 + WASM をオプションのモジュールとして分離V8、Node.js サブセットを分離する
手前の錆びはい、専用モード + CLIコミュニティ SDK 経由 (workers-rs)いいえ、正式なルートはありません
モジュールから出るネットワークアクセスいいえ、コードでチェックインされました (ネットワークホスト機能なし)はい、完全な Workers 環境経由ではい、標準フェッチ API
CPU バジェット燃料の無駄時間、設定可能リクエストあたりの CPU 時間制限 (Cloudflare ドキュメント)召喚ごとの持続時間制限 (doc. Vercel)
専用のRustデプロイメントaura 関数のデプロイ (カーゴはローカルでビルド)ラングラー + ワーカーズ RS同等の公式ツールは存在しない

Aurabase ランタイムの仕様。 Cloudflare および Vercel の列は、各プラットフォームの文書化されたパブリック アーキテクチャから説明されています (V8、WebAssembly をビルド ターゲットとして分離します)。

#
決定

機能に応じてどのランタイムを選択するか

ネットワーク呼び出しを行わない純粋な計算: スキーマ検証、データ変換、スコアリング、軽量イメージ生成。 Aurabase の wasm モードは、厳密なメモリ サンドボックス、明示的な CPU バジェットを備え、外部サービスに依存せずに直接適しています。

サードパーティ API (支払い、電子メール、送信 Webhook) を呼び出す関数。 Aurabase の deno モードは、従来の Cloudflare Worker または Vercel Edge Function がネイティブに fetch に依存しているのと同じように、現在でもデフォルトの選択肢のままです。

チームはすでに Cloudflare エコシステム (KV、Durable Objects、R2) に投資しています。 Workers に留まるのは理にかなっています。 workers-rs を使用すると、プラットフォームを変更せずに Rust を段階的に導入できます。

Need a native Rust runtime managed end-to-end, with a dedicated CLI and the same language as the rest of the backend. This is the angle that documents in our Wasmtime vs Wasmer comparison, on the choice of the WebAssembly engine itself.

#
よくある質問

よくある質問

Aurabase Edge 関数を Rust で作成できますか?+
はい、wasm モード経由です。 CLI には、Rust クレート (クレート タイプ cdylib) を新しく足場にする関数があります。 aura Functionsdeploy コマンドは、cargo build --target wasm32-unknown-unknown --release を使用してローカルでコンパイルし、その後、バイナリを aura-functions サービスに送信し、Wasmtime ランタイムでネイティブに実行します。これはデフォルトのモードではありません。デフォルトでは、Aurabase Edge 関数は JavaScript/TypeScript (Deno ランタイム、V8 Isolates) で実行されます。
Cloudflare Workers を使用すると本当に Rust で関数を作成できるのでしょうか?+
はい、ただし間接的に: Cloudflare Workers は V8 分離で JavaScript/TypeScript をネイティブに実行します。 works-rs コミュニティ SDK を使用すると、Rust のワーカー全体を WebAssembly にコンパイルできますが、これは最も公式に文書化されたルートではありません。 WASM は、JS モデルを完全に置き換えるのではなく、ワーカーを補完します。
Vercel Edge Functions は WebAssembly または Rust をネイティブにサポートしていますか?+
Vercel Edge ランタイムは、WebAssembly オブジェクトを含む標準 Web API を公開するため、JavaScript/TypeScript 関数から .wasm モジュールを手動でロードしてインスタンス化できます。しかし、私たちの知る限り、Vercel は、Cloudflare 側のworkers-rs や Aurabase 側にデプロイされる aura 関数とは異なり、Rust で直接エッジ関数を記述するための公式 SDK や CLI を公開していません。
Aurabase wasm モードはサードパーティ API (支払い、電子メールなど) を呼び出すことができますか?+
現在はそうではありません。ゲスト WASM モジュールに公開されるホスト機能は、ログ、入力要求の読み取りと出力応答の書き込み、および環境変数の読み取りです。外部 API (ネットワークフェッチ) を呼び出す必要がある関数の場合、Deno ランタイム (デフォルト) が推奨されるパスです。

導入の準備はできていますか?

5 分でバックエンドが完成します。

クレジット カードは不要 · 500 MB 無料 · 50,000 MAU