AEM Edge Functionsでのキャッシュ edge-functions-caching
このページでは、AEM Edge Functions内でのキャッシュの仕組みに関する詳細な技術的ガイダンスを提供します。これには、2 キャッシュアーキテクチャ、コード内のキャッシュ動作の制御方法、コンテンツが変更されたときにキャッシュエントリをパージする方法などが含まれます。
AEM as a Cloud Service キャッシュの仕組みについて一般的な背景については、AEM as a Cloud Serviceでのキャッシュ およびAEM as a Cloud ServiceでのCDNを参照してください。 コードの例については、AEM Edge Functions Boilerplate — Cachingを参照してください。
アーキテクチャのキャッシュ architecture
AEM Edge関数は、CDNと、関数が取得するバックエンドサービスの間に配置されます。 これらのバックエンドには、AEMパブリッシュインスタンス、サードパーティ API、外部データベース、またはコード呼び出しを行う任意のHTTP エンドポイントを使用できます。 リクエストフローには 2つの個別のキャッシュ があり、それぞれ独立して動作します。
Browser → AEM CDN (CDN Cache) → AEM Edge Functions (Fetch Cache) → Backend (AEM, APIs, etc.)
Cache-Control、Surrogate-Control、Surrogate-Key)fetch()呼び出しに対するバックエンド応答、およびCore Cache API経由で保存されたデータCacheOverride、またはCore Cache API経由のプログラマティック サロゲートキーaio aem edge-functions purge-cache CLI コマンドまたはpurgeSurrogateKey()各キャッシュには異なるスコープ、異なるコントロール、異なるパージ メカニズムがあるため、この2層アーキテクチャを理解することは不可欠です。 効果的なキャッシュを実現するには、両方のレベルで慎重に設定する必要があります。
CDN キャッシュ (外部) cdn-cache
CDN キャッシュは、ブラウザーとEdge機能の間にあります。 Edge関数の response をキャッシュします。 Edge関数のレスポンスに標準のHTTP キャッシュヘッダーを設定することで、その動作を制御できます。
return new Response(body, {
headers: {
'Surrogate-Key': 'page-home product-123',
'Cache-Control': 'public, max-age=3600'
}
});
複数のサロゲートキーは、スペースで区切られます。 これらのサロゲート キーを使用して、CDN キャッシュ パージ APIを使用してCDN キャッシュをパージできます。 サロゲートキーのパージの概念は、 リソースのグループのキャッシュをパージ で説明したものと同じです。主な違いは、ここでのCDN サロゲートキーがバックエンドではなくEdge機能コードによって設定されることです。
Edge関数の取得キャッシュ(内部) fetch-cache
Edge関数の取得キャッシュは、Edge関数と呼び出すバックエンドの間にあります。 Edge関数コード内で行われた バックエンドの応答 からfetch()呼び出しをキャッシュします。 また、Core Cache APIまたは Simple Cache API を介してコードに格納されているデータも保持します。プログラムによるキャッシュ インターフェイスを使用すると、キャッシュされる内容、時間、サロゲート キーの下を詳細に制御できます。
これは、Edge関数の送信レスポンスに設定したヘッダーの影響を受ける影響を受けません。バックエンドのレスポンス ヘッダー、フェッチ呼び出しのCacheOverride オプション、またはCore Cache APIへの書き込み時にプログラムで割り当てたサロゲート キーによってのみ影響を受けます。
Surrogate-Key ヘッダーは、この内部キャッシュではなく、外部CDN キャッシュを制御します。 内部キャッシュのサロゲート キーは、バックエンドのSurrogate-Key応答ヘッダーから取得するか、Core Cache APIへの書き込み時に割り当てたキーから取得します。バックエンドの回答のキャッシュ cache-override
特定の期間のバックエンド応答をキャッシュするには:
import { CacheOverride } from "fastly:cache-override";
const response = await fetch(request, {
backend: "my-origin",
cacheOverride: new CacheOverride({ ttl: 300 })
});
キャッシュのバイパス cache-pass
フェッチ キャッシュを完全にバイパスし、常にバックエンドからフェッチするには、pass モードを使用します。
import { CacheOverride } from "fastly:cache-override";
const response = await fetch(request, {
backend: "my-origin",
cacheOverride: new CacheOverride({ mode: "pass" })
});
キャッシュの消去 cache-purging
キャッシュされたコンテンツが古くなったら、明示的にパージする必要があります。 2つのキャッシュは独立して動作するため、無効化しているレイヤーとその相互作用を理解することが重要です。
両方のレイヤー間でパージを調整する coordinating-purges
Edge関数はバックエンドとしてCDNの背後に配置されているため( オリジン セレクターを介して到達できます)、一方のキャッシュ レイヤーを他方なしでパージすると、予期しない結果が生じる可能性があります。
- CDN キャッシュのみをパージすると、次のリクエストでEdge関数が呼び出されます。 Edge関数のフェッチキャッシュに古いデータが保持されている場合は、古いコンテンツが返されます。CDNは再びキャッシュします。
- Edge関数キャッシュのみをパージすると、内部状態はクリアされますが、CDNは、有効期限が切れるか、個別にパージされるまで、以前にキャッシュされたコピーを引き続き提供します。
ベストプラクティス:基礎となるデータが変更された場合、両方 キャッシュをパージ – 外側のレイヤーにはCDN キャッシュパージ APIを、内側のEdge関数レイヤーにはpurge-cache (またはpurgeSurrogateKey())を使用します。 両方のレイヤーで一貫したサロゲートキーを使用すると、調整された無効化が簡単になります。 このパターンの完全な例については、AEM Edge Functions Boilerplate — Purgingを参照してください。
CDN キャッシュのパージ purge-cdn-cache
外部CDN キャッシュ (CDN レイヤーにキャッシュされたEdge関数のレスポンス)をパージするには、CDN キャッシュパージ APIを使用します。 これは、CDNにキャッシュされているすべてのAEM as a Cloud Service コンテンツに対して使用されるものと同じパージ メカニズムです。ステップバイステップのガイダンスについては、CDN キャッシュをパージする方法を参照してください。
AEM as a Cloud Service アーキテクチャでは、Edge Functionsは オリジンセレクターを介してCDNからトラフィックを受け取ります(CDN ルーティング も参照)。 完全なリクエストフローは次のとおりです。
Client → AEM CDN (VCL) → Origin Selector → Edge Function → Backend
CDNは、Edge関数から返された最終応答をキャッシュします。 CDNのパージでは、外部キャッシュされたレスポンスがonly クリアされます。これは、Edge関数の内部キャッシュには影響しません。
Edge関数の取得キャッシュのパージ purge-fetch-cache
purge-cache CLI コマンドは、Edge関数のフェッチ キャッシュ (Edge関数内にキャッシュされたバックエンド応答)をパージします。 外部CDN キャッシュをnot パージします。 完全なCLI オプションとフラグについては、purge-cache コマンド リファレンス を参照してください。
サロゲート キーの由来 surrogate-key-origin
パージ コマンドで使用されるサロゲート キーは、キャッシュされたコンテンツに保存された時点でタグ付けされていたキーと一致する必要があります。 これは、AEM CDNで使用される サロゲート キーベースのパージ と同じ概念ですが、Edge関数の内部キャッシュに適用されます。 これらのキーは次の場所から取得されます。
- Edge関数がバックエンドから取得したときにバックエンドが返す
Surrogate-Key応答ヘッダー。 - Core Cache APIへの書き込み時にプログラムで割り当てるキー(キャッシュエントリの挿入時に
surrogateKeysオプションを使用するなど)。
例えば、バックエンドが次のように応答する場合:
HTTP/1.1 200 OK
Content-Type: text/html
Surrogate-Key: page-about product-456 category-shoes
Cache-Control: public, max-age=3600
次に、キャッシュされた応答に、3つのサロゲートキー(page-about、product-456、およびcategory-shoes)がタグ付けされます。 後で、これらのキーのいずれかを使用してパージできます。
# Purge all cached content tagged with "product-456"
aio aem edge-functions purge-cache <function-name> --surrogateKey product-456
# Purge multiple keys at once
aio aem edge-functions purge-cache <function-name> -k page-about -k category-shoes
page-about)、コンテンツ ID (product-456)、コンテンツタイプ (category-shoes)など)。 これにより、コンテンツの変更時に、ターゲットキャッシュの無効化を直感的に行うことができます。すべて消去 purge-all
# Purge all cached content (use with caution)
aio aem edge-functions purge-cache <function-name> --all
ソフトパージ soft-purge
--soft フラグを使用してソフトパージを実行します。ソフトパージでは、古いエントリがキャッシュに保持され、古い再検証を有効にしながらバックエンドの負荷が軽減されます。
aio aem edge-functions purge-cache <function-name> --surrogateKey product-456 --soft
プログラムによるパージ programmatic-purge
また、purgeSurrogateKeyを使用して、Edge関数コード内からプログラムでサロゲートキーをパージすることもできます。
import { purgeSurrogateKey } from "fastly:compute";
// Hard purge (immediate removal)
purgeSurrogateKey("product-456");
// Soft purge (retain stale entries for revalidation)
purgeSurrogateKey("product-456", true);
--all フラグを慎重に使用し、可能な場合はターゲットを絞ったサロゲート キーのパージを優先します。