ルート - AWS App Mesh

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ルート

ルートは、仮想ルーターに関連付けられます。ルートは、仮想ルーターに対するリクエストを一致させ、関連する仮想ノードにトラフィックを分散させるために使用されます。ルートは、リクエストと一致すると、1つ以上のターゲット仮想ノードにトラフィックを分散することができます。各仮想ノードに対して相対的な重み付けを指定することができます。このトピックは、サービスメッシュ内のルートの操作に役立ちます。

ルートを作成する

AWS Management Console
AWS Management Console を使用したルートの作成
  1. App Mesh コンソールをhttps://console.aws.amazon.com/appmesh/で開きます。

  2. ルートを作成するメッシュを選択します。所有しているメッシュや、共有されているメッシュがすべて一覧表示されます。

  3. 左側のナビゲーションで [仮想ルーター] を選択します。

  4. 新しいルートを関連付ける仮想ルーターを選択します。一覧に表示されていない場合は、最初に仮想ルーターを作成する必要があります。

  5. [ルート] テーブルで [ルートを作成] を選択します。ルートを作成するには、アカウント ID は、ルートのリソース所有者として一覧表示されている必要があります。

  6. [ルート名] に、ルートに使用する名前を指定します。

  7. ルートタイプで、ルーティングするプロトコルを選択します。選択したプロトコルは、仮想ルーターとトラフィックをルーティングする仮想ノードで選択したリスナープロトコルと一致する必要があります。

  8. (オプション)ルート優先度で、ルートに使用する優先度を0~1000の範囲で指定します。ルートは、指定された値に基づいて一致させます。ここで、0 は最も高い優先順位になります。

  9. (オプション) [追加設定] を選択します。下のプロトコルの中から、ルートタイプ で選択したプロトコルを選択し、コンソールで必要な設定を行います。

  10. ターゲットの設定で、トラフィックをルーティングする既存の App Mesh 仮想ノードを選択し、重みを指定します。ターゲットの追加を選択して、ターゲットを追加します。すべてのターゲットのパーセンテージは 100 まで加算する必要があります。仮想ノードが一覧表示されていない場合は、最初に作成する必要があります。選択した仮想ノードに複数のリスナーがある場合は、ターゲットポート必要です。

  11. 一致の設定では、次を指定します。

    一致の設定では、tcp の利用はできない

    • http/http2が、選択されたタイプの場合:

      • (オプション)メソッド‐着信したhttp/http2リクエストに一致させるメソッドヘッダーを指定します。

      • (オプション) [ポートの一致] - 受信トラフィックのポートを照合します。この仮想ルーターに複数のリスナーがある場合は、ポートを一致させる必要があります

      • (オプション)プレフィックス/完全一致/正規表現パス‐URL のパスを照合する方法です。

        • プレフィックスの一致‐デフォルトでは、ゲートウェイルートによって一致したリクエストがターゲット仮想サービスの名前に書き換えられ、一致したプレフィックスが書き換えられます/ 仮想サービスの設定によっては、仮想ルーターを使用して、特定のプレフィックスやヘッダーに基づき、異なる仮想ノードにリクエストをルーティングすることができます。

          注記

          パス/プレフィックスに基づいた一致を有効にすると、App Mesh はパスの正規化 (normalize_pathmerge_slashes) を有効にし、パス混同の脆弱性が発生する確率を最小化します。

          パス混乱の脆弱性は、リクエストに参加している当事者が異なるパス表現を使用する場合に発生します。

        • 完全一致‐exact パラメータは、ルートの部分一致を無効にし、パスが現在の URL と完全一致である場合にのみルートを返すようにします。

        • 正規表現一致‐複数の URL が Web サイト上の 1 つのページを実際に識別する可能性のあるパターンを記述するために使用します。

      • (オプション) クエリパラメータ - このフィールドでは、クエリパラメータで一致を行うことができます。

      • (オプション)ヘッダーhttphttp2のヘッダを指定します。受信したリクエストに一致させて、対象の仮想サービスにルーティングする必要があります。

    • gRPCが選択されている場合:

      • サービス名‐リクエストを一致させる宛先サービス。

      • メソッド名‐リクエストを一致させるデスティネーションメソッド。

      • (オプション) メタデータ ‐ メタデータの存在に基づいた Match を指定します。リクエストを処理するには、すべてが一致する必要があります。

  12. [ルートを作成] を選択します。

AWS CLI

AWS CLI を使用してルートを作成するには

以下のコマンドと入力 JSON ファイル (赤色の値を独自の値に置き換えてください) を使用して、gRPC ルートを作成します。

  1. aws appmesh create-route \ --cli-input-json file://create-route-grpc.json
  2. create-route-grpc.json のの内容:

    { "meshName" : "meshName", "routeName" : "routeName", "spec" : { "grpcRoute" : { "action" : { "weightedTargets" : [ { "virtualNode" : "nodeName", "weight" : 100 } ] }, "match" : { "metadata" : [ { "invert" : false, "match" : { "prefix" : "123" }, "name" : "myMetadata" } ], "methodName" : "nameOfmethod", "serviceName" : "serviceA.svc.cluster.local" }, "retryPolicy" : { "grpcRetryEvents" : [ "deadline-exceeded" ], "httpRetryEvents" : [ "server-error", "gateway-error" ], "maxRetries" : 3, "perRetryTimeout" : { "unit" : "s", "value" : 15 }, "tcpRetryEvents" : [ "connection-error" ] } }, "priority" : 100 }, "virtualRouterName" : "routerName" }
  3. 出力例:

    { "route": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualRouter/routerName/route/routeName", "createdAt": "2022-04-06T13:48:20.749000-05:00", "lastUpdatedAt": "2022-04-06T13:48:20.749000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "routeName": "routeName", "spec": { "grpcRoute": { "action": { "weightedTargets": [ { "virtualNode": "nodeName", "weight": 100 } ] }, "match": { "metadata": [ { "invert": false, "match": { "prefix": "123" }, "name": "myMetadata" } ], "methodName": "nameOfMehod", "serviceName": "serviceA.svc.cluster.local" }, "retryPolicy": { "grpcRetryEvents": [ "deadline-exceeded" ], "httpRetryEvents": [ "server-error", "gateway-error" ], "maxRetries": 3, "perRetryTimeout": { "unit": "s", "value": 15 }, "tcpRetryEvents": [ "connection-error" ] } }, "priority": 100 }, "status": { "status": "ACTIVE" }, "virtualRouterName": "routerName" } }

App Mesh の AWS CLI を使用してルートを作成する方法の詳細については、AWS CLI リファレンスの create-route コマンドを参照してください。

(オプション) [一致]

  • (オプション) リクエストに一致する宛先サービスの [サービス名] を入力します。名前を指定しない場合は、任意のサービスに対するリクエストを一致させます。

  • (オプション) リクエストに一致する宛先メソッドのメソッド名を入力します。名前を指定しない場合は、任意のメソッドに対するリクエストを一致させます。メソッド名を指定する場合は、サービス名を指定する必要があります。

(オプション) [メタデータ]

[メタデータの追加] を選択します。

  • (オプション) ルーティングする [メタデータ名] を入力し、[照合タイプ] を選択し、[照合値] を入力します。[反転] を選択すると、その逆が照合されます。例えば、[メタデータ名]myMetadata[照合タイプ][完全一致][照合値]123、そして [反転] を選択している場合、ルートは、123 以外の何かで始まるメタデータ名を持つすべてのリクエストに一致します。

  • (オプション) [メタデータの追加] を選択して、メタデータアイテムを 10 個まで追加します。

(オプション)ポリシーを再試行する

再試行ポリシーは、断続的なネットワーク障害や断続的なサーバー側の障害からクライアントを保護することができます。再試行ポリシーはオプションですが、推奨されています。再試行のタイムアウト値は、再試行ごとのタイムアウトを定義します (最初の試行を含む)。再試行ポリシーを定義しない場合、App Mesh は各ルートのデフォルトポリシーを自動的に作成することがあります。詳細については、「デフォルトのルート再試行ポリシー」を参照してください。

  • 再試行タイムアウトには、タイムアウト時間の単位数を入力します。プロトコル再試行イベントを選択する場合は、値が必要です。

  • 再試行タイムアウトユニットで、単位を選択します。プロトコル再試行イベントを選択する場合は、値が必要です。

  • 最大再試行回数に、リクエストが失敗した場合の再試行の最大回数を入力します。プロトコル再試行イベントを選択する場合は、値が必要です。少なくとも 2 つの値を推奨します。

  • [HTTP 再試行イベント]を1つ以上選択します。少なくとも [ストリームエラー] と [ゲートウェイエラー] を選択するようお勧めします。

  • [TCP 再試行イベント]を選択してください。。

  • 1 つまたは複数の[gRPC 再試行イベント]を選択します。少なくとも[キャンセルされました] と [利用できません] を選択するようお勧めします。

(オプション) タイムアウト

  • デフォルト値は 15 秒です。[ポリシーを再試行する] を指定した場合、ここで指定する期間は、再試行ポリシーで定義した最大再試行回数を乗じた再試行期間以上でなければならず、再試行ポリシーを完了させることができないため、常に長くする必要があります。15 秒を超える期間を指定する場合は、任意の仮想ノードTargetのリスナーに指定されたタイムアウトも15秒以上であることを確認します。詳細については、「仮想ノード」をご覧ください。

  • 0 の値は、タイムアウトを無効にします。

  • ルートをアイドル状態にすることができる最大時間。

(オプション) 一致

  • ルートが必ず一致する [プレフィックス] を指定します。例えば、仮想サービス名が service-b.local である場合、ルートと service-b.local/metrics へのリクエストを一致させるには、プレフィックスを /metrics にする必要があります。指定する/すべてのトラフィックをルーティングします。

  • (オプション) [メソッド] を選択します。

  • (オプション) [スキーム] を選択します。HTTP2 ルートにのみ適用されます。

(オプション) ヘッダー

  • (オプション) [ヘッダーを追加] を選択します。ルーティングするヘッダー名を入力し、[照合タイプ] を選択し、[照合値] を入力します。[反転] を選択すると、その逆に一致します。例えば、clientRequestId というヘッダーと 123 という[プレフィックス] を指定し、[Invert] を選択すると、123 以外で始まるヘッダーを持つすべてのリクエストに対してルートが一致されます。。

  • (オプション) [ヘッダーを追加] を選択します。最大 10 個のヘッダーを追加できます。

(オプション) 再試行ポリシー

再試行ポリシーは、断続的なネットワーク障害や断続的なサーバー側の障害からクライアントを保護することができます。再試行ポリシーはオプションですが、推奨されています。再試行のタイムアウト値は、再試行ごとのタイムアウトを定義します (最初の試行を含む)。再試行ポリシーを定義しない場合、App Mesh は各ルートのデフォルトポリシーを自動的に作成することがあります。詳細については、「デフォルトのルート再試行ポリシー」を参照してください。

  • 再試行タイムアウトには、タイムアウト時間の単位数を入力します。プロトコル再試行イベントを選択する場合は、値が必要です。

  • 再試行タイムアウトユニットで、単位を選択します。プロトコル再試行イベントを選択する場合は、値が必要です。

  • 最大再試行回数に、リクエストが失敗した場合の再試行の最大回数を入力します。プロトコル再試行イベントを選択する場合は、値が必要です。少なくとも 2 つの値を推奨します。

  • [HTTP 再試行イベント]を1つ以上選択します。少なくとも [ストリームエラー] と [ゲートウェイエラー] を選択するようお勧めします。

  • [TCP 再試行イベント] を選択してください。

(オプション) タイムアウト

  • リクエストのタイムアウト – デフォルト値は 15 秒です。再試行ポリシーを指定した場合、ここで指定する期間は、再試行ポリシーが完了することができるように、再試行期間に再試行ポリシー で定義した最大再試行回数を掛けた値以上である必要があります。

  • アイドル期間 — デフォルト値は 300 秒です。

  • 0 の値は、タイムアウトを無効にします。

注記

デフォルトより大きいタイムアウトを指定する場合は、すべての仮想ノード参加者のリスナーに指定されたタイムアウトがデフォルトよりも大きくなるようにしてください。ただし、タイムアウトをデフォルトよりも低い値に減らす場合は、仮想ノードでタイムアウトを更新することはオプションとなります。詳細については、「仮想ノード」を参照してください。

(オプション) タイムアウト

  • アイドル期間 — デフォルト値は 300 秒です。

  • 0 の値は、タイムアウトを無効にします。

ルートの削除

AWS Management Console
AWS Management Console を使用して、ルートを削除するには
  1. App Mesh コンソールをhttps://console.aws.amazon.com/appmesh/で開きます。

  2. ルートを削除するメッシュを選択します。所有しているメッシュや、共有されているメッシュがすべて一覧表示されます。

  3. 左側のナビゲーションで [仮想ルーター] を選択します。

  4. ルートを削除するルーターを選択します。

  5. [ルート] テーブルで、削除するルートを選択し、右上隅の [削除]を選択します。

  6. 確認ボックスで、「delete」と入力し、[削除] をクリックします。

AWS CLI
AWS CLI を使用して、ルートを削除するには
  1. 以下のコマンドを使用してルートを削除します (赤色の値を独自の値に置き換えてください)。

    aws appmesh delete-route \ --mesh-name meshName \ --virtual-router-name routerName \ --route-name routeName
  2. 出力例:

    { "route": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualRouter/routerName/route/routeName", "createdAt": "2022-04-06T13:46:54.750000-05:00", "lastUpdatedAt": "2022-04-07T10:43:57.152000-05:00", "meshOwner": "123456789012", "resourceOwner": "210987654321", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "routeName": "routeName", "spec": { "grpcRoute": { "action": { "weightedTargets": [ { "virtualNode": "nodeName", "weight": 100 } ] }, "match": { "metadata": [ { "invert": false, "match": { "prefix": "123" }, "name": "myMetadata" } ], "methodName": "methodName", "serviceName": "serviceA.svc.cluster.local" }, "retryPolicy": { "grpcRetryEvents": [ "deadline-exceeded" ], "httpRetryEvents": [ "server-error", "gateway-error" ], "maxRetries": 3, "perRetryTimeout": { "unit": "s", "value": 15 }, "tcpRetryEvents": [ "connection-error" ] } }, "priority": 100 }, "status": { "status": "DELETED" }, "virtualRouterName": "routerName" } }

App Mesh の AWS CLI を使用してルートを削除する方法の詳細については、AWS CLI リファレンスの delete-route コマンドを参照してください。