カスタム 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 バージョン用にコーディングされます。 AdminまたはFastly APIから、通常のVCL スニペットを作成、変更、デプロイできます。
-
動的スニペット - Fastly APIを使用して作成されたVCL スニペット。 サービスのFastly VCL バージョンを更新することなく、動的スニペットを変更およびデプロイできます。
カスタムコードで使用されるデータを保存するには、Edge ディクショナリとアクセス制御リスト(ACL)でカスタム VCL スニペットを使用することをお勧めします。
-
Edge ディクショナリ - カスタム VCL スニペットから参照できるディクショナリコンテナにデータをキーと値のペアとして保存します
-
Edge ACL:カスタム VCL スニペットを使用して実装されたブロックまたは許可ルールのアクセス制御リストを定義するクライアント IP アドレス データを保存します
ディクショナリとACL データは、ネットワークリージョンをまたいでアクセスできるFastlyEdgeノードにデプロイされます。 また、ステージング環境または実稼動環境のVCL コードを再デプロイしなくても、データをネットワーク全体で動的に更新できます。
チュートリアル
このチュートリアルと例では、Adobe CommerceのFastly サービス設定をカスタマイズするために、Edge ディクショナリとEdge ACLで通常のカスタム VCL スニペットを使用する方法を示します。 詳細については、Fastlyのドキュメントを参照してください。
- Fastly VCLのガイド - Fastly Varnishの実装、Fastly VCL拡張機能、およびVarnishとVCLの詳細を学ぶためのリソースに関する情報。
- Fastly VCL リファレンス - Fastly カスタム VCLおよびカスタム VCL スニペットの開発とトラブルシューティングのための詳細なプログラミング リファレンス。
Adobe Commerce管理者またはFastly APIを使用して、カスタム VCL スニペットを作成および管理できます。
-
Adobe Commerce管理者 - Adobe Commerce管理者を使用して、VCLの変更を検証、アップロード、Fastly サービス設定に適用するプロセスを自動化するため、カスタム VCL スニペットを管理することをお勧めします。 また、管理者からFastly サービス設定に追加されたカスタム VCL スニペットを表示して編集することもできます。
-
Fastly API:管理者にアクセスできない場合は、Fastly APIを使用してカスタム VCL スニペットを管理します。 例えば、サイトがダウンしている場合にFastly サービス設定をトラブルシューティングしたり、カスタム VCL スニペットを追加したりするためにAPIを使用します。 また、一部の操作はAPIを使用してのみ完了できます。 例えば、古いVCL バージョンを再アクティブ化したり、指定したVCL バージョンに含まれるすべてのVCL スニペットを表示したりするには、APIを使用する必要があります。 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の場合、スニペットまたはバージョンが使用中です。 バージョン番号を使用して、アクティブなスニペットを複製します。contentdynamicfalseを返します。 新しいVCL バージョンを必要とせずに変更およびデプロイできる動的スニペット のtrueを返します。numberpriorityカスタム VCL スニペット コードの実行時を指定する1から100までの数値。 優先度の低い値のスニペットが最初に実行されます。 指定しない場合、priority値はデフォルトで100になります。
優先度が5のカスタム VCL スニペットは直ちに実行されます。これは、リクエストルーティング(ブロックとリダイレクトの許可リストに加えるとリダイレクト)を実装するVCL コードに最適です。 優先度100は、デフォルトのVCL スニペットコードを上書きするのに最適です。
Magento-Fastly モジュールに含まれている デフォルトのVCL スニペット はすべてpriority=50です。
- 他のすべてのVCL関数の後にカスタム VCL コードを実行し、デフォルトのVCL コードを上書きするには、
100のような優先度を高く割り当てます。
service_idtypeinit (サブルーチンの上)やrecv (サブルーチン内)などです。 詳しくは、Fastly VCL スニペット のリファレンスを参照してください。管理者からのカスタム VCLの管理
カスタム VCL スニペット 🔗は、管理者のFastly設定 > カスタム VCL スニペット セクションから追加できます。
カスタム VCL スニペット ビューには、管理者を通じて追加されたスニペットのみが表示されます。 スニペットがFastly APIを使用して追加された場合は、APIを使用して管理します。
次の例は、管理者からカスタム VCL スニペットを作成および管理する方法、およびFastly Edge モジュールとEdge ディクショナリを使用する方法を示しています。
Commerce管理者で表示または変更できないスニペット
Commerce管理画面では、一部のスニペットを直接表示または変更することはできません。 例:動的スニペット 。 「カスタム VCL スニペット」セクションには、Fastly管理ダッシュボード にクラウドサポートチームによって直接追加されたスニペットは表示されません。
クラウドサポートチームによって追加されたスニペットを確認するには:
-
「ツール」セクションに移動します。
-
バージョン履歴の横にある すべてのバージョンを一覧表示 をクリックします。
-
該当するVCL バージョンの横にある目のアイコンをクリックして、既存のスニペットを表示します。
APIを使用したVCLの管理
次のチュートリアルでは、通常のVCL スニペットファイルを作成し、Fastly APIを使用してFastly サービス設定に追加する方法を示します。 スニペットは、ターミナル アプリケーションから作成および管理できます。 特定の環境にSSH接続は必要ありません。
前提条件:
-
Fastly サービス用にAdobe Commerce on cloud インフラストラクチャ環境を設定します。 Fastlyの設定を参照してください。
-
Fastly APIへのリクエストを認証するために、Fastly API資格情報を取得します。 ステージングまたは実稼動環境の正しい環境の資格情報を取得していることを確認してください。
-
Fastly サービスの資格情報を、cURL コマンドで使用できるbash環境変数として保存します。
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 キー(例:"number": 99)で返されるアクティブなVCL バージョン番号をメモします。 編集のために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 クローン 操作を使用します。
curl -H "Fastly-Key: $FASTLY_API_TOKEN" https://api.fastly.com/service/$FASTLY_SERVICE_ID/version/$FASTLY_VERSION_ACTIVE/clone -X PUT
JSON応答では、バージョン番号が増分され、active キー値は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:VCL スニペットをFastly設定に追加する
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 スニペットを追加すると、Fastlyは編集中の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 バージョンを再度検証します。
-
新しいVCL バージョンをアクティブ化するには、Fastly API activate操作を使用します。
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を割り当てます。