仮想ゲートウェイ - AWS App Mesh

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

仮想ゲートウェイ

仮想ゲートウェイを使用すると、メッシュ外のリソースは、メッシュ内のリソースと通信できます。仮想ゲートウェイは、Amazon ECS サービス、Kubernetes サービス内で、または Amazon EC2 インスタンス上で、実行されている Envoy プロキシを表します。仮想ゲートウェイは、アプリケーションで実行されている Envoy を表す仮想ノードとは異なり、単独でデプロイされた Envoy を表します。

外部リソースは、Envoy を実行するサービスまたはインスタンスに割り当てられた IP アドレスに DNS 名を解決できる必要があります。Envoy は、メッシュ内にある App Mesh リソースのすべてのアプリケーションメッシュ設定にアクセスできます。仮想ゲートウェイでの着信リクエストを処理するための設定は、ゲートウェイルートを使用して指定します。

重要

HTTP または HTTP2 リスナーを持つ仮想ゲートウェイは、着信リクエストのホスト名をゲートウェイルートターゲット仮想サービスの名前に書き換えます。また、ゲートウェイルートからの一致したプレフィックスは、デフォルトで / に書き換えられます。例えば、ゲートウェイルート一致プレフィクスが /chapter 、そして、着信リクエストが /chapter/1 とすると、リクエストは /1 に書き換えられます 書き換えを設定するには、「ゲートウェイルート」の「ゲートウェイルートの作成」セクションを参照してください。

仮想ゲートウェイを作成するときは、proxyConfigurationuser は設定しないでください。

を完了するには end-to-end チュートリアル、を参照してくださいインバウンドゲートウェイの設定

仮想ゲートウェイの作成

注記

仮想ゲートウェイを作成するときは、作成した仮想ゲートウェイにゲートウェイルートを関連付ける名前空間のリストを識別するラベル付きの名前空間セレクターを追加する必要があります。

AWS Management Console

AWS Management Console を使用して仮想ゲートウェイを作成するには

  1. https://console.aws.amazon.com/appmesh/ で App Mesh コンソールを開きます。

  2. 仮想ゲートウェイを作成するメッシュを選択します。自分が所有しているメッシュや、共有されているメッシュがすべて一覧表示されます。

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

  4. [仮想ゲートウェイを作成] を選択します。

  5. [仮想ゲートウェイ名] に、仮想ゲートウェイの名前を入力します。

  6. (オプションですが、推奨) クライアントポリシーのデフォルトを設定します。

    1. (オプション)Transport Layer Security (TLS)を使用してバーチャルサービスとのみ通信を行う場合は、「TLSの適用」を選択します。

    2. (オプション) 用ポートで、仮想サービスとのTLS 通信を適用する 1 つ以上のポートを指定します。

    3. 検証方法を使用する場合、次のいずれかのオプションを選択します。指定する証明書は、すでに存在し、特定の要件を満たしている必要があります。詳細については、「証明書の要件」を参照してください。

      • AWS Private Certificate Authority ホスティング — 既存の 1 つまたは複数のを選択します。証明書

      • Envoy Secret Discovery Service (SDS)ホスティング-Envoyが Secret Discovery Service を使用して取得するシークレットの名前を入力します。

      • ローカルファイルホスティング — Envoy がデプロイされているファイルシステム上の証明書チェーンファイルへのパスを指定します。

    4. (オプション) サブジェクトの別名を入力します。SAN を追加するには、[Add SAN] (SAN を追加) を選択します。SAN は FQDN または URI 形式である必要があります。

    5. (オプション) サーバーが要求したときにクライアント証明書を提供し、相互TLS認証を有効にするには、[Provide client certificate] (クライアント証明書の提供) と、次のオプションのいずれかを選択します。相互 TLS の詳細については、App Mesh の「相互 TLS 認証」ドキュメントを参照してください。

      • Envoy Secret Discovery Service (SDS)ホスティング-Envoyが Secret Discovery Service を使用して取得するシークレットの名前を入力します。

      • ローカルファイルホスティング - Envoy がデプロイされているファイルシステムで、証明書チェーンファイルとプライベートキーへのパスを指定します。完全にするには、 end-to-end ローカルファイルで暗号化を使用するサンプルアプリケーションでメッシュをデプロイする手順については、を参照してください。ファイル提供の TLS 証明書による TLS の設定オン GitHub。

  7. (オプション) ログを設定するには、ログ記録を選択します。Envoy で使用する HTTP アクセスログパスを入力します。推奨設定/dev/stdoutパス:これにより、Docker ログドライバーを使用して Envoy ログを Amazon などのサービスにエクスポートできます CloudWatch ログ。

    注記

    ログは引き続き、アプリケーション内のエージェントによって取り込まれ、送信先に送信される必要があります。このファイルパスは、Envoy にログを送信する場所を指示するだけです。

  8. リスナーを設定します。

    1. を選択します。プロトコルをと指定します。ポートEnvoyがトラフィックをリスニングしているところ。http リスナーは、WebSocket への接続移行を許可します。クリックできますリスナーの追加複数のリスナーを追加します。-削除済みボタンはそのリスナーを削除します。

    2. (オプション) 接続プールの有効化

      接続プーリングにより、仮想ゲートウェイ Envoy が同時に確立できる接続の数が制限されます。これは、Envoyインスタンスを接続に圧倒されないように保護することを目的としており、アプリケーションのニーズに合わせてトラフィックシェーピングを調整できます。

      仮想ゲートウェイリスナーの宛先側の接続プール設定を行うことができます。App Mesh は、クライアント側の接続プールの設定をデフォルトで無限に設定し、メッシュ設定を簡素化します。

      注記

      -connectionPoolそしてconnectionPoolPortMapping プロトコルは同じである必要があります。リスナープロトコルがgrpcまたはhttp2で、を指定しますmaxRequestsのみ。リスナープロトコルがhttpで、両方を指定できますmaxConnectionsそしてmaxPendingRequests

      • [最大接続数] に送信接続の最大数を指定します。

      • [Maximum requests] (最大リクエスト数) に、仮想ゲートウェイ Envoy で確立できる並列リクエストの最大数を指定します。

      • (オプション) 用保留中のリクエストの最大数、あとにオーバーフローしたリクエストの数を指定します最大接続数使節が列に並んでいること。デフォルト値は 2147483647 です。

    3. (オプション) リスナーのヘルスチェックを設定する場合は、[ヘルスチェックの有効化] を選択します。

      ヘルスチェックポリシーはオプションですが、正常なポリシーに値を指定する場合は、正常なしきい値Health チェック間隔ヘルスチェックプロトコルタイムアウト期間、 および非正常なしきい値の値を指定する必要があります。

      • [ヘルスチェックプロトコル] で、プロトコルを選択します。grpc を選択した場合、サービスは GRPC Health CheckingProtocol に準拠している必要があります。

      • [ヘルスチェックポート] に、ヘルスチェックを実行するポートを指定します。

      • [正常なしきい値] に、リスナーが正常であると宣言するために必要となるヘルスチェック成功の数を指定します。

      • [ヘルスチェック間隔] に、各ヘルスチェックの実行間隔をミリ秒単位で指定します。

      • [パス] に、ヘルスチェックリクエストの送信先パスを指定します。この値は、ヘルスチェックプロトコルhttp または http2 の場合のみ使用されます。この値は、他のプロトコルでは無視されます。

      • にとってタイムアウト期間で、ヘルスチェックからの応答を受け取るまで待つ時間をミリ秒単位で指定します。

      • [非正常なしきい値] に、リスナーが異常であると宣言するために必要となるヘルスチェック失敗の数を指定します。

    4. (オプション) クライアントが TLS を使用してこの仮想ゲートウェイと通信するかどうかを指定する場合は、TLS ターミネーションの有効化

      • にとってModeで、リスナー上で TLS を設定するモードを選択します。

      • [証明書メソッド] で、次のいずれかのオプションを選択します。証明書は特定の要件を満たしている必要があります。詳細については、「証明書の要件」を参照してください。

        • [AWS Certificate Manager ホスティング] — 既存の証明書を選択します。

        • Envoy Secret Discovery Service (SDS)ホスティング-Envoyが Secret Discovery Service を使用して取得するシークレットの名前を入力します。

        • ローカルファイルホスティング - Envoy がデプロイされているファイルシステム上の証明書チェーンプライベートキーファイルへのパスを指定します。

      • (オプション) クライアントが証明書を提供する場合、相互 TLS 認証を有効にするには、クライアント証明書が必要と次のオプションのいずれかを選択します。相互 TLS の詳細については、App Mesh の「相互 TLS 認証」を参照してください。

        • Envoy Secret Discovery Service (SDS)ホスティング-Envoyが Secret Discovery Service を使用して取得するシークレットの名前を入力します。

        • ローカルファイルホスティング — Envoy がデプロイされているファイルシステム上の証明書チェーンファイルへのパスを指定します。

      • (オプション) サブジェクトの別名を入力します。SAN を追加するには、[Add SAN] (SAN を追加) を選択します。SAN は FQDN または URI 形式である必要があります。

  9. [仮想ゲートウェイを作成] を選択して終了します。

AWS CLI

を使用して仮想ゲートウェイを作成するにはAWS CLI。

以下のコマンドを使用して仮想ゲートウェイを作成し、JSON を入力します (代わりに値をユーザー自身の値にする):

  1. aws appmesh create-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName \ --cli-input-json file://create-virtual-gateway.json
  2. の内容 create-virtual-gateway.json:

    { "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] } }
  3. 出力例:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-06T10:42:42.015000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "ACTIVE" }, "virtualGatewayName": "virtualGatewayName" } }

を使用して仮想ゲートウェイを作成する方法の詳細についてはAWS CLIApp Mesh については、create-virtual-gatewayのコマンドAWS CLIリファレンス

仮想ゲートウェイのデプロイ

Envoy コンテナのみを含む Amazon ECS または Kubernetes サービスをデプロイします。また、Amazon EC2 インスタンスに Envoy コンテナをデプロイすることもできます。詳細については、「App Mesh と Amazon EC2 の開始方法」を参照してください。Amazon ECS にデプロイする方法の詳細については、「App MeshとAmazon ECS の使用を開始する」または「AWS AppMesh と Kubernetes を使用してKubernetesにデプロイする方法」を参照してください。APPMESH_RESOURCE_ARN 環境変数を mesh/mesh-name/virtualGateway/virtual-gateway-name に設定する必要があります。また、プロキシ設定を指定しないでください。そうすると、プロキシのトラフィックがそれ自体にリダイレクトされないようになります。デフォルトでは、App Mesh は、Envoy がメトリックとトレースで自身を参照しているときに APPMESH_RESOURCE_ARN 指定したリソースの名前を使用します。APPMESH_RESOURCE_CLUSTER 環境変数に独自の名前を設定することで、この動作を上書きできます。

コンテナの複数のインスタンスをデプロイし、Network Load Balancer を設定して、インスタンスへのトラフィックの負荷分散を行うようお勧めします。ロードバランサーのサービスディスカバリ名は、外部サービスが、myapp.example.com のような、メッシュ内のリソースにアクセスするために使用する名前です。詳細については、「」を参照してください。Network Load Balancer を作成する(アマゾン ECS)、外部Load Balancer の作成(Kubernetes)、またはチュートリアル: Amazon EC2 でのアプリケーションの可用性を向上させる。また、さらに多くの例やチュートリアルについては、App Mesh の例を参照してください。

プロキシ認証を有効にします。詳細については、「Envoy プロキシ」を参照してください。

仮想ゲートウェイの削除

AWS Management Console

AWS Management Console CLI を使用してト仮想ートウェイを削除するには

  1. App Mesh コンソールを https://console.aws.amazon.com/appmesh/ で開きます。

  2. 仮想ゲートウェイを削除するメッシュを選択します。自分が所有しているメッシュや、共有されているメッシュがすべて一覧表示されます。

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

  4. 削除する仮想ゲートウェイを選択したら、[削除] を選択します。仮想ゲートウェイが関連付けられている場合は、仮想ゲートウェイを削除できません。まず、関連するゲートウェイルートを削除する必要があります。アカウントがリソース所有者として一覧されている仮想ゲートウェイのみを削除できます。

  5. 確認ボックスに delete と入力し、次に、[削除] を選択します。

AWS CLI

AWS CLI CLI を使用してト仮想ートウェイを削除するには

  1. 次のコマンドを使用して、仮想ゲートウェイを削除します (を値をユーザー自身の値にする):

    aws appmesh delete-virtual-gateway \ --mesh-name meshName \ --virtual-gateway-name virtualGatewayName
  2. 出力例:

    { "virtualGateway": { "meshName": "meshName", "metadata": { "arn": "arn:aws:appmesh:us-west-2:123456789012:mesh/meshName/virtualGateway/virtualGatewayName", "createdAt": "2022-04-06T10:42:42.015000-05:00", "lastUpdatedAt": "2022-04-07T10:57:22.638000-05:00", "meshOwner": "123456789012", "resourceOwner": "123456789012", "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 2 }, "spec": { "listeners": [ { "portMapping": { "port": 9080, "protocol": "http" } } ] }, "status": { "status": "DELETED" }, "virtualGatewayName": "virtualGatewayName" } }

による仮想ゲートウェイの削除の詳細についてはAWS CLIApp Mesh については、delete-virtual-gatewayのコマンドAWS CLIリファレンス