カスタム VCL の概要
Fastly は、Varnish Configuration Language (VCL)のカスタマイズバージョンをサポートし、お客様の要件に合わせて Fastly サービス設定をカスタマイズします。
カスタム VCL スニペットは、Adobe Commerce サイトにアップロードされたアクティブな VCL バージョンに追加される VCL ロジックのブロックです。 カスタム VCL スニペットは、リクエストトラフィックに対する Fastly キャッシュサービスの応答方法を変更します。 例えば、カスタム VCL スニペットを追加して、指定されたクライアント IP アドレスからの要求トラフィックのみを許可することができます。 または、Adobe Commerce サイトに紹介スパムを送信することで知られている web サイトからのトラフィックをブロックするスニペットを作成します。
カスタム VCL スニペット(生成、コンパイル、すべての Fastly キャッシュに送信)が、サーバーを停止させることなく読み込みおよびアクティブ化されます。
Fastly では、次の 2 種類のカスタム 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_KEY
active
true
または false
を返します。 true の場合、スニペットまたはバージョンは使用中です。 バージョン番号を使用してアクティブなスニペットのクローンを作成します。content
dynamic
number
priority
カスタム VCL スニペット コードを実行するタイミングを指定する 1
~ 100
の数値。 優先度の値が小さいスニペットが最初に実行されます。 指定しない場合、priority
値はデフォルトで 100
になります。
優先順位の値が 5
のカスタム VCL スニペットは直ちに実行されます。これは、リクエストルーティング(ブロックおよび許可リストとリダイレクト)を実装する VCL コードに最適です。 優先順位 100
は、デフォルトの VCL スニペットコードを上書きする場合に最適です。
MagentoFastly モジュールに含まれているすべての デフォルトの VCL スニペットには priority=50
があります。
100
などの高い優先度を割り当てて、他のすべての VCL 関数の後にカスタム VCL コードを実行し、デフォルトの VCL コードをオーバーライドします。
service_id
type
init
(サブルーチンの上)や recv
(サブルーチン内)などです。 詳しくは、Fastly VCL スニペットリファレンスを参照してください。管理者からのカスタム VCL の管理
カスタム VCL スニペットの追加は、管理画面の Fastly 設定/カスタム VCL スニペット セクションから行えます。
カスタム VCL スニペット ビューには、管理者を通じて追加されたスニペットのみが表示されます。 Fastly API を使用してスニペットを追加する場合は、API を使用して スニペットを管理します。
以下の例は、カスタム VCL スニペットを管理者から作成および管理する方法と、Fastly Edge モジュールおよびEdgeの辞書を使用する方法を示しています。
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 スニペットの名前。 -
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/validate
Fastly 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
-
更新された値でスニペットを作成し、
100
の優先度を割り当てます。