Cloudflare Workers(エッジ系FAAS)

FaaS(Function as a Service)

wikiより

クラウドコンピューティングにおけるサービスの種類の一つ。関数や機能といった小さな粒度でサービスを提供すること。サーバーレス・コンピューティング。

  • 例 : AWS Lambda は、大規模なパブリッククラウドベンダーによる最初のFaaS

エッジ系FaaS

最近Lambdaのような1リージョンで動作するFaaSとは異なり。 CDNを提供している会社からCDNエッジで動作するFaaSサービスが増えてきました。

https://yusukebe.com/posts/2021/functions-at-edge/

Lambda@EdgeはLambdaをエッジで動作させるものなので、Lambda@Edgeを除外します。

これ以外のエッジ系FaaS系

上記は基本的にEdge Webサーバー側で動作するサーバーサイドService Workerなのが特徴です。
PWAService Workerはクライアント側で動作するものですが、サーバーサイド版Service Workerというもので、Cloudflare WorkersのWorkersはService Workerから来ています。

上記をEdge系サーバーサイドService Workerとしてこのブログでは扱います。

また、未確定情報ですがVercel Edge FunctionsはCloudflare Workers上で動作してるという指摘もあります。

Edge系サーバーサイドService Worker

特徴

エッジwebサーバー上で動作するService Workerという実装。
後発なのに何故Lmabdaではなく違う実装にするのでしょうか?

Lmabdaには以下の問題があります。

  • コールドスタート : 実行するまでの時間が長い
  • コンピュータ資源が多く必要
    • コストがかかる。
  • エッジに無いので、リージョンから遠い場合ラグが発生する。

結果としてリクエスト毎の実行には使いづらい面があり。
対してEdge系サーバーサイドService Workerはリクエスト毎での実行に向いた実装といった所かと思います。

このため、幾つかLambdaより劣る箇所もあります。

cons

  • Lambdaのような多数の言語には対応していない。(Service Workerとほおぼ同じ制限)
    • 基本的に各ベンダーが用意している環境
    • javascript + web assembly
    • javascriptへのコンバーターを各ベンダーで用意している事もある、ベンダー毎に用意している言語に相違がある可能性がある。
  • 仕様上Lambda等より制限や機能の範囲が限られている。
    • 実行時間
    • 他サービスへのアクセス制限
    • コンピュータ資源(メモリ・実行時間が少ない)
    • ファイルシステム等各種リソースへの制限

pros

  • 省コンピュータ資源リソース
    • 低価格 : Cloudflare Workersに至っては無料枠でも十分な実行時間がある。
  • webサーバーのリクエス毎に実行に耐えうるコールドスタート時間
  • エッジにあるため、どのリージョンでも低レイテンシ
  • エッジにあるため、他エッジサービスとの連携ができる。

ユースケース

  • Basic 認証
  • ヘッダの書き換え
  • Geo IP による処理
  • Cookie のパース
  • A/B テスト
  • IP でのブロック
  • リダイレクト

等もありますが、最近のトレンドとしてjamstackとの相性が良くISR等のEdge系サーバーサイドService Workerならではの便利な実装ができるようになってきています。

また、ベンダー毎に他エッジサービスAPI等、互換性が無いAPIもあるものもあります。

Cloudflare Workers

CloudflareのEdge系サーバーサイドService Worker 仕様詳細

無料・有料Planはworers KVストレージのplanとコミコミ。

Free 有料plan
料金 $0 $5/mo
リクエスト/日 10万件 〜100万件 +リクエスト100万件毎に0.15$/mo加算
リクエストあたりのCPU時間 リクエストあたりのCPU時間:10ミリ秒以内 リクエストあたりの実時間:30秒以内
遅延 最小遅延は最初のリクエスト後 常時最小遅延
worers KV 読み込み操作/日 10万件 1000万件
worers KV 書き込み操作、削除操作、列挙操作/日 1,000件 100万件
  • 無料planのリクエストあたりのCPU時間はCPU実時間で、リソース非同期読み込み等の時間は入らない。
    • worers KVやAPI読み込み待ちの非同期時間は計算の対象外。
  • 有料planは全てコミコミ30秒タイムアウト(2022/3/23現在)
  • エッジサーバー更新によりCPU速度は順次改善

JavaScriptモジュール

Cloudflare WorkersでJavaScriptモジュールのサポートを開始

標準化::Web-interoperable Runtimes Community Group (WinterCG)

workersは標準化を進めており、WinterCGによってベンダーロック箇所が減る模様。

2022/06時点の標準化団体

  • Cloudflare
  • Vercel
  • Shopify
  • Node.js
  • Deno
  • igalia

The next chapter for Cloudflare Workers: open source

Web相互運用性JavaScriptランタイムコミュニティグループ

CloudflareはVercel、Shopify、およびNode.jsとDenoの両方の中心的な個々のコントリビューターと協力して、Webブラウザではない、JavaScriptベース開発環境で標準化Web APIを相互運用できる実装に焦点を当てた、新しいコミュニティグループの設立を発表いたします。

Cloudflare pages functions

Cloudflare pages で直接workersを使う仕組みとしてCloudflare pages functionsが2022/07現在ベータ公開されました。

これでworkers込でpagesをデプロイでるようになり**(faas + jamastack)**、cloudflareのみで動的ページを作成できるようになりました。

ローカル開発環境でもworker込みでpagesをテストできます。

Cloudflare Workers関連サービス

下記サービス上で動作してる

© 2023 Dev Blog