カスタム VCL の概要
Fastly は、Varnish Configuration Language (VCL)のカスタマイズバージョンをサポートし、お客様の要件に合わせて Fastly サービス設定をカスタマイズします。
カスタム VCL スニペットは、Adobe Commerce サイトにアップロードされたアクティブな VCL バージョンに追加される VCL ロジックのブロックです。 カスタム VCL スニペットは、リクエストトラフィックに対する Fastly キャッシュサービスの応答方法を変更します。 例えば、カスタム VCL スニペットを追加して、指定されたクライアント IP アドレスからの要求トラフィックのみを許可することができます。 または、Adobe Commerce サイトに紹介スパムを送信することで知られている web サイトからのトラフィックをブロックするスニペットを作成します。
カスタム VCL スニペット(生成、コンパイル、すべての Fastly キャッシュに送信)が、サーバーを停止させることなく読み込みおよびアクティブ化されます。
Fastly では、次の 2 種類のカスタム VCL スニペットをサポートしています。
-
通常のスニペット - カスタムの通常の VCL スニペットは、特定の VCL バージョンに対してコード化されます。 管理者または Fastly API から、通常の VCL スニペットを作成、変更、およびデプロイできます。
-
動的スニペット - Fastly API を使用して作成された VCL スニペット。 サービスの Fastly VCL バージョンを更新しなくても、動的スニペットを変更およびデプロイできます。
Edgeの辞書とアクセス制御リスト(ACL)と共にカスタム VCL スニペットを使用して、カスタムコードで使用するデータを保存することをお勧めします。
-
Edge ディクショナリ - カスタム VCL スニペットから参照できるディクショナリ コンテナに、キーと値のペアとしてデータを格納します
-
Edge ACL - カスタム VCL スニペットを使用して実装されたブロックまたは許可ルールのアクセス制御リストを定義するクライアント IP アドレス データを格納します
ディクショナリと ACL データは、ネットワーク地域全体でアクセス可能な Fastly Edge ノードにデプロイされます。 また、データは、ステージング環境または実稼動環境用に VCL コードを再デプロイしなくても、ネットワーク全体で動的に更新できます。
チュートリアル
このチュートリアルと例では、Edge ディクショナリとEdge ACL を含んだ通常のカスタム VCL スニペットを使用して、Adobe Commerce用の Fastly サービス設定をカスタマイズする方法について説明します。 詳しくは、Fastly のドキュメントを参照してください。
- Fastly VCL のガイド - Fastly Varnish の実装、Fastly VCL の拡張機能、および Varnish と VCL の詳細を学習するためのリソースに関する情報です。
- Fastly VCL リファレンス - Fastly カスタム VCL およびカスタム VCL スニペットを開発およびトラブルシューティングするための詳細なプログラミング リファレンスです。
カスタム VCL スニペットは、Adobe Commerce管理者から、または Fastly API を使用して作成および管理できます。
-
Adobe Commerce管理者 - Adobe Commerce管理を使用してカスタム VCL スニペットを管理することをお勧めします。これは、VCL 変更の検証、アップロード、Fastly サービス設定への適用を自動化するからです。 また、Fastly サービス設定に追加されたカスタム VCL スニペットを、管理者で表示して編集することもできます。
-
Fastly API – 管理者にアクセスできない場合は、Fastly API を使用してカスタム VCL スニペットを管理します。 例えば、API を使用して、サイトがダウンしたときに Fastly サービス設定をトラブルシューティングしたり、カスタム VCL スニペットを追加したりします。 また、API を使用してのみ完了できる操作もあります。 たとえば、API を使用して、古い VCL バージョンを再アクティブ化したり、指定した VCL バージョンに含まれるすべての VCL スニペットを表示する必要があります。 VCL スニペットの API クイック リファレンス を参照してください。
VCL スニペットコードの例
次の例は、クライアントの IP アドレスでトラフィックをフィルタリングするカスタム VCL スニペット(JSON 形式)を示しています。
{
"service_id": "FASTLY_SERVICE_ID",
"version": "{Editable Version #}",
"name": "apply_acl",
"priority": "100",
"dynamic": "1",
"type": "hit",
"content": "if ((client.ip ~ {ACLNAME}) && !req.http.Fastly-FF){ error 403; }"
}
content フィールドの VCL ロジックは、次のアクションを実行します。
-
各リクエストで
client.ip受信 IP アドレスを確認します -
ACLNAME エッジ ACL に含まれる IP アドレスを持つ要求をブロックし、
403 Forbiddenエラーを返します
次の表に、カスタム VCL スニペットのキーデータの詳細を示します。 詳しくは、Fastly のドキュメントの VCL スニペット リファレンスを参照してください。
API_KEYactivetrue または false を返します。 true の場合、スニペットまたはバージョンは使用中です。 バージョン番号を使用してアクティブなスニペットのクローンを作成します。contentdynamicnumberpriorityカスタム VCL スニペット コードを実行するタイミングを指定する 1 ~ 100 の数値。 優先度の値が小さいスニペットが最初に実行されます。 指定しない場合、priority 値はデフォルトで 100 になります。
優先順位の値が 5 のカスタム VCL スニペットは直ちに実行されます。これは、リクエストルーティング(ブロックおよび許可リストとリダイレクト)を実装する VCL コードに最適です。 優先順位 100 は、デフォルトの VCL スニペットコードを上書きする場合に最適です。
Magento-Fastly モジュールに含まれているすべての デフォルト VCL スニペット には、priority=50 が含まれています。
100などの高い優先度を割り当てて、他のすべての VCL 関数の後にカスタム VCL コードを実行し、デフォルトの VCL コードをオーバーライドします。
service_idtypeinit (サブルーチンの上)や recv (サブルーチン内)などです。 詳しくは、Fastly VCL スニペット リファレンスを参照してください。管理者からのカスタム VCL の管理
カスタム VCL スニペットの追加 は、管理画面の Fastly 設定/カスタム VCL スニペット セクションから行えます。
カスタム VCL スニペット ビューには、管理者を通じて追加されたスニペットのみが表示されます。 Fastly API を使用してスニペットを追加する場合は、API を使用して スニペットを管理 します。
以下の例は、カスタム VCL スニペットを管理者から作成および管理する方法と、Fastly Edge モジュールおよびEdgeの辞書を使用する方法を示しています。
Commerce管理者で表示/変更できないスニペット
一部のスニペットは、Commerce Admin 内で直接表示または変更することはできません。 例えば、 動的スニペット です。 「カスタム VCL スニペット」セクションには、クラウドサポートチームによって Fastly 管理ダッシュボード に直接追加されたスニペットは表示されません。
クラウドサポートチームによって追加されたスニペットを確認するには:
-
「ツール」セクションに移動します。
-
バージョン履歴 の横にある すべてのバージョンをリスト をクリックします。
-
該当する VCL バージョンの横にある目のアイコンをクリックして、既存のスニペットを表示します。
API を使用した VCL の管理
次のウォークスルーでは、通常の VCL スニペットファイルを作成し、Fastly API を使用して Fastly サービス設定に追加する方法を示します。 ターミナル アプリケーションからスニペットを作成および管理できます。 特定の環境への SSH 接続は必要ありません。
前提条件:
-
Fastly サービスを使用するには、クラウドインフラストラクチャ環境でAdobe Commerceを設定します。 Fastly の設定 を参照してください。
-
Fastly API 資格情報を取得 して、Fastly API へのリクエストを認証します。 正しい環境(ステージングまたは実稼動)の資格情報を取得していることを確認します。
-
cURL コマンドで使用できる bash 環境変数として、Fastly サービスの資格情報を保存します。
code language-bash export FASTLY_SERVICE_ID=<Service-ID>code language-bash export FASTLY_API_TOKEN=<API-Token>書き出された環境変数は、現在の bash セッションでのみ使用でき、ターミナルを閉じると失われます。 新しい値を書き出して変数を再定義できます。 Fastly に関連する、書き出された変数のリストを表示するには:
code language-bash export | grep FASTLY
VCL スニペットの追加
このチュートリアルでは、Fastly API を使用してカスタムスニペットを追加する基本的な手順を説明します。
前提条件
-
Fastly CDN を使用するように環境を設定する必要があります。 詳しくは、Fastly サービスの設定 を参照してください。
-
Magento 2 の Fastly CDN モジュールが最新バージョンであることを確認してください。 Fastly モジュールのアップグレード を参照してください。
-
Fastly サービスの環境設定を確認します。 Fastly キャッシュの確認 を参照してください。
-
ステージング環境と実稼動環境にアクセスするには、管理者資格情報が必要です。
手順 1:アクティブな VCL バージョンを探す
Fastly API バージョンを取得 操作を使用して、アクティブな VCL バージョン番号を取得します。
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/active
JSON 応答では、number キーで返されたアクティブな VCL バージョン番号(例:"number": 99)をメモします。 VCL を編集用に複製する場合は、バージョン番号が必要です。
{
"testing": false,
"locked": true,
"number": 99,
"active": true,
"service_id": "872zhjyxhto5SIRb3GAE0",
"staging": false,
"created_at": "2019-01-29T22:38:53Z",
"deleted_at": null,
"comment": "Magento Module uploaded VCL",
"updated_at": "2019-01-29T22:39:06Z",
"deployed": false
}
以降の API リクエストで使用するために、アクティブなバージョン番号を bash 環境変数に保存します。
export FASTLY_VERSION_ACTIVE=<Version>
手順 2:アクティブな VCL バージョンとすべてのスニペットを複製する
カスタム VCL スニペットを追加または修正する前に、編集用にアクティブな VCL バージョンのコピーを作成する必要があります。 Fastly API clone 操作を使用します。
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION_ACTIVE/clone -X PUT
JSON 応答では、バージョン番号が増分され、アクティブ キー値は false になります。 新しい非アクティブな VCL バージョンは、ローカルで修正できます。
{
"testing": false,
"locked": false,
"number": 100,
"active": false,
"service_id": "vW2bLFWhhto5SIRb3GAE0",
"staging": false,
"created_at": "2019-01-29T22:38:53Z",
"deleted_at": null,
"comment": "Magento Module uploaded VCL",
"updated_at": "2019-01-29T22:39:06Z",
"deployed": false
}
以降のコマンドで使用するために、新しいバージョン番号を bash 環境変数に保存します。
export FASTLY_EDIT_VERSION=<Version>
手順 3:カスタム VCL スニペットの作成
カスタム VCL コードを作成し、次の内容と形式で JSON ファイルに保存します。
{
"name": "<name>",
"dynamic": "0",
"type": "<type>",
"priority": "100",
"content": "<code all in one line>"
}
値には次が含まれます。
-
name- VCL スニペットの名前。 -
dynamic– これが 通常のスニペット か 動的スニペット かを示します。 -
type– 生成されたスニペットを挿入する場所を指定します。たとえば、init(サブルーチンの上)やrecv(サブルーチン内)などです。 Fastly VCL スニペットオブジェクトの値 を参照してください。 -
priority- カスタム VCL スニペットコードを実行するタイミングを決定する1~100の値。 値が小さいカスタム VCL スニペットが最初に実行されます。Fastly VCL モジュールのデフォルトの VCL コードはすべて、
priorityが50です。 アクションを最後に実行する場合、またはデフォルトの VCL コードをオーバーライドする場合は、100のように大きい数字を使用します。 カスタム VCL スニペットコードをすぐに実行するには、優先度を5などの低い値に設定します。 -
content– 改行なしで 1 行で実行する VCL コードのスニペット。 カスタム VCL スニペットの例 を参照。
手順 4:Fastly 設定への VCL スニペットの追加
Fastly API スニペットを作成 操作を使用して、カスタム VCL スニペットを VCL バージョンに追加します。
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/snippet -H 'Content-Type: application/json' -X POST --data @<filename.json>
<filename.json> は、前の手順で準備したファイルの名前です。 各 VCL スニペットに対して、このコマンドを繰り返します。
Fastly サービスから 500 Internal Server Error 応答を受け取った場合は、JSON ファイル構文を調べ、有効なファイルをアップロードしていることを確認します。
手順 5:カスタム VCL スニペットの検証とアクティブ化
カスタム VCL スニペットを追加すると、編集中の VCL バージョンにスニペットが挿入されます。 変更を適用するには、次の手順を実行して VCL スニペット コードを検証し、VCL バージョンをアクティブにします。
-
Fastly API VCL バージョンの検証 操作を使用して、更新された VCL コードを検証します。
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/validateFastly API がエラーを返した場合は、問題を修正し、更新された VCL バージョンを再度検証します。
-
Fastly API アクティベート 操作を使用して、新しい VCL バージョンをアクティベートします。
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_EDIT_VERSION/activate -X PUT
VCL スニペットの API クイックリファレンス
これらの API リクエストの例では、書き出された環境変数を使用して、Fastly で認証するための資格情報を提供しています。 これらのコマンドについて詳しくは、Fastly API リファレンス を参照してください。
-
アクティブな VCL バージョン番号を取得
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/active -
サービスに添付されているすべての通常の VCL スニペットを一覧表示する
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet -
個々のスニペットの確認
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name><snippet_name>はスニペットの名前(my_regular_snippetなど)です。 -
スニペットの更新
準備された JSON ファイル を変更し、次のリクエストを送信します。
code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name> -H 'Content-Type: application/json' -X PUT --data @<filename.json> -
個々の VCL スニペットを削除する
スニペットのリストを取得し、次の
curlコマンドを削除する特定のスニペット名と共に使用します。code language-bash curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION/snippet/<snippet_name> -X DELETE -
デフォルトの Fastly VCL コードの値を上書き
更新された値でスニペットを作成し、
100の優先度を割り当てます。