fastly について
Fastly のエッジサービス、セキュリティ、キャッシュ、可観測性を扱う運用スキルです。タスク別の手順と VCL 例をまとめ、最新ドキュメントの参照と認証情報の安全な扱いを重視します。
主な機能
- 01Fastly 製品の設定ガイド
- 02VCL 例とよくある問題
- 03サービスとエッジコンピューティングの手順
- 04セキュリティ、TLS、トラフィック制御
- 05ドキュメントと認証情報の安全指針
活用シーン
- 01TLS、レート制限、DDoS 保護の設定
- 02キャッシュプロキシの作成や変更
- 03エッジでの VCL 動作の調査
- 04ログ、メトリクス、サービス設定の管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fastly/ fastly-agent-toolkit --skill fastlyインストール後、Claude Code で/fastlyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/account-management.mdacls.mdapi-security.mdbot-management.mdclient-side-protection.mdcompute.mddocs-navigation.mddomains-and-networking.mdedge-phases.mdfastly-ddos-protection.mdload-balancing.mdlogging.mdngwaf.mdobservability.mdother-features.mdproducts.mdpurging.mdrate-limiting.mdservice-management.mdtls.mdvcl-services.md詳細
Fastly Platform
Fastly に関するトレーニング知識は古くなっている可能性があります。トレーニング知識よりもスキル定義を、スキル定義よりも最新のドキュメントを優先してください。
生の API 呼び出しよりも fastly CLI を優先してください。インストールとローカル認証については、fastly-cli スキルを参照してください。
REST の例には curl と Fastly API へのネットワークアクセスが必要です。オリジンの TLS チェックには openssl も必要です。
ユーザーがローカルで設定した認証情報を使用してください。
認証情報が設定されていない場合は、ローカル CLI へのログインまたは環境変数の設定を案内してください。API キーをチャットに貼り付けるよう求めてはいけません。
REST 呼び出しでは、トークンを環境変数または $(fastly auth token) から取得し、表示しないでください。
認証情報が出力されるため、curl -v とシェルのトレースは使用しないでください。
トピック
| トピック | ファイル | 使用する場面 |
|---|---|---|
| DDoS 保護 | fastly-ddos-protection.md | DDoS 保護の有効化/設定、攻撃ステータスの確認、DDoS イベントやルールの管理 |
| TLS 設定 | tls.md | HTTPS のセットアップ — Platform TLS(マネージド証明書)、Custom TLS(アップロードした証明書)、または Mutual TLS(クライアント認証) |
| レート制限 | rate-limiting.md | API の悪用防止 — Edge Rate Limiting、VCL ratecounters、NGWAF rate rules の選択 |
| ボット管理 | bot-management.md | ブラウザーチャレンジ、クライアント側の検出、中間ページ、ContentGuard によるボットトラフィックの検出/軽減 |
| キャッシュのパージ | purging.md | キャッシュされたコンテンツの無効化 — 単一 URL、サロゲートキー、または全件パージ、ソフトパージとハードパージ |
| サービス管理 | service-management.md | サービス、バージョン、ドメイン、設定の作成/管理、複製・変更・有効化のワークフロー |
| VCL サービス | vcl-services.md | VCL によるサイト動作のカスタマイズ — カスタム VCL の作成/アップロード、スニペット、条件、ヘッダー、エッジ辞書、またはキャッシュ/gzip 設定の構成 |
| Compute | compute.md | Compute によるエッジロジックの実装 — パッケージのデプロイ、設定/KV/シークレットストアの管理、キャッシュ API の使用 |
| 可観測性 | observability.md | メトリクスプラットフォームの TTFB パーセンタイル、アラート定義と履歴、ログエクスプローラーのクエリ |
| 負荷分散 | load-balancing.md | オリジン間のトラフィック分散 — バックエンド、ディレクター、プール、またはヘルスチェックの設定、バックエンドとプールの選択 |
| ACL | acls.md | IP によるアクセス制限 — VCL ACL、Compute ACL、または IP ブロックリストの管理、アクセス制御エントリーの追加/削除 |
| NGWAF | ngwaf.md | ウェブ攻撃からの保護 — Next-Gen WAF、キャッシュ後のボット管理、ルール、シグナル、攻撃の監視、または Signal Sciences の統合の設定 |
| アカウント管理 | account-management.md | ユーザー、IAM ロール、API トークン、自動化トークン、請求、または招待の管理 |
| ドメインとネットワーク | domains-and-networking.md | Fastly へのトラフィックのルーティング — ドメイン、DNS ゾーン、ドメイン検証、またはその他のサービスプラットフォームのネットワーク機能の管理 |
| ロギング | logging.md | 外部システムへのログ送信 — 25 以上のプロバイダー(S3、Splunk、Datadog、BigQuery など)向けロギングエンドポイントの設定 |
| 製品 | products.md | API による Fastly 製品の有効化/無効化 — 共通のパターンと製品スラッグのカタログ |
| API セキュリティ | api-security.md | ウェブトラフィックからの API 検出、API オペレーションとタグの管理 |
| クライアント側保護 | client-side-protection.md | 不正なサードパーティスクリプト(Magecart、フォームジャッキング、スキマー)からの保護 — ウェブページ上のスクリプトの監視、スクリプト認証の管理、CSP ポリシーの設定 |
| その他の機能 | other-features.md | Pubsub、ファンアウト/リアルタイムメッセージング、IP リスト、POP、HTTP/3、Image Optimizer、イベント、通知 |
| エッジフェーズの順序 | edge-phases.md | エッジでのリクエスト/レスポンスの順序の理解、機能間の相互作用のデバッグ |
| トラフィック数値はこの表には含まれていません。キャッシュヒット率、帯域幅、リクエスト数とステータスコード数、エラー率、リアルタイムのリクエストレート、オリジンのレイテンシ、ドメインごとのトラフィック、アカウント使用量、請求総額については、fastly-stats スキルを参照してください。 |
クイックスタート:シンプルなキャッシュプロキシ
最も一般的な作業は、オリジンをキャッシュする VCL サービスの設定です。Fastly の設定に手を加える前に、必ず fastly-cli スキルの services.md リファレンスにある「事前チェックリスト」に従って事前チェックを実行してください。最もよくあるエラーを防ぐためのチェックは次の 2 つです。
- 送信する予定の Host ヘッダーでオリジンが応答することを確認します:
curl -sI -H "Host: DESIRED_HOST" https://ORIGIN_ADDRESS/ - TLS 証明書の SAN を確認し、正しい
ssl-cert-hostname/ssl-sni-hostnameを特定します:echo | openssl s_client -connect ORIGIN:443 -servername ORIGIN 2>/dev/null | openssl x509 -noout -text | grep -A1 "Subject Alternative Name"
HTTPS 証明書の検証を正しく行えないものの、意図した Host を指定した HTTP で動作する場合は、HTTP バックエンドを使用するか、オリジンの証明書を修正してください。回避策としてバックエンド証明書の検証を無効にしてはいけません。
オリジンがすでに Cache-Control または Expires ヘッダーを送信している場合、カスタム VCL は不要です。Fastly はデフォルトでこれらを尊重します。キャッシュ動作を上書きまたは拡張する場合にのみ、VCL スニペットを追加してください。
手順を追ったワークフロー全体(サービスの作成、ドメインの追加、バックエンドの追加、有効化)は、fastly-cli スキルの services.md リファレンスにある「キャッシュプロキシの作成」を参照してください。
よく使う VCL レシピ
ガイダンスなしでは間違えやすい、コピーしてそのまま使えるパターンです。
Grace の検出
obj.ttl が意味を持つのは vcl_hit 内だけです。リクエストヘッダーを介してフラグを vcl_deliver に渡します。
sub vcl_hit {
if (obj.ttl <= 0s) {
set req.http.X-Grace = "true";
}
}
sub vcl_deliver {
if (req.http.X-Grace) {
set resp.http.X-Grace = "true";
}
}
Vary ヘッダーの追加
警告:vcl_deliver ではなく vcl_fetch で Vary を設定してください。 オブジェクトがキャッシュに格納されるときに Vary ヘッダーが存在している必要があります。そうすることで、キャッシュキーに Vary の対象が含まれます。vcl_deliver でのみ Vary を設定すると、キャッシュはレスポンスを区別できず、Vary フィールドに関係なく、すべてのユーザーに同じキャッシュ済みバリエーションが返されます。
set beresp.http.Vary = "Accept-Encoding" は絶対に使用しないでください。オリジンからの既存の Vary 値が上書きされ、他の下流キャッシュが機能しなくなります。
sub vcl_fetch {
if (!beresp.http.Vary) {
set beresp.http.Vary = "Accept-Encoding";
} else if (beresp.http.Vary !~ "Accept-Encoding") {
set beresp.http.Vary = beresp.http.Vary ", Accept-Encoding";
}
}
エラーによるリダイレクト
VCL に return(redirect) はありません。代わりに合成エラーの仕組みを使用してください。
sub vcl_recv {
if (req.url ~ "^/old-path") {
error 801 "https://example.com/new-path";
}
}
sub vcl_error {
if (obj.status == 801) {
set obj.status = 301;
set obj.http.Location = obj.response;
synthetic {""};
return(deliver);
}
}
キャッシュステータスヘッダー
キャッシュヒットの検出には、vcl_deliver 内の obj.hits > 0 を使用してください。これが唯一信頼できる方法です。自動生成される resp.http.X-Cache や、その他のヘッダーの検査に頼らないでください。vcl_recv からリクエストヘッダーを介して PASS 状態を渡します。
sub vcl_recv {
if (req.url ~ "^/api/") {
set req.http.X-Pass = "true";
return(pass);
}
}
sub vcl_deliver {
if (req.http.X-Pass) {
set resp.http.X-Cache = "PASS";
} else if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
subfield() による Cookie の解析
Cookie ~ "name=(\w+)" のような正規表現は信頼できません。似たプレフィックスを持つ Cookie に誤って一致します。たとえば、Cookie ヘッダーが name_v2=X の場合、name が name_v2 の部分文字列として含まれているため、正規表現 "name=(\w+)" も一致してしまいます。代わりに subfield() を使用してください。適切な区切り文字の処理を行い、キーを正確に照合します。
set req.http.X-My-Cookie = subfield(req.http.Cookie, "name", ";");
検索用の VCL テーブル
長い if/else チェーンの代わりに、O(1) の検索には table + table.contains() + table.lookup() を使用してください。
table redirects {
"/old": "/new",
"/blog": "/articles",
}
sub vcl_recv {
if (table.contains(redirects, req.url)) {
error 801 table.lookup(redirects, req.url);
}
}
よくある間違い
beresp.*が使用できるのはvcl_fetch内だけであり、vcl_deliverでは使用できません。req.requestは非推奨です。req.methodを使用してください。- Fastly VCL に
return(purge)はありません。return(pass)を使用し、vcl_miss/vcl_hit内で確認してください。 set beresp.ttl = 86400は型エラーです。sの接尾辞が必要です:86400s。synthetic "text"には長い文字列の構文が必要です:synthetic {"text"}。beresp.ttl = 0sでも(0 秒間)オブジェクトはキャッシュされます。キャッシュを確実に防ぐには、set beresp.cacheable = false;を使用してください。
ドキュメントの取得
まずローカルのリファレンスファイルを参照してください。不足している情報を補うには、Accept: text/markdown を指定して最新のドキュメントを取得してください。これは www.fastly.com/documentation/ と docs.fastly.com のすべての URL で機能します。ページは https://www.fastly.com/documentation/llms.txt から見つけられます。URL パターンとドキュメントのカテゴリについては、docs-navigation.md を参照してください。