新規投稿のお知らせを受信されたい方は、サブスクリプションをご登録ください:

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

2022-11-17

2分で読了
この投稿はEnglish繁體中文FrançaisDeutschPortuguêsEspañol简体中文でも表示されます。

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

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プラン

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の修正です。 getTimesetTimeの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年初頭にはクローズドベータへのユーザーの受け入れを開始し、その後オープンベータの公開を予定しています。

Cloudflareは企業ネットワーク全体を保護し、お客様がインターネット規模のアプリケーションを効率的に構築し、あらゆるWebサイトやインターネットアプリケーションを高速化し、DDoS攻撃を退けハッカーの侵入を防ぎゼロトラスト導入を推進できるようお手伝いしています。

ご使用のデバイスから1.1.1.1 にアクセスし、インターネットを高速化し安全性を高めるCloudflareの無料アプリをご利用ください。

より良いインターネットの構築支援という当社の使命について、詳しくはこちらをご覧ください。新たなキャリアの方向性を模索中の方は、当社の求人情報をご覧ください。
Developer WeekSnippetsJavaScript

Xでフォロー

Cloudflare|@cloudflare

関連ブログ投稿