Oracle Cloud Infrastructureドキュメント

Traffic Management Steering Policies APIガイド

Traffic Management Steering Policiesでは、Oracle Cloud Infrastructure DNS REST APIを使用して、トラフィック管理ポリシーを作成および構成できます。 REST APIを使用してポリシーを構成する方法については、次のガイドを参照してください。

認証と認可

Oracle Cloud Infrastructureの各サービスは、すべてのインタフェース(コンソール、SDKまたはCLI、およびREST API)の認証および認可のためにIAMと統合されています。

組織の管理者は、どのユーザーがどのサービス、どのリソースおよびアクセスのタイプにアクセスできるかを制御するグループ、コンパートメントおよびポリシーを設定する必要があります。 たとえば、ポリシーは、新しいユーザーの作成、クラウド・ネットワークの作成と管理、インスタンスの起動、バケットの作成、オブジェクトのダウンロードなどを実行できるユーザーを制御します。詳細は、「ポリシーの開始」を参照してください。 異なる各サービスに対するポリシーの記述の詳細は、「ポリシー・リファレンス」を参照してください。

会社が所有するOracle Cloud Infrastructureリソースを使用する必要がある通常のユーザー(管理者ではない)の場合は、管理者に連絡してユーザーIDを設定してください。 管理者は、使用する必要があるコンパートメントを確認できます。

Traffic Management Steering Policyのコンポーネント

次のリストで、Traffic Management Steering Policyの作成に使用するコンポーネントについて説明します。

運営ポリシー
ゾーンのトラフィック管理動作を定義するための全体的なフレームワーク。 運営ポリシーには、DNSのアンサーをインテリジェントに処理するのに役立つルールが含まれています。
アタッチメント
ゾーンに運営ポリシーをリンクできます。対象レコード・タイプのドメインにあるすべてのレコードがゾーンにアタッチされることにより、それらのドメイン・レコードからではなく、運営ポリシーからDNSレスポンスが作成されます。 ドメインは、特定のレコード・タイプを対象とする添付を最大1つ持つことができます。
ルール
ガイドライン運営ポリシーでは、DNSリクエストのプロパティ(リクエスト地理的ロケーションやエンドポイントのヘルスなど)に基づいて、アンサーをフィルタ処理するのに使用されます。
アンサー
アンサーには、DNSレコード・データや、運営ポリシーで処理されるメタデータが含まれます。
テンプレート
テンプレートは、事前定義されたルール・シーケンスで、ポリシー・タイプとその意図した動作を作成します。 例: FAILOVERテンプレートは、FILTER ルールに対するDNS問合せをまずチェックしてから、次のルールを連続してチェックして、アンサーを決定: HEALTHPRIORITY、およびLIMIT これにより、ドメイン動的フェイルオーバー機能が提供されます。 CUSTOM以外のポリシーを使用してtemplate フィールドを定義するポリシーは、そのポリシー・タイプに概要を示したルール順序に従う必要があり、そうしないと、ポリシーの作成時に400 ステータス・コードのエラーが返されます。
ケース
ルールには、特定のDNS問合せの処理中に動作する動作を定義する一連のケースが含まれることもあります。 ルールにケースが連続していない場合、ルールは常に、処理中に同じ構成で評価されます。 ルールに空のケースがある場合、そのルールは常に処理時に無視されます。 ルールに空でない一連のケースが含まれる場合、処理中の動作は、シーケンス内で最初に一致するケースによって構成されます。 caseConditionが常に一致するルール・ケース。 caseConditionを使用するルール・ケースは、特定の問合せでその式がtrueと評価される場合にのみ一致します。

テンプレートを使用した運営ポリシーの作成

次の項では、各タイプの運営ポリシー構成テンプレートのルール構成を説明した後に、各テンプレートの構成方法を示すPOSTリクエスト(CreateSteeringPolicy)の例を示します。

フェイルオーバー
フェイルオーバー・ポリシーを使用すると、ポリシーで提供されるアンサーの順序(たとえば、プライマリおよびセカンダリ)に優先度を付けることができます。 Oracle Cloud Infrastructure Health Checksを利用して、ポリシー内のアンサーのヘルスが判断されます。 プライマリ・アンサーが異常であると判断されると、DNSトラフィックは自動的にセカンダリ・アンサーに運営されます。 次の各ルールは、FAILOVERテンプレートを使用する際にリクエスト本文のrulesフィールドに指定された順序で定義する必要があります:
順序 ルール 制限事項 コメント
1 FILTER
  • 許可されているケースがありません。
  • アンサー・データは、defaultAnswerDataで次のJSONを使用して定義する必要があります:
  • {
      "answerCondition": "answer.isDisabled != true",
      "shouldKeep": true
    }									
 
2 HEALTH
  • 許可されているケースがありません。
healthCheckMonitorIdがポリシーに定義されている場合のみ含まれます。

FAILOVERテンプレートを使用したPOST /steeringPoliciesポリシーの例:

{
  "compartmentId": "ocid1...",
  "displayName": "failover between endpoints",
  "ttl": 30,
  "healthCheckMonitorId": "ocid1...",
  "template": "FAILOVER",
  "answers": [
    {
      "name": "server-primary",
      "rtype": "A",
      "rdata": "192.0.2.1",
      "pool": "primary"
    },
    {
      "name": "server-secondary",
      "rtype": "A",
      "rdata": "192.1.2.1",
      "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
  • 許可されているケースがありません。
  • アンサー・データは、defaultAnswerDataで次のJSONを使用して定義する必要があります:
  • {
      "answerCondition": "answer.isDisabled != true",
      "shouldKeep": true
    }									
 
2 HEALTH
  • 許可されているケースがありません。
healthCheckMonitorIdがポリシーに定義されている場合のみ含まれます。

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.0.2.1"
    },
    {
      "name": "server2",
      "rtype": "A",
      "rdata": "198.51.100.1"
    }
  ],
  "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
  • 許可されているケースがありません。
  • アンサー・データは、defaultAnswerDataで次のJSONを使用して定義する必要があります:
  • {
      "answerCondition": "answer.isDisabled != true",
      "shouldKeep": true
    }									
 
2 HEALTH
  • 許可されているケースがありません。
healthCheckMonitorIdがポリシーに定義されている場合のみ含まれます。

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": "10.10.10.10",
      "pool": "US"
    },
    {
      "name": "US Server 2",
      "rtype": "A",
      "rdata": "10.10.10.11",
      "pool": "US"
    },
    {
      "name": "EU Server 1",
      "rtype": "A",
      "rdata": "10.10.1.1",
      "pool": "EU"
    },
    {
      "name": "EU Server 2",
      "rtype": "A",
      "rdata": "10.10.1.2",
      "pool": "EU"
    },
    {
      "name": "rest of world 1",
      "rtype": "A",
      "rdata": "203.0.113.1",
      "pool": "Global"
    },
    {
      "name": "rest of world 2",
      "rtype": "A",
      "rdata": "203.0.113.2",
      "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
    }
  ]
}

geokey フィールドで使用する地理キーのリストについては、「Traffic Management Steering Policyジオキー」を参照してください。

route_by_asn
ASNベースの運営ポリシーを使用すると、自律システム番号(ASN)に基づいてDNSトラフィックを速めることができます。 特定のASNまたはASNのセットから発行されるDNS問合せは、指定されたエンドポイントに運営できます。 次の各ルールは、ROUTE_BY_ASNテンプレートを使用する際にリクエスト本文のrulesフィールドに指定された順序で定義する必要があります:
順序 ルール 制限事項 コメント
1 FILTER
  • 許可されているケースがありません。
  • アンサー・データは、defaultAnswerDataで次のJSONを使用して定義する必要があります:
  • {
      "answerCondition": "answer.isDisabled != true",
      "shouldKeep": true
    }									
 
2 HEALTH
  • 許可されているケースがありません。
healthCheckMonitorIdがポリシーに定義されている場合のみ含まれます。

ROUTE_BY_ASNテンプレートを使用したPOST /steeringPoliciesリクエスト本文の例:

{
  "compartmentId": "ocid1...",
  "displayName": "ASNs mapped to pools",
  "ttl": 30,
  "template": "ROUTE_BY_ASN",
  "answers": [
    {
      "name": "MIT Server",
      "rtype": "A",
      "rdata": "10.10.10.10",
      "pool": "MIT"
    },
    {
      "name": "Google Fiber Server",
      "rtype": "A",
      "rdata": "10.10.1.1",
      "pool": "Google Fiber"
    },
    {
      "name": "Other",
      "rtype": "A",
      "rdata": "203.0.113.1",
      "pool": "Other"
    }
  ],
  "rules": [
    {
      "ruleType": "FILTER",
      "defaultAnswerData": [
        {
          "answerCondition": "answer.isDisabled != true",
          "shouldKeep": true
        }
      ]
    },
    {
      "ruleType": "PRIORITY",
      "cases": [
        {
          "caseCondition": "query.client.asn == 3",
          "answerData": [
            {
              "answerCondition": "answer.pool == 'MIT'",
              "value": 1
            },
            {
              "answerCondition": "answer.pool == 'Google Fiber'",
              "value": 2
            },
            {
              "answerCondition": "answer.pool == 'Other'",
              "value": 3
            }
          ]
        },
        {
          "caseCondition": "query.client.asn == 16591",
          "answerdata": [
            {
              "answerCondition": "answer.pool == 'Google Fiber'",
              "value": 1
            },
            {
              "answerCondition": "answer.pool == 'MIT'",
              "value": 2
            },
            {
              "answerCondition": "answer.pool == 'Other'",
              "value": 3
            }
          ]
        },
        {
          "answerData": [
            {
              "answerCondition": "answer.pool == 'Other'",
              "value": 1
            },
            {
              "answerCondition": "answer.pool == 'MIT'",
              "value": 2
            },
            {
              "answerCondition": "answer.pool == 'Google Fiber'",
              "value": 3
            }
          ]
        }
      ]
    },
    {
      "ruleType": "LIMIT",
      "defaultCount": 1
    }
  ]
}
route_by_ip
IPプレフィクス・ベース運営ポリシーのメッセージング・ポリシーを使用すると、ユーザーは元の問合せのIPプレフィクスに基づいてDNSトラフィックを作成できます。 次の各ルールは、ROUTE_BY_IPテンプレートを使用する際にリクエスト本文のrulesフィールドに指定された順序で定義する必要があります:
順序 ルール 制限事項 コメント
1 FILTER
  • 許可されているケースがありません。
  • アンサー・データは、defaultAnswerDataで次のJSONを使用して定義する必要があります:
  • 									{
    									"answerCondition": "answer.isDisabled != true",
    									"shouldKeep": true
    									}
    								
 
2 HEALTH
  • 許可されているケースがありません。
healthCheckMonitorIdがポリシーに定義されている場合のみ含まれます。

ROUTE_BY_IPテンプレートを使用したPOST /steeringPoliciesリクエスト本文の例:

{
  "compartmentId": "ocid1...",
  "displayName": "IP subnets mapped to answer pools",
  "ttl": 30,
  "template": "ROUTE_BY_IP",
  "answers": [
    {
      "name": "MIT Server",
      "rtype": "A",
      "rdata": "10.10.10.10",
      "pool": "MIT"
    },
    {
      "name": "Google Fiber Server",
      "rtype": "A",
      "rdata": "10.10.1.1",
      "pool": "Google Fiber"
    },
    {
      "name": "Other",
      "rtype": "A",
      "rdata": "203.0.113.1",
      "pool": "Other"
    }
  ],
  "rules": [
    {
      "ruleType": "FILTER",
      "defaultAnswerData": [
        {
          "answerCondition": "answer.isDisabled != true",
          "shouldKeep": true
        }
      ]
    },
    {
      "ruleType": "PRIORITY",
      "cases": [
        {
          "caseCondition": "query.client.address in (subnet '18.0.0.0/9')",
          "answerData": [
            {
              "answerCondition": "answer.pool == 'MIT'",
              "value": 1
            },
            {
              "answerCondition": "answer.pool == 'Google Fiber'",
              "value": 2
            },
            {
              "answerCondition": "answer.pool == 'Other'",
              "value": 3
            }
          ]
        },
        {
          "caseCondition": "query.client.address in (subnet '136.32.0.0/11')",
          "answerdata": [
            {
              "answerCondition": "answer.pool == 'Google Fiber'",
              "value": 1
            },
            {
              "answerCondition": "answer.pool == 'MIT'",
              "value": 2
            },
            {
              "answerCondition": "answer.pool == 'Other'",
              "value": 3
            }
          ]
        },
        {
          "answerData": [
            {
              "answerCondition": "answer.pool == 'Other'",
              "value": 1
            },
            {
              "answerCondition": "answer.pool == 'MIT'",
              "value": 2
            },
            {
              "answerCondition": "answer.pool == 'Google Fiber'",
              "value": 3
            }
          ]
        }
      ]
    },
    {
      "ruleType": "LIMIT",
      "defaultCount": 1
    }
  ]
}
カスタム
カスタム・ポリシーを使用すると、フェイルオーバー、ロード・バランシング、ロケーション、ASNおよびIPプレフィクス運営の機能を組み合せた複雑なポリシーを作成できます。 カスタム・テンプレートには登録済のルール順序が必要なく、カスタム・ポリシーを作成する前にOracle Cloud Infrastructureサポートに連絡することをお薦めします。

ルール・タイプ

フィルタ
アンサーに関連付けられたブール・データを使用し、ルールshouldKeep 値がtrueの場合にのみアンサーを保持します。
ヘルス
Oracle Cloud Health Checkモニターを使用して、エンドポイントのヘルスを確認し、必要に応じてポリシーからアンサーを追加および削除します。 ヘルス・チェック・モニターは、ポリシーに影響を与えるためにヘルス・ルールで参照される必要があります。 Health Checksの詳細は、Health Checksを参照してください。
重み
0と255の間の数字を使用して、アンサーが他のアンサーと関連して処理される頻度を決定します。 値が大きいアンサーは、返される可能性が高くなります。
優先度
各アンサーに関連付けられた整数を使用して、アンサーを最も低い値から高い値の順にソートします。 例: 優先度が1のアンサーが、優先度が値が10のアンサーのリストに表示される前に返されます。 優先度の値が割り当てられていないアンサーは、アンサー・リストの最後に移動されます。
limit
リスト内で最初のアンサー以外をすべて除外するには、countプロパティを使用します。