ダイナミック VCL スニペットの使用

ダイナミック VCL スニペットは 2種類のスニペットのうちの1つで、カスタム VCL を使わずに、VCL ロジックの小さなセクションをサービスの設定に挿入することができます (ただし、必要に応じて、カスタム VCL にスニペットを含めることができます)。

ダイナミックスニペットの作成は、API 経由でのみ可能です。ダイナミックスニペットはバージョンレスのオブジェクトであるため (エッジで使用する Edge DictionaryACL のように)、Fastly サービスの変更とは無関係に変更することができます。そのため、本番環境に対応していないサービスバージョンをデプロイすることなく、スニペットコードを迅速に変更することができます。

ダイナミック VCL スニペットの作成と使用

cURL コマンドラインツールを使用して、ターミナルアプリケーションで以下の API コールを行います。

1
curl -X POST -s https://api.fastly.com/service/<Service ID>/version/<Editable Version #>/snippet -H "Fastly-Key:FASTLY_API_TOKEN" -H 'Content-Type: application/x-www-form-urlencoded' --data $'name=my_dynamic_snippet_name&type=recv&dynamic=1&content=if ( req.url ) {\n set req.http.my-snippet-test-header = "true";\n}';

Fastly は、以下のような JSON レスポンスを返します。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
 "service_id": "<Service Id>",
 "version": "<Editable Version>",
 "name": "my_dynamic_snippet_name",
 "type": "recv",
 "priority": 100,
 "dynamic": 1,
 "content": null,
 "id": "decafbad12345",
 "created_at": "2016-09-09T20:34:51+00:00",
 "updated_at": "2016-09-09T20:34:51+00:00",
 "deleted_at": null
}

ダイナミック VCL スニペットをコントロールパネルに表示する

ダイナミック VCL スニペットの一覧を表示することができます。また、生成された VCL 内の特定のスニペットのソースまたは特定のスニペットの場所のみを表示することもできます。

ダイナミック VCL スニペットの一覧表示

サービスのダイナミック VCL スニペットのリスト全体をコントロールパネルで表示するには、以下の手順に従ってください。

  1. Fastly コントロールパネルにログインし、Configure をクリックします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. VCL Snippets リンクをクリックします。VCL Snippets ページが表示され、サービスのすべてのダイナミック VCL スニペットが Dynamic snippets エリアに表示されます。

    サービスに付属する VCL スニペットのリストの例

特定のスニペットのソースを表示する

特定のスニペットのソースだけを表示することができます。

  1. Fastly コントロールパネルにログインし、Configure をクリックします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. VCL Snippets リンクをクリックします。VCL Snippets ページが表示されます。
  5. スニペットの名前の右側にある View Source リンクをクリックします。View Source ウィンドウが表示されます。

生成された VCL で特定のスニペットの場所を表示する

生成された VCL で特定のスニペットの場所を表示することができます。

  1. Fastly コントロールパネルにログインし、Configure をクリックします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. VCL Snippets リンクをクリックします。VCL Snippets ページが表示されます。
  5. スニペットの名前の右側にある Show in Generated VCL リンクをクリックします。Generated VCL ウィンドウが表示されます。

すべてのダイナミック VCL スニペットのリストを取得する

サービスに接続されているすべてのダイナミック VCL スニペットを一覧表示するには、ターミナルアプリケーションで以下の API コールを行います。

1
curl -X GET -s https://api.fastly.com/service/<Service ID>/version/<Editable Version #>/snippet -H "Fastly-Key:FASTLY_API_TOKEN"

個別のダイナミック VCL スニペットを取得する

個別のスニペットを取得するには、ターミナルアプリケーションで以下の API コールを行います。

1
curl -X GET -s https://api.fastly.com/service/<Service ID>/snippet/<my_dynamic_snippet_id> -H "Fastly-Key:FASTLY_API_TOKEN"

通常の VCL スニペットの取得とは異なり、URL にバージョンを含めず、スニペットの名前ではなく、スニペットの作成時に返された ID を使用する必要があります。

既存のダイナミック VCL スニペットを更新する

個々のスニペットを更新するには、ターミナルアプリケーションで以下の API コールを行います。

1
curl -X PUT -s https://api.fastly.com/service/<Service ID>/snippet/<my_dynamic_snippet_id> -H "Fastly-Key:FASTLY_API_TOKEN" -H 'Content-Type: application/x-www-form-urlencoded' --data $'content=if ( req.url ) {\n set req.http.my-snippet-test-header = \"affirmative\";\n}';

既存のダイナミック VCL スニペットを削除する

個々のスニペットを削除するには、ターミナルアプリケーションで以下の API コールを行います。

1
curl -X DELETE -s https://api.fastly.com/service/<Service ID>/version/<Editable Version #>/snippet/<my_dynamic_snippet_name> -H "Fastly-Key:FASTLY_API_TOKEN"

カスタム VCL にダイナミックスニペットを含める

type のパラメータに none の場所を指定すると、VCL でスニペットがレンダリングされません。これにより、以下のシンタックスを使用してカスタム VCL にスニペットを含めることができます。

include "snippet::<snippet name>"

必要に応じて同じ VCL スニペットをいくつでもカスタム VCL に組み込むことができます。

ユースケース:Web スクレイパーをブロックする

例えば、お客様の Web サイトをスクレイピングしようとするユーザーをブロックするため、受信リクエストに対してパターンマッチングを実装したいとします。また、すべての受信リクエストをチェックして、受信 IP アドレス、ブラウザ、取得しようとしている URL を組み合わせてスクレイパーを特定できるルールセットを生成するシステムを開発したとします。さらに、システムが20分ごとにルールを更新するとします。

システムの更新中に、お客様の同僚が Fastly 設定の他の部分に変更を加えている場合、サービスの最新バージョンがテストされていない可能性があるため、システムが自動的に最新バージョンをデプロイすることは望ましくありません。その代わり、ルールをダイナミック VCL スニペットとして生成することができます。スニペットが更新されても、他のロジックはすべて現在デプロイされているバージョンと同じままで、ルールだけが変更されます。

Back to Top