ハイブリッド実装向け CDN API

段階的なヘッドレスロールアウトは、Storefront Reference Architecture (SFRA) やコンポーザブルストアフロントなどの複数のストアフロントの技術を使用して、単一の買い物体験を提供する手法です。

eCDN の有無に応じたハイブリッドアプリケーションのトラフィックルーティング 

埋め込み CDN (eCDN) は、Production (本番) や Staging (ステージング) などのプライマリインスタンスグループ (PIG) 環境で使用でき、SFRA と Managed Runtime (MRT) の両方に同時にトラフィックをルーティングできるため、コンポーザブルストアフロントを段階的にロールアウトできます。On-Demand Sandbox (ODS) やローカル開発サーバーなどのセカンダリインスタンスグループ (SIG) 環境では、eCDN は使用できません。この場合は、ハイブリッドプロキシを使用してトラフィックを SFRA にルーティングします。

SIG インスタンスのリクエストとレスポンスのハイブリッドアプリケーションシーケンス

eCDN を使用しない SIG インスタンスのトラフィックルーティング 

ODS やローカル開発サーバーなどの SIG インスタンスでは、PWA Kit v3.14.0 以降の pwa-kit-runtime パッケージでハイブリッドプロキシ機能を有効にすることで、PWA Kit と SFRA または SiteGenesis を使用するハイブリッド買い物客アプリを開発およびテストできます。

詳細については、ハイブリッド認証手順 2: ローカルでのハイブリッド設定 (SIG インスタンス) を参照してください。

eCDN を使用する PIG インスタンスのトラフィックルーティング 

PIG インスタンスでは、eCDN ゾーンでトラフィックを SFRA と MRT の両方に同時にルーティングできるため、コンポーザブルストアフロントを段階的にロールアウトできます。

この図は、eCDN が PIG インスタンスのハイブリッドアプリケーションの受信ページリクエストをルーティングする際の、リクエストとレスポンスのシーケンスを示しています。リクエストが MRT ルールに一致する場合は、MRT に転送されます。一方、MRT ルールに一致しない場合は、B2C Commerce インスタンスに送信され、その後レスポンスが返されます。

SIG インスタンスのリクエストとレスポンスのハイブリッドアプリケーションシーケンス

このガイドでは、Commerce API CDN ゾーンを使用してトラフィックを Managed Runtime にルーティングする方法について説明します。また、Business Manager を使用してトラフィックを Managed Runtime にルーティングすることもできます。Business Manager での MRT ルーティングルールの構成を参照してください。

このガイドのコマンドを実行する前に、プレースホルダーを実際の値に置き換えてください。プレースホルダーは、$PLACEHOLDER のような形式で記載されています。

このガイド全体を通して、例として使用するストアフロントの本番 URL は https://www.example.com です。

このページ内のリンクには、既存のお客様のみがアクセスできるものがあります。Commerce Cloud リポジトリにアクセスする方法については Salesforce Commerce Cloud GitHub リポジトリとアクセスを参照してください。

Tip

前提条件 

  1. Admin API の認可についてよく理解しておきます。
  2. sfcc.cdn-zones.rw スコープをもつ Account Manager API クライアントが必要です。
  3. Managed Runtime で使用する eCDN ゾーンのゾーン ID を把握しておく必要があります。この情報を取得するには、CDN Zones API の getZonesInfo エンドポイントを使用します。
  4. updateSecuritySettings を使用して、ゾーンで alwaysUseHttps を有効にします。Managed Runtime は HTTPS 経由のトラフィックのみをサポートします。
  5. SLAS API クライアントの redirect_uri にゾーンを含めるように設定します。
  6. Managed Runtime 環境へのアクセスを許可する IP のセットを制限している場合は、eCDN によって使用される CloudFlare IP を、許可される IP のセットに追加します。

Managed Runtime へのトラフィックのルーティング 

createMrtRules エンドポイントを使用すると、トラフィックを Managed Runtime 環境にルーティングするルールを作成できます。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules" \
2  --header "Authorization: Bearer $TOKEN" \
3  --header 'Content-Type: application/json' \
4  --data '{
5    "mrtHostname": "example-production.mobify-storefront.com",
6    "expressions": [
7      "http.host eq \"www.example.com\" and http.request.uri.path matches \"^/products\""
8    ]
9  }'

リクエストボディで指定するデータを調べてみましょう。

mrtHostname の値は、トラフィックルーティング先となる Managed Runtime 環境のドメインです。この値は、mobify-storefront.com ドメインまたは exp-delivery.com ドメインでホストされている Managed Runtime 環境を参照している必要があります。指定した値が既存のルールですでに使用されている場合、リクエストは失敗します。

サポートされるルーティング先は Managed Runtime のみです。

Note

expressions の値は、どのリクエストが Managed Runtime にルーティングされるかを制御する Cloudflare ルール式の配列です。ほとんどの実装において、単一のルーティング式で十分です。

指定した式に加え、次のデフォルトのルーティングルールが使用されます。

1(
2  http.request.uri.path matches "^/callback.*" or
3  http.request.uri.path matches "^/mobify.*" or
4  http.request.uri.path matches "^/worker\.js.*"
5)

ルーティングの変更はすぐに適用され、式に一致する URL に移動すると、 Managed Runtime から取得されたコンテンツが返されます。

ルーティングのシナリオ 

  • 次のルーティングシナリオがサポートされています。

    • 1 つのホスト名を 1 つの MRT 環境にマッピングするシナリオ:

      • 例: http.host eq \"www.example.com\"example-production.mobify-storefront.com
    • 複数のホスト名を 1 つの MRT 環境にマッピングするシナリオ:

      • 例: http.host in {\"www.example.com\" \"prod.example.com\" \"us.example.com\"}example-production.mobify-storefront.com
  • 次のルーティングシナリオは、現在サポートされていません

    • 異なるパスに基づいて、1 つのホスト名を複数の MRT 環境にマッピングするシナリオ

式の制約 

次の基準に基づいて式が検証されます。

  • http.host は、一度だけ出現し、その後に eq 演算子または in 演算子が続く必要があります。使用例については、前述の例を参照してください。
  • ホスト名はゾーンと一致する必要があります。つまり、eCDN ゾーンには、指定したホスト名を対象とする有効な証明書が設定されている必要があります。
  • 次のフィールドがサポートされています。
    • http.host
    • http.request.uri.path
    • http.request.uri
    • http.cookie
  • 1 つの式の長さは最大 3072 文字です。
  • 1 つのゾーンに関連付けられる式は最大 300 個です。

ルーティング構成の変更 

段階的なロールアウトを続行すると、より多くのリクエストを Managed Runtime にルーティングできます。

ルーティング式を変更するには、getMrtRules を使用して、更新する式に関連付けられているルールセットとルールの ID を取得します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules" \
2--header "Authorization: Bearer $TOKEN"

次に、updateMrtRule を使用して式を更新します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules/$RULESET/rules/$RULE" \
2--request 'PATCH' \
3--header "Authorization: Bearer $TOKEN" \
4--header 'Content-Type: application/json' \
5--data '{
6    "expression": "http.host eq \"www.example.com\" and (http.request.uri.path matches \"^/products\" or http.request.uri.path matches \"^/categories\")"
7  }'

ルーティング構成の追加 

既存の Managed Runtime 環境にルーティングルールを追加するには、updateMrtRuleset を使用して、mrtHostname および追加のルーティング式を指定します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules" \
2  --request 'PATCH' \
3  --header "Authorization: Bearer $TOKEN" \
4  --header 'Content-Type: application/json' \
5  --data '{
6    "mrtHostname": "example-production.mobify-storefront.com",
7    "expressions": ["http.host eq \"www.example.com\" and http.request.uri.path matches \"^/home\""]
8  }'

新しい Managed Runtime のルーティングルールを追加するには、createMrtRules エンドポイントを使用し、新しい mrtHostname 値を指定します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules" \
2--header "Authorization: Bearer $TOKEN" \
3--header 'Content-Type: application/json' \
4--data '{
5    "mrtHostname": "example-development.mobify-storefront.com",
6    "expressions": [
7      "http.host eq \"dev.example.com\" and http.request.uri.path matches \"^/products\""
8    ]
9  }'

Managed Runtime 環境の変更 

既存のルールを更新して別の Managed Runtime 環境にルーティングするには、updateMrtRuleset を使用して、oldMrtHostname と、新しいルーティング先であるmrtHostname を指定します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules" \
2  --request 'PATCH' \
3  --header "Authorization: Bearer $TOKEN" \
4  --header 'Content-Type: application/json' \
5  --data '{
6    "oldMrtHostname": "example-old.mobify-storefront.com",
7    "mrtHostname": "example-new.mobify-storefront.com"
8  }'

ルーティングの無効化 

サードパーティの CDN に切り替える場合、または eCDN から MRT への特定のパスをルーティングする必要がなくなった場合は、ルーティングを無効にすることができます。

ルーティングを無効にするには、getMrtRules を使用して、削除する構成の ID を取得します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules" \
2--header "Authorization: Bearer $TOKEN"

次に、Managed Runtime のルーティングルールを削除するには、deleteMrtRule を使用して、getMrtRules で返された該当の ID を指定します。

1curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules/$RULESET/rules/$RULE" \
2--request 'DELETE' \
3--header "Authorization: Bearer $TOKEN"

すべての Managed Runtime ルーティングルールを削除する場合は、deleteMrtRuleset を使用します。

1`curl "https://$CODE.api.commercecloud.salesforce.com/cdn/zones/v1/organizations/$ORG/zones/$ZONE/mrtrules/$RULESET" \`
2--request 'DELETE' \
3--header "Authorization: Bearer $TOKEN"

Managed Runtime へのすべてのトラフィックのルーティング 

段階的ロールアウトを完了する場合、または新しいサイトを立ち上げる場合は、単一の式を使用してゾーンのすべてのトラフィックを Managed Runtime にルーティングできます。

1http.host eq \"www.example.com\"

その他の参照項目: