Subscribe to receive notifications of new posts:

Cloudflare Snippetsで最もプログラム可能なSupercloudを実現

11/17/2022

6 min read
The most programmable Supercloud with Cloudflare Snippets

トラフィックをお好きなように

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プラン Proプラン Businessプラン Enterprise プラン
利用可能なSnippet 1ゾーンあたり5個のSnippet。 1ゾーンあたり20個のSnippet。 1ゾーンあたり50個のSnippet。 1ゾーンあたり200個のSnippet* (お客様は、カスタマーサクセスチームに依頼することでこれを増やすことができます)。

Cloudflare Snippetsは、最大実行時間5ミリ秒、最大メモリ2MB、総パッケージサイズ32KBと、Workersと比較して軽量なのが特徴です。この小規模なフットプリントにより、99%のユーザーに追加費用なしで提供できます。また、HTTPヘッダーの変更、URLの書き換え、トラフィックのルーティングなど、Cloudflare Workersが提供する膨大なリソースを必要としないユースケースにも十分対応しています。

Cloudflare Snippets Cloudflare Workers Unbound
(比較用)
ランタイムサポート JavaScript JavaScriptとWASM
実行場所 グローバル - すべてのCloudflareの拠点 グローバル - すべてのCloudflareの拠点
対応トリガー ルールセットエンジンフィルター HTTPリクエスト
HTTPレスポンス
Cron Triggers
最大実行時間 5ミリ秒 30秒HTTP
15分(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構造を変更したりできます。

…
if (request.cf.botManagement.score < 30) {
const honeypot = "https://example.com/";
return await fetch(honeypot, request);
…
}

Snippetsが対応すると思われるもう1つの一般的なユースケースは、Cookieの修正です。 getTimesetTimeのJavaScript関数を使用して5分後に有効期限を設定したり、A/Bテストの目的でユーザーのリクエスト属性に基づいた動的Cookieを設定したりと、さまざまな使い道があります。

…
{
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=/`
    );
…

例3:URIクエリーの管理

また、Cloudflare Snippetsを導入することで、URIのクエリ値をスプライシングして、選択的にパラメータを削除したり、追加で挿入したりといった複雑な操作を行うことも可能です。クエリー文字列の操作は通常、変換ルールを使用して行われます。しかし、変換ルールを使用すると、set/アクションは、実質的にreplaceアクションとなります。このアクションをURIクエリー文字列に適用すると、値があればすべて削除し、ユーザーが指定した値に設定するため、値が上書きされてしまいます。これは、トラフィックをマッチングさせるために、特定のクエリーパラメータを選択的に挿入したいお客様にとっては問題です。たとえば、ユーザーエージェントで一般的なソーシャルメディアプラットフォームが検出された場合に、?utm_campaign=facebookのような追加のクエリーを設定することが挙げられます。Snippetsでは、このような選択的な削除や挿入を、次のような簡単なJavaScriptを使用して行うことができます。

…
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が、お客様のためにどのようなユースケースに道を開くのかがとても楽しみです。

ルールセットへのアクションの追加をやめるのですか?

簡単に言えば答えは「ノー」です。今後も、ルールセットエンジン内のノーコードアクションを充実させ、お客様のニーズを解決するための新製品を開発していきます。

当然のように聞こえるかもしれませんが、機能改善の核となるのは、お客様との対話です。Snippetsのユーザーとの対話により、Snippetsが解決する実際のユースケースを理解し、当社の製品群にある機能のギャップを浮き彫りにすることができるのです。そして、そのユースケースを製品化することに意味があるのか、それともSnippetsに任せることに意味があるのかを検討します。

また、誰もがソフトウェア開発者であるわけではないことも理解しています。そこで、Snippetsにアクセスしやすくするために、お客様がコピーして変更できるテンプレートをライブラリとして作成し、必要最低限のコーディング知識で利用できるようにする方法を検討しています。Snippetsでは、パワフルであることが難しさに直結することはありません。

Cloudflare Snippetsにアクセスする

Snippetsは現在開発中です。順番待ちリストへの登録は、こちらからサインアップしてください。

2023年初頭にはクローズドベータへのユーザーの受け入れを開始し、その後オープンベータの公開を予定しています。

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.
Developer Week (JP)Snippets (JP)JavaScript (JP)日本語

Follow on X

Cloudflare|@cloudflare

Related posts

April 05, 2024 1:01 PM

Browser Rendering APIのGA化、そしてCloudflare Snippets、SWRの展開、Workers for Platformsの全ユーザーへの提供

Browser Rendering APIをセッション管理の改善と共にすべての有料Workers顧客に提供開始...

April 04, 2024 1:05 PM

プロダクションの安全のための新たなツール — Gradual Deployments、ソースマップ、Rate Limiting、そして新たなSDK

本日、私たちは利用者がより多くの力を手にするための、段階的デプロイメント、Tail Workersのソースマップスタックトレース、新しいレート制限API、刷新されたAPI SDK、Durable Objectsの5つのアップデートを発表しました。それぞれがミッションクリティカルな本番サービスを念頭に置いて構築されています...

April 03, 2024 1:30 PM

R2に、「イベント通知」、「Google Cloud Storageからの移行のサポート」、「低頻度アクセスストレージ階層」が追加されました

Cloudflare R2の3つの新機能である、「イベント通知」、「Google Cloud Storageからの移行のサポート」、「低頻度アクセスのストレージ階層」を発表できることを嬉しく思います...