トラフィック管理ステアリング・ポリシーAPIガイド
Oracle Cloud Infrastructure DNS REST APIを使用して、トラフィック管理ポリシーを構築および構成します。
DNS REST APIを使用してポリシーを構築する方法について説明します。
認証と認可
Oracle Cloud Infrastructureの各サービスは、すべてのインタフェース(コンソール、SDKまたはCLI、およびREST API)の認証および認可のためにIAMと統合されています。
組織の管理者は、どのユーザーがどのサービスとリソースにアクセスできるか、およびアクセスのタイプを制御する、グループ、コンパートメントおよびポリシーを設定する必要があります。たとえば、ポリシーは、新規ユーザーの作成、クラウド・ネットワークの作成と管理、インスタンスの起動、バケットの作成、オブジェクトのダウンロードなどを実行できるユーザーを制御します。詳細は、ポリシーの開始を参照してください。異なる各サービスに対するポリシーの記述の詳細は、ポリシー・リファレンスを参照してください。
会社が所有するOracle Cloud Infrastructureリソースを使用する必要がある通常のユーザー(管理者ではない)の場合は、ユーザーIDを設定するよう管理者に連絡してください。管理者は、使用する必要があるコンパートメントを確認できます。
トラフィック管理ステアリング・ポリシー・コンポーネント
次のリストでは、トラフィック管理ステアリング・ポリシーの構築に使用されるコンポーネントについて説明します。
- ステアリング・ポリシー
- ゾーンに対するトラフィック管理動作を定義するためのフレームワーク全体。ステアリング・ポリシーには、DNS回答のインテリジェント機能に役立つルールが含まれます。
- アタッチメント
- ステアリング・ポリシーをゾーンにリンクできます。ステアリング・ポリシーのゾーンへのアタッチメントでは、対象レコード・タイプのドメインのすべてのレコードが遮断され、DNSレスポンスはそうしたドメインのレコードではなく、ステアリング・ポリシーから作成されます。ドメインには、特定のレコード・タイプをカバーするアタッチメントを1つのみ指定できます。
- ルール
- リクエストのジオロケーションやエンドポイントのヘルスなど、DNSリクエストのプロパティに基づいて回答をフィルタするためにステアリング・ポリシーが使用するガイドライン。
- 回答
- 回答には、ステアリング・ポリシーで処理されるDNSレコード・データとメタデータが含まれます。
- テンプレート
- テンプレートは、ポリシー・タイプとその意図した動作を作成する事前定義済のルール・シーケンスです。例:
FAILOVER
テンプレートは、最初にFILTER
ルールに対してDNS問合せを確認し、次に連続してHEALTH
、PRIORITY
およびLIMIT
ルールを確認することによって回答を提供します。これにより、ドメインに動的フェイルオーバー機能が与えられます。CUSTOM
以外のポリシーでtemplate
フィールドを定義するポリシーは、そのポリシー・タイプについて概説されているルール順序に従う必要があります。そうしないと、ポリシーの作成時に400
ステータス・コード・エラーが返されます。 - ケース
- ルールには、特定のDNS問合せに対する処理中にその動作を実行する方法に関する代替構成を定義する一連のケースをオプションで含めることができます。ルールにケースのシーケンスがない場合は、常に処理中に同じ構成で評価されます。ルールのケース・シーケンスが空の場合は、常に処理中に無視されます。ルールに空でないシーケンスのケースがある場合、処理中のその動作は、シーケンス内の最初の一致ケースによって構成されます。
caseCondition
のないルール・ケースは常に一致します。caseCondition
を含むルール・ケースが一致するのは、その式が特定の問合せに対してtrueと評価された場合のみです。
テンプレートを使用したステアリング・ポリシーの作成
次の項では、ステアリング・ポリシー・テンプレートの各タイプのルール構成を説明し、その後に各テンプレートの構成方法を示すPOSTリクエスト(CreateSteeringPolicy)の例を示します。
フェイルオーバー
回答をポリシーで提供する順序(たとえば、プライマリおよびセカンダリ)を優先するユーザー・フェイルオーバー・ポリシー。Oracle Cloud Infrastructure Health Checksのモニターやオンデマンド・プローブは、ポリシー内の回答の健全性を評価するために利用されます。プライマリの回答が異常であることが判明すると、DNSトラフィックは自動的にセカンダリ・アンサーに渡されます。FAILOVER
テンプレートを使用する際は、次の各ルールをリクエスト本文のrules
フィールドで指定された順序で定義する必要があります:
順 | ルール | 制限事項 | コメント |
---|---|---|---|
1
|
FILTER
|
|
|
2
|
HEALTH
|
|
healthCheckMonitorId がポリシーに対して定義されている場合のみ含まれます。 |
3
|
PRIORITY
|
|
|
4
|
LIMIT
|
|
FAILOVER
テンプレートを使用したPOST /steeringPolicies
ポリシーの例:
{
"compartmentId": "ocid1...",
"displayName": "failover between endpoints",
"ttl": 30,
"healthCheckMonitorId": "ocid1...",
"template": "FAILOVER",
"answers": [
{
"name": "server-primary",
"rtype": "A",
"rdata": "192.168.0.2",
"pool": "primary"
},
{
"name": "server-secondary",
"rtype": "A",
"rdata": "192.168.0.3",
"pool": "secondary"
}
],
"rules": [
{
"ruleType": "FILTER",
"defaultAnswerData": [
{
"answerCondition": "answer.isDisabled != true",
"shouldKeep": true
}
]
},
{
"ruleType": "HEALTH"
},
{
"ruleType": "PRIORITY",
"defaultAnswerData": [
{
"answerCondition": "answer.pool == 'primary'",
"value": 1
},
{
"answerCondition": "answer.pool == 'secondary'",
"value": 99
}
]
},
{
"ruleType": "LIMIT",
"defaultCount": 1
}
]
}
LOAD_BALANCE
ロード・バランサ・ポリシーは、多くのエンドポイント間でトラフィックを分散します。エンドポイントに等しい重みを割り当てて、エンドポイント間でトラフィックを均等に分散したり、比率ロード・バランシングにカスタムの重みを割り当てたりできます。Oracle Cloud Infrastructure Health Checksのモニターやオンデマンド・プローブは、エンドポイントのヘルスを評価するために利用されます。DNSトラフィックは、エンドポイントが異常であることが判明した場合、他のエンドポイントに自動的に分散されます。 LOAD_BALANCE
テンプレートを使用する際は、次の各ルールをリクエスト本文のrules
フィールドで指定された順序で定義する必要があります:
順 | ルール | 制限事項 | コメント |
---|---|---|---|
1
|
FILTER
|
|
|
2
|
HEALTH
|
|
healthCheckMonitorId がポリシーに対して定義されている場合のみ含まれます。 |
3
|
WEIGHTED
|
|
|
4
|
LIMIT
|
|
LOAD_BALANCE
テンプレートを使用したPOST /steeringPolicies
ポリシーの例:
{
"compartmentId": "ocid1...",
"displayName": "Weighted load balance for a set of answers with health checks",
"ttl": 30,
"healthCheckMonitorId": "ocid1...",
"template": "LOAD_BALANCE",
"answers": [
{
"name": "server1",
"rtype": "A",
"rdata": "192.168.0.2"
},
{
"name": "server2",
"rtype": "A",
"rdata": "192.168.0.3"
}
],
"rules": [
{
"ruleType": "FILTER",
"defaultAnswerData": [
{
"answerCondition": "answer.isDisabled != true",
"shouldKeep": true
}
]
},
{
"ruleType": "HEALTH"
},
{
"ruleType": "WEIGHTED",
"defaultAnswerData": [
{
"answerCondition": "answer.name == 'server1'",
"value": 99
},
{
"answerCondition": "answer.name == 'server2'",
"value": 1
}
]
},
{
"ruleType": "LIMIT",
"defaultCount": 1
}
]
}
ROUTE_BY_GEO
ジオロケーション・ベースのステアリング・ポリシーは、エンド・ユーザーのロケーションに基づいてDNSトラフィックを異なるエンドポイントに分散します。顧客は、開始元の大陸、国または州/地域(北アメリカ)で構成される地理的なリージョンを定義し、リージョンごとに個別のエンドポイントまたはエンドポイントのセットを定義できます。ROUTE_BY_GEO
テンプレートを使用する際は、次の各ルールを、リクエスト本文のrules
フィールドで指定された順序で定義する必要があります:
順 | ルール | 制限事項 | コメント |
---|---|---|---|
1
|
FILTER
|
|
|
2
|
HEALTH
|
|
healthCheckMonitorId がポリシーに対して定義されている場合のみ含まれます。 |
3
|
PRIORITY
|
|
|
4
|
LIMIT
|
|
ROUTE_BY_GEO
テンプレートを使用したPOST /steeringPolicies
リクエスト本文の例:
{
"compartmentId": "ocid1...",
"displayName": "Geolocations mapped to answer pools",
"ttl": 30,
"healthCheckMonitorId": "ocid1...",
"template": "ROUTE_BY_GEO",
"answers": [
{
"name": "US Server 1",
"rtype": "A",
"rdata": "192.168.0.2",
"pool": "US"
},
{
"name": "US Server 2",
"rtype": "A",
"rdata": "192.168.0.3",
"pool": "US"
},
{
"name": "EU Server 1",
"rtype": "A",
"rdata": "192.168.0.4",
"pool": "EU"
},
{
"name": "EU Server 2",
"rtype": "A",
"rdata": "192.168.0.5",
"pool": "EU"
},
{
"name": "rest of world 1",
"rtype": "A",
"rdata": "203.0.113.2",
"pool": "Global"
},
{
"name": "rest of world 2",
"rtype": "A",
"rdata": "203.0.113.3",
"pool": "Global"
}
],
"rules": [
{
"ruleType": "FILTER",
"defaultAnswerData": [
{
"answerCondition": "answer.isDisabled != true",
"shouldKeep": true
}
]
},
{
"ruleType": "HEALTH"
},
{
"ruleType": "PRIORITY",
"cases": [
{
"caseCondition": "query.client.geoKey in (geoKey '6255149')",
"answerData": [
{
"answerCondition": "answer.pool == 'US'",
"value": 1
},
{
"answerCondition": "answer.pool == 'EU'",
"value": 2
},
{
"answerCondition": "answer.pool == 'Global'",
"value": 3
}
]
},
{
"caseCondition": "query.client.geokey in (geokey '6255148')",
"answerData": [
{
"answerCondition": "answer.pool == 'EU'",
"value": 1
},
{
"answerCondition": "answer.pool == 'US'",
"value": 2
},
{
"answerCondition": "answer.pool == 'Global'",
"value": 3
}
]
},
{
"answerData": [
{
"answerCondition": "answer.pool == 'Global'",
"value": 1
},
{
"answerCondition": "answer.pool == 'US'",
"value": 2
},
{
"answerCondition": "answer.pool == 'EU'",
"value": 3
}
]
}
]
},
{
"ruleType": "LIMIT",
"defaultCount": 1
}
]
}
ROUTE_BY_ASN
ASNベースのステアリング・ポリシーにより、自律システム番号(ASN)に基づいてDNSトラフィックを調整できます。特定のASNまたはASNのセットから発生したDNS問合せは、指定のエンドポイントに渡すことができます。ROUTE_BY_ASN
テンプレートを使用する際は、次の各ルールを、リクエスト本文のrules
フィールドで指定された順序で定義する必要があります:
順 | ルール | 制限事項 | コメント |
---|---|---|---|
1
|
FILTER
|
|
|
2
|
HEALTH
|
|
healthCheckMonitorId がポリシーに対して定義されている場合のみ含まれます。 |
3
|
PRIORITY
|
|
|
4
|
LIMIT
|
|
ROUTE_BY_ASN
テンプレートを使用したPOST /steeringPolicies
リクエスト本文の例:
{
"compartmentId": "ocid1...",
"displayName": "ASNs mapped to pools",
"ttl": 30,
"template": "ROUTE_BY_ASN",
"answers": [
{
"name": "ABC Server",
"rtype": "A",
"rdata": "192.168.0.2",
"pool": "ABC"
},
{
"name": "DEF Server",
"rtype": "A",
"rdata": "192.168.0.3",
"pool": "DEF"
},
{
"name": "Other",
"rtype": "A",
"rdata": "203.0.113.2",
"pool": "Other"
}
],
"rules": [
{
"ruleType": "FILTER",
"defaultAnswerData": [
{
"answerCondition": "answer.isDisabled != true",
"shouldKeep": true
}
]
},
{
"ruleType": "PRIORITY",
"cases": [
{
"caseCondition": "query.client.asn == 3",
"answerData": [
{
"answerCondition": "answer.pool == 'ABC'",
"value": 1
},
{
"answerCondition": "answer.pool == 'DEF'",
"value": 2
},
{
"answerCondition": "answer.pool == 'Other'",
"value": 3
}
]
},
{
"caseCondition": "query.client.asn == 16591",
"answerData": [
{
"answerCondition": "answer.pool == 'DEF'",
"value": 1
},
{
"answerCondition": "answer.pool == 'ABC'",
"value": 2
},
{
"answerCondition": "answer.pool == 'Other'",
"value": 3
}
]
},
{
"answerData": [
{
"answerCondition": "answer.pool == 'Other'",
"value": 1
},
{
"answerCondition": "answer.pool == 'ABC'",
"value": 2
},
{
"answerCondition": "answer.pool == 'DEF'",
"value": 3
}
]
}
]
},
{
"ruleType": "LIMIT",
"defaultCount": 1
}
]
}
ROUTE_BY_IP
IP接頭辞ベースのステアリング・ポリシーでは、顧客は、開始元の問合せのIP接頭辞に基づいてDNSトラフィックを制御できます。ROUTE_BY_IP
テンプレートを使用する際は、次の各ルールを、リクエスト本文のrules
フィールドで指定された順序で定義する必要があります:
順 | ルール | 制限事項 | コメント |
---|---|---|---|
1
|
FILTER
|
|
|
2
|
HEALTH
|
|
healthCheckMonitorId がポリシーに対して定義されている場合のみ含まれます。 |
3
|
PRIORITY
|
|
|
4
|
LIMIT
|
|
ROUTE_BY_IP
テンプレートを使用したPOST /steeringPolicies
リクエスト本文の例:
{
"compartmentId": "ocid1...",
"displayName": "IP subnets mapped to answer pools",
"ttl": 30,
"template": "ROUTE_BY_IP",
"answers": [
{
"name": "ABC Server",
"rtype": "A",
"rdata": "192.168.0.2",
"pool": "ABC"
},
{
"name": "DEF Server",
"rtype": "A",
"rdata": "192.168.0.3",
"pool": "DEF"
},
{
"name": "Other",
"rtype": "A",
"rdata": "203.0.113.2",
"pool": "Other"
}
],
"rules": [
{
"ruleType": "FILTER",
"defaultAnswerData": [
{
"answerCondition": "answer.isDisabled != true",
"shouldKeep": true
}
]
},
{
"ruleType": "PRIORITY",
"cases": [
{
"caseCondition": "query.client.address in (subnet '10.0.3.0/24')",
"answerData": [
{
"answerCondition": "answer.pool == 'ABC'",
"value": 1
},
{
"answerCondition": "answer.pool == 'DEF'",
"value": 2
},
{
"answerCondition": "answer.pool == 'Other'",
"value": 3
}
]
},
{
"caseCondition": "query.client.address in (subnet '192.0.2.2/24')",
"answerData": [
{
"answerCondition": "answer.pool == 'DEF'",
"value": 1
},
{
"answerCondition": "answer.pool == 'ABC'",
"value": 2
},
{
"answerCondition": "answer.pool == 'Other'",
"value": 3
}
]
},
{
"answerData": [
{
"answerCondition": "answer.pool == 'Other'",
"value": 1
},
{
"answerCondition": "answer.pool == 'ABC'",
"value": 2
},
{
"answerCondition": "answer.pool == 'DEF'",
"value": 3
}
]
}
]
},
{
"ruleType": "LIMIT",
"defaultCount": 1
}
]
}
カスタム
カスタム・ポリシーを使用して、フェイルオーバー、ロード・バランシング、ジオロケーション、ASNおよびIP接頭辞ステアリングの機能を組み合せた複雑なポリシーを作成します。カスタム・テンプレートにはルール・シーケンスが必要ないので、カスタム・ポリシーを作成する前にOracle Cloud Infrastructureサポートに連絡することをお薦めします。
ルール・タイプ
- フィルタ
- 回答に関連するブール・データが使用されます。この場合、回答はルールの
shouldKeep
値がtrue
の場合にのみ保持されます。 - ヘルス
- OCI Health Checksモニターおよびオンデマンド・プローブを使用して、エンドポイントの状態を評価し、必要に応じてポリシーに回答を追加および削除します。ヘルス・チェック・モニターは、ポリシーに影響を与えるためにヘルス・ルールで参照される必要があります。ヘルス・チェックの詳細は、ヘルス・チェックを参照してください。
- 重み付け
- 0から255までの数値を使用して、他の回答との関連で回答を処理する頻度を評価します。値が高い回答が返される可能性が高くなります。
- 優先度
- 各回答に関連付けられた整数を使用して、回答を最小値から最大値の順にソートします。例:優先度が1の回答は、優先度の値が10の回答が回答リストに返される前に返されます。優先度の値が割り当てられていない回答は、回答リスト末に移動します。
- 制限
- カウント・プロパティを使用して、リスト内の最初の回答以外のすべてにフィルタをかけることができます。