Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Pool sets

最終更新 Markdown で表示Agent セットアップ

pool set(場所ごとのプール集合)を使うと、地理的ステアリングとほかのトラフィックステアリングポリシーを組み合わせられます。たとえば、特定のリージョンや国の中で Dynamic Latency ステアリングを適用できます。API で管理するロードバランサーでは、pool set で Geo steering を置き換えられます。

pool set では次ができます。

  • 1 つの場所の中で、サポートされている任意のステアリングポリシーを適用する
  • その場所にだけ適用するプールの重みを設定する
  • グローバルのフォールバックプールではなく、その場所用のフォールバックプールを割り当てる
  • 一致したプロキシトラフィックに対して固定の HTTP レスポンスを返す

pool set の評価方法

pool set はロードバランサー上の順序付き配列として保存されます。Cloudflare は配列の順に評価し、match が成功した最初の pool set で止めます。その pool set が、リクエスト用のプール、ステアリングポリシー、重み、フォールバックプールを提供します。

1 つのデータセンターに一致する pool set が、リージョンに一致する pool set より自動的に優先されることはありません。配列は、より具体的なものからより広いものの順に並べてください。

match.defaulttrue にして、デフォルトの pool set を最後に置きます。default マッチはすべてのリクエストに適用されます。pool set は先勝ちなので、この pool set が、それより前の pool set に一致しなかったリクエストを処理します。

{
	"pool_sets": [
		{
			"name": "sjc-only",
			"match": { "topology": { "pops": ["SJC"] } },
			"overrides": { "pools": ["17b5962d775c646f3f9725cbc7a53df4"] }
		},
		{
			"name": "default",
			"match": { "default": true },
			"overrides": { "pools": ["ff02c959d17f7bb2b1184a202e3c0af7"] }
		}
	]
}

disabledtrue の pool set はスキップされます。

マッチ条件

match オブジェクトは、どのリクエストに pool set を適用するかを決めます。default または topology のいずれかを設定します。2 つを組み合わせることはできません。match がまったくない pool set は、すべてのリクエストに適用されます。

フィールド 説明
default true のとき、すべてのリクエストに一致します。topology と組み合わせることはできません。
topology 場所で一致します。popscountriesregions のうち少なくとも 1 つが必要です。

トポロジーマッチング

topology 内の各フィールドは、場所コードのリストを受け取ります。

フィールド
pops Cloudflare データセンターコード。リクエストを処理しているデータセンターと照合します
countries ISO 3166-1 alpha-2 の国コード
regions Cloudflare の リージョンコード。例: WNAM

同一フィールド内のエントリは OR で結合されます。ドイツからのリクエストは "countries": ["FR", "DE", "GB"] に一致します。

たとえば、このトポロジーは 3 つのフィールドすべてに複数の値を設定しています。

{
	"match": {
		"topology": {
			"pops": ["SJC", "IAD"],
			"countries": ["US", "CA"],
			"regions": ["WNAM", "ENAM"]
		}
	}
}

リクエストが一致するのは、データセンターが SJC または IAD であり、国が US または CA であり、かつ リージョン階層に WNAM または ENAM が含まれる場合です。

その AND の動作を意図する場合以外は、topology あたりフィールドは 1 つにしてください。

regions のエントリは、リクエストのリージョン階層のどこかに現れれば一致します。そのため、より広いリージョンコードが、より狭いリージョンからのリクエストにも一致することがあります。

国のマッチングには、リクエストに対して解決された場所を使います。クライアントの場所を解決できない場合、国のマッチングはリクエストを処理している Cloudflare データセンターの国にフォールバックします。

オーバーライド

overrides オブジェクトは、一致時に適用するルーティング動作を持ちます。各フィールドは任意ですが、fixed_response のない pool set は overrides.pools を設定する必要があります。

フィールド 説明
pools ルーティング先のプール ID です。このリクエストではロードバランサーのプール選択を完全に置き換えます。
pool_weights この pool set 内でのみ適用される、プールごとの重みです
pool_default_weight pool_weights にエントリがない pools 内のプールに使う重みです
fallback_pool この pool set の最終手段となるプールです。省略すると、ロードバランサーのフォールバックプールを使います。
steering_policy pools に適用するステアリングポリシーです

pools は、場所からプールへのマップではなく、フラットなリストです。一致した pool set が、そのリクエストの候補プール一式を定義します。

pool set 内のステアリングポリシー

pool set 内では、次のステアリングポリシーをサポートします。

ポリシー pool set 内での動作
off pools をフェイルオーバー順に使う
random pool_weights を尊重してプールをランダムに選ぶ
dynamic_latency ラウンドトリップ時間が最も短いプールを選ぶ
proximity 緯度と経度でリクエストに最も近いプールを選ぶ
least_outstanding_requests 重みと未完了リクエスト数でプールを選ぶ
least_connections 重みとオープン接続数でプールを選ぶ

pool_weightspool_default_weightrandomleast_outstanding_requestsleast_connections に適用されます。これらの重みはロードバランサーの random_steering の重みとは別なので、各 pool set は独立してプールに重みを付けられます。

steering_policy を省略すると、pool set はフェイルオーバー順を使います。

固定レスポンス

プロキシされたゾーンのロードバランサーでは、pool set が overrides.pools の代わりに fixed_response を返せます。一致した場所に対して HTTP ステータスやリダイレクトを返すときに使います。

{
	"pool_sets": [
		{
			"name": "redirect-region",
			"match": { "topology": { "countries": ["US"] } },
			"fixed_response": {
				"status_code": 302,
				"location": "https://example.com/service-unavailable"
			}
		}
	]
}

DNS only のロードバランサーでは fixed_response を使わないでください。DNS レスポンスは HTTP ステータス、本文、リダイレクトフィールドを運べません。固定レスポンスが一致すると、レコードなしの NOERROR が返ります。

pool set は overrides.pools または fixed_response のいずれかを指定する必要があります。どちらもない pool set は拒否されます。トラフィックに一致したあと、送り先がなくなるためです。

ほかのステアリング設定との関係

pool set は標準のステアリングフィールドから独立しています。pool set を追加しても default_poolsregion_poolscountry_poolspop_poolssteering_policyrandom_steeringfallback_pool の読み取りや書き込みは行いません。これらのフィールドを設定しても pool set は作られません。

一致した pool set がそのリクエストのプール選択を置き換えるため、標準フィールドは pool set が一致したリクエストには効きません。どの pool set にも一致しないリクエストは、標準のステアリング設定にフォールスルーします。

すべてのリクエストが pool set に一致する想定でも、すべてのロードバランサーで default_pools は必須です。どの pool set にも一致しないリクエストの宛先になります。

カスタムルール

pool set は カスタムルール より先に評価されます。一致した pool set がルーティング判断を確立し、そのうえでカスタムルールがオーバーライドを適用します。

fixed_response を返す pool set はそのレスポンスで完結するため、そのリクエストではカスタムルールは評価されません。

DNS only のロードバランサー

国のマッチングは、トップレベルのステアリングポリシーと location_strategy に依存します。戦略を設定している場合、Geo と Proximity ステアリングは EDNS Client Subnet(ECS)、リゾルバーの IP アドレス、または応答する Cloudflare データセンターを使えます。戦略を設定していない場合、Proximity は利用可能なら ECS を使い、Geo は応答するデータセンターを使います。ほかのトップレベルポリシーは応答するデータセンターを使います。

pool set はマッチを評価したあとで overrides.steering_policy を適用します。そのため、オーバーライドで国のマッチングに使う場所を変えることはできません。詳細は EDNS Client Subnet(ECS)のサポート を参照してください。

制限

pool set には次の制限があります。

制限
ロードバランサーあたりの pool set 数 1,000
name の文字数 200
popscountriesregions の各リストのエントリ数 1,000

1 つの popscountriesregions リスト内の重複エントリは拒否されます。

API で pool set を設定する

pool set は Update Load Balancer エンドポイントの pool_sets フィールドで管理します。PATCH リクエストを送るときの動作は次のとおりです。

  • pool_sets を省略すると、既存の pool set は変わりません
  • "pool_sets": [] を送ると、すべての pool set を削除します
  • "pool_sets": null を送っても変更はありません

リクエスト例

この例を使う前に、参照するプールを作成してください。各例のプール ID は、アカウント内の ID に置き換えてください。

このリクエストは、西北米のトラフィックを重みで 2 つのプールに分割し、リージョン用のフォールバックプールを使います。ドイツのトラフィックには、レイテンシが最も低いプールを選びます。残りのトラフィックはデフォルトの pool set が処理します。ロードバランサーは別のグローバルフォールバックプールを使います。

/zones/{zone_id}/load_balancers/{load_balancer_id} へ、次の本文で PATCH リクエストを送ります。

Requestjson
{
	"fallback_pool": "6f1ed002ab5595859014ebf0951522d9",
	"pool_sets": [
		{
			"name": "wnam-active-active",
			"match": { "topology": { "regions": ["WNAM"] } },
			"overrides": {
				"pools": [
					"17b5962d775c646f3f9725cbc7a53df4",
					"9290f38c5d07c2e2f4df57b1f61d4196"
				],
				"pool_weights": {
					"17b5962d775c646f3f9725cbc7a53df4": 0.5,
					"9290f38c5d07c2e2f4df57b1f61d4196": 0.5
				},
				"steering_policy": "random",
				"fallback_pool": "2a28d35d1c00f000540fe739a04b3230"
			}
		},
		{
			"name": "de-lowest-latency",
			"match": { "topology": { "countries": ["DE"] } },
			"overrides": {
				"pools": [
					"0930eec54a4c7ae6616985b79f678210",
					"c8b4f5a6d7e84910a2b3c4d5e6f70819"
				],
				"steering_policy": "dynamic_latency"
			}
		},
		{
			"name": "default",
			"match": { "default": true },
			"overrides": {
				"pools": ["ff02c959d17f7bb2b1184a202e3c0af7"],
				"steering_policy": "off"
			}
		}
	]
}

結果の動作

リクエスト完了後、ロードバランサーはこの設定でトラフィックをルーティングします。

順序 マッチ プール ステアリングポリシー フォールバックプール
1 西北米(WNAM 17b5962d775c646f3f9725cbc7a53df49290f38c5d07c2e2f4df57b1f61d4196 ランダム、各 50% 2a28d35d1c00f000540fe739a04b3230
2 ドイツ(DE 0930eec54a4c7ae6616985b79f678210c8b4f5a6d7e84910a2b3c4d5e6f70819 Dynamic Latency グローバルフォールバック
3 残りのすべてのトラフィック ff02c959d17f7bb2b1184a202e3c0af7 フェイルオーバー順 グローバルフォールバック

グローバルフォールバックプールは 6f1ed002ab5595859014ebf0951522d9 です。

検証エラー

無効な pool set 設定は HTTP ステータス 400 と API エラーコード 1002 を返します。エラーメッセージが問題を説明し、次のいずれかの識別子を含むことがあります。

メッセージ識別子 原因
POOL_SETS_TOO_LARGE 1 つのロードバランサーに 1,000 を超える pool set がある
POOL_SET_NO_INTENT pool set が overrides.poolsfixed_response も指定していない
POOL_SET_DEFAULT_WITH_MATCH matchdefaulttopology を組み合わせている
POOL_SET_EMPTY_TOPOLOGY topologypopscountriesregions のいずれも設定していない
POOL_SET_TOPOLOGY_TOO_LARGE topology のリストが 1,000 エントリを超えている
POOL_SET_POP_ENTITLEMENT アカウントにデータセンターステアリングの資格がない
POOL_SET_REGION_ENTITLEMENT アカウントにリージョンステアリングの資格がない
POOL_SET_COUNTRY_ENTITLEMENT アカウントに国ステアリングの資格がない

役に立ちましたか?