トラフィックをお好きなように
Cloudflareは、非常に多様なお客様にご利用いただいています。HTTPヘッダーの設定から、URIパスの書き換え、URLリダイレクトの実行まで、シンプルで使いやすい製品を提供しています。時には、単にHTTPヘッダーを追加するだけでなく、高度な計算を行って出力を作成するなど、すぐに使える機能以上のものが必要となることもあります。その場合、お客様は機能のリクエストを作成してリリースされるのを待つか、Cloudflare Workerを書くか、この変更を「オンオリジン」、つまり自らのインフラストラクチャで維持する必要があります。
これを簡単に行うのがCloudflare Snippetsであり、リリースを発表できることをうれしく思います。Snippetsは、ユーザーが当社の製品化されたサービスでは不可能な、あるいはプログラム的に行いたいトラフィック修正を行うための新しい方法です。一番の利点は、大部分のお客様がSnippetsを使用するために_追加料金を支払う必要がない_ということです。
ユーザーが選択できるようになります。ルールでアクションを実行します。より多くの機能が必要な場合は、Snippetを書いてください。待つ必要がなく、追加費用は発生しません(ただし、高い公正利用限度額が適用されます)。Snippetsでは、ユーザーが好きなことを好きなときに、すべてCloudflareで行うことができます。
Snippetsは、JavaScript(モダン)、VCL(レガシー)、Apache .htaccessファイル(レガシー)など、様々な言語で書かれたコードのインポートをサポートします。これにより、お客様はレガシーな運用コードを当社のプラットフォームに移行でき、同時にJavaScriptの運用を統合できます。
Snippetsのテストにご興味のある方は、サインアップフォームから順番待ちリストにご登録ください。2023年初頭には、クローズドベータへのユーザーの受け入れを開始したいと考えています。
Snippetsを構築した理由
Cloudflareは、18か月以上をかけて、変換ルール、キャッシュルール、オリジンルール、コンフィグルール、リダイレクトルールといった多くの新しいルール製品をリリースしました。お客様は、これらの新製品により、グローバルネットワークを通過するトラフィックの処理方法をより細かく制御できます。これまでのところ、これらの製品については圧倒的に多くの肯定的なフィードバックをいただいています。ただし、お客様は、すぐに使用できる機能以上のものを必要とする場合があります。
お客様が必要とする機能を、製品が提供できていないユースケースは常に存在します。例えば、何千ものお客様がHTTPヘッダー修正のユースケースを解決するために変換ルールを使用している一方で、Cookieでの動的な有効期限の設定や、キーでのトークンのハッシュ化など、対応できないユースケースもわずかながら残っているのが現状です。
そこで役立つのがCloudflare Snippetsです。お客様は、これらの比較的単純なユースケースを実装するために、Cloudflare Workersのフルプラットフォームを使用する必要がなくなります。また、要望された機能を当社がリリースするまで待つ必要もありません。その代わりに、JavaScriptのSnippetを実行できるようになります。
レガシーコードのSnippetsへの移行
Varnish Control Language(VCL)は、Varnishのコンテキスト内でのみ使用されています。約16年前にリリースされ、幅広いユースケースに拡張可能であったため、コンテンツ配信ネットワークのトラフィックとルーティングを設定するために使用されてきました。
VCLを使ってルーティングやトラフィックの変更アクションを実行している企業は、かなりの数にのぼります。他のプロバイダーがVCLのサポートを打ち切る中、当社はVCLを使い慣れた人たちにサポートを提供したいと考えています。
Snippetsは純粋なVCLを実行しません。その代わり、VCLをメンテナンスしやすいルールやSnippetに変換します。そのために、アップロードされたVCLコードを解析し、Snippetの候補を自動生成し、一致するものがあれば、変換ルールやキャッシュルールなどの製品のルール候補も生成する、シンプルで使いやすいセルフサービスのVCLコンバータを構築中です。
このトピックは当初、Project Turpentineで取り扱われていました。これは、Cloudflareの従業員がお客様のVCLを解析し、推奨されるJavaScriptの構成を実現するために使用するツール群です。このJavaScriptは、Workerまたは一連のWorkerにロードすることができます。
Snippetsは、Turpentineのアイデアと原理をさらに推し進めたものです。ダッシュボードに直接パーサーを構築することで、ユーザーに選択を委ねることができます。可能な限りすべてをルールに移行し、残りのコードをSnippetsに移行するように指示することもできますし、すべてを個別のSnippetに移行するように指示することもできます。すべてはお客様次第です。
Apache htaccessとNGINXの設定ファイルは同様に扱われます。これは、ユーザーが自分のWebサイトのApacheやNGINXの設定からファイルをアップロードするだけで、Snippetやルールの候補を生成するためです。
運用業務にレガシーコードを使う必要がある時代は終わろうとしています。Snippetsにより、ユーザーはこれらのワークロードをCloudflareに移行し、レガシーシステムの維持ではなく、ビジネス上の大きな問題に集中できるようになります。
SnippetsとWorkersの違い
多くの読者がすでにご存じのことと思いますが、Cloudflare WorkersはCloudflareのグローバルネットワーク上で製品やソリューション全体を実行・構築できる強力な開発者向けプラットフォームです。Snippetsもこのプラットフォーム上に構築されていますが、重要な違いがいくつかあります。
1つ目の大きな違いは、専用の新しいフェーズとしてSnippetがルールセットエンジンの一部として、変換ルールやキャッシュルールと同様に実行されることです。ユーザーは、任意のルールセットエンジンフィルタに基づいてSnippetを選択し、実行できるようになります。これにより、すべてのリクエストに対してSnippetを実行したり、特定のボットスコア、特定の国からのトラフィック、特定のCookieのトラフィックなど、当社が提供するフィールドに基づいて特定のHTTPトラフィックをフィルタリングしたりできます。Snippetは追加式で、HTTPヘッダーを追加するSnippetと、URLを書き換えるSnippetを用意し、両者が一致した場合に実行されるようになります。
もう1つの大きな違いは、Cloudflare Snippetsがすべてのプランレベルで、追加費用なしで利用できることです。99%のユーザーは、このソリューションでお支払いが発生することはありません。これにより、お客様はシンプルなワークロードをVCLなどのレガシーソリューションからCloudflareプラットフォームに移行し、月額費用を積極的に削減できます。
Freeプラン
Free Plans | Pro Plans | Business Plans | Enterprise Plans | |
---|---|---|---|---|
Snippets available | 5 Snippets per zone. | 20 Snippets per zone. | 50 Snippets per zone. | 200 Snippets per zone* (Customers can speak with their Customer Success team to have this increased). |
Proプラン
Cloudflare Snippets | Cloudflare Workers Unbound (For comparison) |
|
---|---|---|
Runtime support | JavaScript | JavaScript and WASM |
Execution location | Global - All Cloudflare locations | Global - All Cloudflare locations |
Triggers supported | Ruleset Engine Filters | HTTP Request HTTP Response Cron Triggers |
Maximum execution time | 5ms | 30 Seconds HTTP 15 Minutes (Cron Trigger) |
Maximum memory | 2MB | 128MB |
Total package size | 32KB | 5MB |
Environment variables | 8/Snippet | 64/Worker |
Environment variable size | 1KB | 5KB |
Subrequests | 1/request | 1000/request |
Terraform Support | ✅ | ✅ |
Wrangler Support | ✅ | |
Cron Triggers | ✅ | |
Key Value Store | ✅ | |
Durable Objects | ✅ | |
R2 Integration | ✅ |
Businessプラン
Enterprise プラン
利用可能なSnippet
1ゾーンあたり5個のSnippet。
…
if (request.cf.botManagement.score < 30) {
const honeypot = "https://example.com/";
return await fetch(honeypot, request);
…
}
1ゾーンあたり20個のSnippet。
1ゾーンあたり50個のSnippet。
…
{
let res = await fetch(request);
res = new Response(res.body, res);
// 24h * 60m * 60s * 1000ms = 86400000ms
const expiry = new Date(Date.now() + 7 * 86400000).toUTCString();
const group = request.headers.get("userGroup") == "premium" ? "A" : "B";
res.headers.append(
"Set-Cookie",
`testGroup=${group}; Expires=${expiry}; path=/`
);
…
1ゾーンあたり200個のSnippet* (お客様は、カスタマーサクセスチームに依頼することでこれを増やすことができます)。
Cloudflare Snippetsは、最大実行時間5ミリ秒、最大メモリ2MB、総パッケージサイズ32KBと、Workersと比較して軽量なのが特徴です。この小規模なフットプリントにより、99%のユーザーに追加費用なしで提供できます。また、HTTPヘッダーの変更、URLの書き換え、トラフィックのルーティングなど、Cloudflare Workersが提供する膨大なリソースを必要としないユースケースにも十分対応しています。
…
if (userAgent.includes("Facebook")) {
const url = new URL(request.url);
const params = new URLSearchParams(url.search);
params.set("utm_campaign", "facebook");
url.search = params.toString();
const transformedRequest = new Request(url, request)
…
}
Cloudflare Snippets
Cloudflare Workers Unbound(比較用)
ランタイムサポート
JavaScript
JavaScriptとWASM
実行場所
グローバル - すべてのCloudflareの拠点
グローバル - すべてのCloudflareの拠点
対応トリガー
ルールセットエンジンフィルター
HTTPリクエストHTTPレスポンスCron Triggers
最大実行時間
5ミリ秒
30秒HTTP15分(Cron Trigger)
最大メモリ
2MB
128MB
パッケージの合計サイズ
32KB
5MB
環境変数
8 / Snippet
64 / Worker
環境変数のサイズ
1KB
5KB
サブリクエスト
1 / リクエスト
1000 / リクエスト
Terraformのサポート
✅
✅
Wranglerのサポート
✅
Cron Triggers
✅
Key Value Store
✅
Durable Objects
✅
R2の統合
✅
Cloudflare Snippetsでお客様は何を構築できるか?
Snippetsにより、お客様は既存のワークロードをCloudflareに移行することができます。また、お客様にとっても、新たなユースケースの可能性が広がります。以下に一般的な3つの例を挙げましたが、他にも多くの例があります。
例1:疑わしいボットをハニーポットに送り込む
Snippetを作成すると、ボットスコアフィールドなど、Workersランタイムで利用可能なCloudflare機能にアクセスできるようになります。これにより、HTTPリクエストをハニーポットに転送したり、RegExp Javascript機能を使用して、トラフィックに特定の閾値(例:29以下)以下のボットスコアが割り当てられたときにエンドユーザーに送り返されるURL構造を変更したりできます。
例2:Cookieの変更
Snippetsが対応すると思われるもう1つの一般的なユースケースは、Cookieの修正です。 getTime
やsetTime
のJavaScript関数を使用して5分後に有効期限を設定したり、A/Bテストの目的でユーザーのリクエスト属性に基づいた動的Cookieを設定したりと、さまざまな使い道があります。
例3:URIクエリーの管理
また、Cloudflare Snippetsを導入することで、URIのクエリ値をスプライシングして、選択的にパラメータを削除したり、追加で挿入したりといった複雑な操作を行うことも可能です。クエリー文字列の操作は通常、変換ルールを使用して行われます。しかし、変換ルールを使用すると、set/
アクションは、実質的にreplace
アクションとなります。このアクションをURIクエリー文字列に適用すると、値があればすべて削除し、ユーザーが指定した値に設定するため、値が上書きされてしまいます。これは、トラフィックをマッチングさせるために、特定のクエリーパラメータを選択的に挿入したいお客様にとっては問題です。たとえば、ユーザーエージェントで一般的なソーシャルメディアプラットフォームが検出された場合に、?utm_campaign=facebook
のような追加のクエリーを設定することが挙げられます。Snippetsでは、このような選択的な削除や挿入を、次のような簡単なJavaScriptを使用して行うことができます。
Cloudflare Snippetsが、お客様のためにどのようなユースケースに道を開くのかがとても楽しみです。
ルールセットへのアクションの追加をやめるのですか?
簡単に言えば答えは「ノー」です。今後も、ルールセットエンジン内のノーコードアクションを充実させ、お客様のニーズを解決するための新製品を開発していきます。
当然のように聞こえるかもしれませんが、機能改善の核となるのは、お客様との対話です。Snippetsのユーザーとの対話により、Snippetsが解決する実際のユースケースを理解し、当社の製品群にある機能のギャップを浮き彫りにすることができるのです。そして、そのユースケースを製品化することに意味があるのか、それともSnippetsに任せることに意味があるのかを検討します。
また、誰もがソフトウェア開発者であるわけではないことも理解しています。そこで、Snippetsにアクセスしやすくするために、お客様がコピーして変更できるテンプレートをライブラリとして作成し、必要最低限のコーディング知識で利用できるようにする方法を検討しています。Snippetsでは、パワフルであることが難しさに直結することはありません。
Cloudflare Snippetsにアクセスする
Snippetsは現在開発中です。順番待ちリストへの登録は、こちらからサインアップしてください。
2023年初頭にはクローズドベータへのユーザーの受け入れを開始し、その後オープンベータの公開を予定しています。