6. 高度な設定

ここでチュートリアルを終了することもできます。Fastly は Web サイトをキャッシュしています。TLS を使用して接続を保護し、ログでモニタリングしています。すべてがシームレスに機能しています。しかし、私たちの仕事はそれだけにとどまりません。

このセクションでは、日常的な Web サイトの問題と、この分野につきものの悩みに対処するヒントと役立つ情報をご紹介します。つまり、「高度な設定」です。ここでは、カスタム VCL によるリダイレクトの追加、API によるキャッシュのパージ、サロゲートキーを使用するパージについてご説明します。

VCL スニペットを使用してリダイレクトを追加する

コンテンツを削除するか、ファイルを名前を変更する場合は、古い URL を新しい URL にリダイレクトする必要があります。これにより、古いリンクが使用できなくなり、新しいリンクをインデックス化する必要があることを検索エンジンに伝えることができます。Fastly では、エッジでリダイレクトを簡単に追加することができます。VLC スニペットを作成することで、Fastly サービスにリダイレクトを追加し、コードや Amazon S3 バケットに触れることなく、これらを有効化することができます。

VCL スニペットを作成してリダイレクトをサポートします。最初のスニペットには、リダイレクトテーブルが含まれます。これには、リダイレクトしたい URL を追加します。他の 2 つのスニペットは、「設定したら忘れてもいい」ものです。作成した後、再び使用することはありません。1 つはインバウンドリクエストをリダイレクトテーブルに照らし合わせ、もう一つはリダイレクトレスポンスを生成します。

VCL テーブルとして保存されるリダイレクトのデータセットは、以下のようになります。

1
2
3
4
table solution_redirects {
 "/source1": "/dest1",
 "/source2": "/dest2"
}

これが Taco Labs とどのように連携するかを見てみましょう。Web サイトに、ビーフハードタコスのレシピがありました。これは、タコシェルが全国的に不足しているため、一時的に削除する必要がありました。そのレシピのファイルを削除し、古い URL (https://www.tacolabs.com/tacos/2021/05/15/beef-hard-tacos.html) をビーフソフトタコスのレシピページ (https://www.tacolabs.com/tacos/2021/07/02/beef-soft-tacos.html) にリダイレクトします。VCL テーブルは以下のようになります。

1
2
3
table solution_redirects {
 "/tacos/2021/05/15/beef-hard-tacos.html": "/tacos/2021/07/02/beef-soft-tacos.html"
}

もちろん、コンテンツを削除し、ファイル名を変更すれば、、今後、このテーブルに URL を追加することができます。

Fastly コントロールパネルを使用して、あらゆる VCL スニペットを作成することができます。Edit configuration ボタンをクリックして、サービスをクローンし、新しいドラフトバージョンを作成しましょう。VCL スニペットページで、Create snippet ボタンをクリックします。スニペットに名前を追加し、init タイプを選択して、以下のように VCL を入力します。

Fastly コントロールパネルで VCL スニペットを作成する

Create ボタンをクリックして VCL スニペットを保存します。

では、作成したリダイレクトテーブルに対して、インバウンドリクエストと一致する、別のスニペットを作成します。コントロールパネルの VCL スニペット作成ページで Type を within subroutine に設定して recv (vcl_recv) を選択し、以下の VCL を使用します。

1
2
3
if (table.lookup(solution_redirects, req.url.path)) {
  error 618 "redirect";
}

最後に、リダイレクトのレスポンスを生成する VCL スニペットを作成します。コントロールパネルの VCL スニペット作成ページで Type を within subroutine に設定して error (vcl_error) を選択し、以下の VCL を使用します。

1
2
3
4
5
if (obj.status == 618 && obj.response == "redirect") {
  set obj.status = 308;
  set obj.http.Location = "https://" + req.http.host + table.lookup(solution_redirects, req.url.path) + if (std.strlen(req.url.qs) > 0, "?" req.url.qs, "");
  return (deliver);
}

Activate ボタンをクリックして、サービス設定の新しいバージョンを有効化します。https://www.tacolabs.com/tacos/2021/05/15/beef-hard-tacos.htmlで Web ブラウザを指すことで、リダイレクトが機能しているかどうかを確認することができます。https://www.tacolabs.com/tacos/2021/07/02/beef-soft-tacos.htmlにリダイレクトするはずです。機能しています!

これで、すべてを設定したので、今後、新しいリダイレクトを追加するのは簡単です。サービスをクローンして VCL テーブルにリダイレクトを追加し、サービスを有効化するたけです。非常に簡単です。

API を使用してすべてのキャッシュをパージする

以前に、このチュートリアルでパージの仕方について説明したのを覚えているでしょうか。purge all は他のオプションにも使える便利なものです。Fastly の API を使用して、GitHub Actions を使ってデプロイプロセスの一環として、自動的にパージリクエストが実行されるように設定することができます。

まず始めに、すべてをパージするリクエストは認証される必要があるため、コントロールパネルを使用してアカウント API トークンを作成します。ユーザーメニューから、Account を選択し、サイドバーから Personal API tokens を選択します。Create Token ボタンをクリックします。以下のように、フォームフィールドに入力します。

Fastly コントロールパネルで API トークンを作成する

Create Token ボタンをクリックして、API トークンを作成します。トークンを安全な場所にコピー・ペーストして保存します。ページから離れた後、再びトークンを表示することはできません。

これで、Terminal アプリケーションを使用して Purge all の API エンドポイントをテストできます。

1
$ curl -X POST -H "Fastly-Key: YOUR_FASTLY_TOKEN" "https://api.fastly.com/service/SERVICE_ID/purge_all"

以下のレスポンスが表示されるはずです。

1
{"status":"ok"}

以下のように、コントロールパネルのイベントログインを見ることで、パージリクエストが正常に実行されたかどうかを確認することができます。成功です!

Fastly コントロールパネルでイベントログを確認する

次に GitHub Action の下部に curl コマンドを追加します。

1
2
3
4
    - name: "Purge Fastly cache"
      run: |
        curl -X POST -H "Fastly-Key: YOUR_FASTLY_TOKEN"
 "https://api.fastly.com/service/SERVICE_ID/purge_all"

以上です!これで GitHub Action は、Web サイトを Amazon S3 にデプロイした後、自動的に Fastly のキャッシュをすべてパージします。

サロゲートキーでパージする

静的サイトに purge all を使用するよう取り組んでいますが、理論上、サロゲートキーを使用して、キャッシュからセレクトグループをどのようにパージするかについてはまだ研究の余地があります。これがどのように機能するかを理解するには、コンテンツのサブセットを選び、ヘッダーを使用してこれらのコンテンツ項目をサロゲートキーでタグ付けします。そうすることで、サロゲートキーでタグ付けされたコンテンツ項目のキャッシュのみをパージすることができます。

例えば、すべてのミックスイン (トッピング) にサロゲートキーが必要だとしましょう。原材料の価格が価格が頻繁に変わるため、ミックスインコンテンツを 1 日何回も更新してパージしなければならないと仮定します。VCL スニペットを使用して、mixin キーを作成し、すべてのミックスイン関連コンテンツをタグ付けします。また、オリジンまたはアプリケーションレベルでサロゲートキーを設定することもできます。

Edit configuration ボタンをクリックして、サービスをクローンし、新しいドラフトバージョンを作成しましょう。VCL スニペットページで、Create snippet ボタンをクリックします。スニペットに名前を付け、Type を within subroutine に設定して fetch (vcl_fetch) を選択し、以下の VCL を使用します。

1
2
3
if (req.url.path ~ "/mix-ins/") {
  set beresp.http.Surrogate-key = "mixin";
}

これで、ミックスインパス内のすべてのコンテンツにサロゲートキーを設定できます。コントロールパネルで以下のように設定されていることを確認し、Createボタンをクリックします。

サロゲートキーで VCL スニペットを作成する

Activate ボタンをクリックして、サービス設定の新しいバージョンを有効化します。別の purge all を実行した後 (セクションの指示に従ってください)、ミックスインインデックスページのヘッダーをチェックすることで、リダイレクトが機能しているかどうかを確認することができます。

1
$ curl -svo /dev/null -H "Fastly-Debug:1" "https://www.tacolabs.com/mix-ins/"

出力で surrogate-key ヘッダーを確認することができます。

1
2
3
4
5
6
7
8
9
10
11
< HTTP/2 200
< x-amz-id-2: eDYmcGNu4Pk+AnTjHy5aO1kuOI802/tOdstMxa5FdZV0doL8Kjn7p/C+UBiE7u04Xg9bTmVooR8=
< x-amz-request-id: 6KF7YW10F6Q19T0Y
< last-modified: Thu, 04 Nov 2021 22:38:08 GMT
< etag: "d89bec2183579e4c842d2590bc45bf9f"
< content-type: text/html
< server: AmazonS3
< via: 1.1 varnish, 1.1 varnish
< surrogate-key: mixin
< cache-control: no-store, max-age=0
< surrogate-control: max-age=31557600

これで、API を使ってサロゲートキーでタグ付けされたコンテンツをパージすることができます。

1
$ curl -X POST -H "Fastly-Key: YOUR_FASTLY_TOKEN" "https://api.fastly.com/service/SERVICE_ID/purge/mixin"


Back to Top