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

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

仮想ゲートウェイ

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

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

重要

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

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

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

仮想ゲートウェイの作成

注記

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

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 がデプロイされているファイルシステムで、証明書チェーンファイルとシークレットキーへのパスを指定します。ローカルファイルで暗号化を使用してサンプルアプリケーションでメッシュをデプロイする完全なエンドツーエンドのチュートリアルについては、GitHub の「ファイル提供の TLS 証明書を使用した TLS の設定」を参照してください。

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

    注記

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

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

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

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

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

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

      注記

      connectionPoolconnectionPoolportMapping プロトコルは同じである必要があります。リスナープロトコルが grpc または http2 の場合は、maxRequests のみを指定します。リスナープロトコルが http の場合、maxConnectionsmaxPendingRequests の両方を指定できます。

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

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

      • (オプション) [最大保留リクエスト数] に、Envoy が [最大接続数] をキューに入れた後、オーバーフローするリクエストの数を指定します。デフォルト値は、「2147483647」です。

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

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

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

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

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

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

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

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

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

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

      • [モード]で、リスナーで 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" } }

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

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

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 の作成」(Amazon ECS)、「外部ロードバランサーの作成」(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" } }

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