

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

# 仮想ゲートウェイ
<a name="virtual_gateways"></a>

**重要**  
サポート終了通知: 2026 年 9 月 30 日に、 AWS は のサポートを終了します AWS App Mesh。2026 年 9 月 30 日以降、 AWS App Mesh コンソールまたは AWS App Mesh リソースにアクセスできなくなります。詳細については、このブログ記事[「 から Amazon ECS Service Connect AWS App Mesh への移行](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)」を参照してください。

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

外部リソースは、Envoy を実行するサービスまたはインスタンスに割り当てられた IP アドレスに DNS 名を解決できる必要があります。Envoy は、メッシュ内にある App Mesh リソースのすべてのアプリケーションメッシュ設定にアクセスできます。仮想ゲートウェイでの着信リクエストを処理するための設定は、[ゲートウェイルート](https://docs.aws.amazon.com/app-mesh/latest/userguide/gateway-routes.html)を使用して指定します。

**重要**  
HTTP または HTTP2 リスナーを持つ仮想ゲートウェイは、着信リクエストのホスト名をゲートウェイルートターゲット仮想サービスの名前に書き換えます。また、ゲートウェイルートからの一致したプレフィックスは、デフォルトで `/` に書き換えられます。例えば、ゲートウェイルート一致プレフィクスが `/chapter` 、そして、着信リクエストが `/chapter/1` とすると、リクエストは `/1` に書き換えられます 書き換えを設定するには、「ゲートウェイルート」の「[ゲートウェイルートの作成](https://docs.aws.amazon.com/app-mesh/latest/userguide/gateway-routes.html#create-gateway-route)」セクションを参照してください。  
仮想ゲートウェイを作成するときは、`proxyConfiguration` と `user` は設定しないでください。

エンドツーエンドのチュートリアルを完了するには、「[インバウンドゲートウェイの設定](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-ingress-gateway)」を参照してください。

## 仮想ゲートウェイの作成
<a name="create-virtual-gateway"></a>

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

------
#### [ AWS マネジメントコンソール ]

**を使用して仮想ゲートウェイを作成するには AWS マネジメントコンソール**

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

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

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

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

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

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

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

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

   1. **検証方法**を使用する場合、次のいずれかのオプションを選択します。指定する証明書は、すでに存在し、特定の要件を満たしている必要があります。詳細については、「[証明書の要件](tls.md#virtual-node-tls-prerequisites)」を参照してください。
      + **AWS Private Certificate Authority** ホスティング — 既存の 1 つまたは複数のを選択します。**証明書**。
      + **[Envoy Secret Discovery Service (SDS)]** ホスティング — Envoy が Secret Discovery Service を使用して取得するシークレットの名前を入力します。
      + **ローカルファイルホスティング** — Envoy がデプロイされているファイルシステム上の**証明書チェーン**ファイルへのパスを指定します。

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

   1. (オプション) サーバーが要求したときにクライアント証明書を提供し、相互TLS認証を有効にするには、**[Provide client certificate]** (クライアント証明書の提供) と、次のオプションのいずれかを選択します。相互 TLS の詳細については、App Mesh の「[相互 TLS 認証](https://docs.aws.amazon.com/app-mesh/latest/userguide/mutual-tls.html)」ドキュメントを参照してください。
      + **[Envoy Secret Discovery Service (SDS)]** ホスティング — Envoy が Secret Discovery Service を使用して取得するシークレットの名前を入力します。
      + **ローカルファイルホスティング** - Envoy がデプロイされているファイルシステムで、**証明書チェーン**ファイルと**シークレットキー**へのパスを指定します。ローカルファイルで暗号化を使用してサンプルアプリケーションでメッシュをデプロイする完全なエンドツーエンドのチュートリアルについては、GitHub の「[ファイル提供の TLS 証明書を使用した TLS の設定](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-tls-file-provided)」を参照してください。

1. (オプション) ログを設定するには、**ログ記録**を選択します。Envoy で使用する **HTTP アクセスログパス**を入力します。`/dev/stdout` パスを使用するようお勧めします。これにより、Docker ログドライバーを使用して Envoy ログを Amazon CloudWatch Logs などのサービスにエクスポートできます。
**注記**  
ログは引き続き、アプリケーション内のエージェントによって取り込まれ、送信先に送信される必要があります。このファイルパスは、Envoy にログを送信する場所を指示するだけです。

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

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

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

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

      仮想ゲートウェイリスナーの宛先側の接続プール設定を行うことができます。App Mesh は、クライアント側の接続プールの設定をデフォルトで無限に設定し、メッシュ設定を簡素化します。
**注記**  
`connectionPool` と `connectionPool`portMapping プロトコルは同じである必要があります。リスナープロトコルが `grpc` または `http2` の場合は、`maxRequests` のみを指定します。リスナープロトコルが `http` の場合、`maxConnections` と `maxPendingRequests` の両方を指定できます。
      + **[最大接続数]** に送信接続の最大数を指定します。
      + **[Maximum requests]** (最大リクエスト数) に、仮想ゲートウェイ Envoy で確立できる並列リクエストの最大数を指定します。
      + (オプション) **[最大保留リクエスト数]** に、Envoy が **[最大接続数]** をキューに入れた後、オーバーフローするリクエストの数を指定します。デフォルト値は `2147483647` です。

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

      ヘルスチェックポリシーはオプションですが、正常なポリシーに値を指定する場合は、**正常なしきい値**、**Health チェック間隔**、**ヘルスチェックプロトコル**、**タイムアウト期間**、 および**非正常なしきい値**の値を指定する必要があります。
      + **[ヘルスチェックプロトコル]** で、プロトコルを選択します。**grpc** を選択した場合、サービスは [GRPC Health CheckingProtocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) に準拠している必要があります。
      + **[ヘルスチェックポート]** に、ヘルスチェックを実行するポートを指定します。
      + **[正常なしきい値]** に、リスナーが正常であると宣言するために必要となるヘルスチェック成功の数を指定します。
      + **[ヘルスチェック間隔]** に、各ヘルスチェックの実行間隔をミリ秒単位で指定します。
      + **[パス]** に、ヘルスチェックリクエストの送信先パスを指定します。この値は、**ヘルスチェックプロトコル**が `http` または `http2` の場合のみ使用されます。この値は、他のプロトコルでは無視されます。
      + **[タイムアウト期間]** に、ヘルスチェックからの応答を受け取るまで待機する時間をミリ秒単位で指定します。
      + **[非正常なしきい値]** に、リスナーが異常であると宣言するために必要となるヘルスチェック失敗の数を指定します。

   1. (オプション) 仮想ノードが TLS を使用してこの仮想ゲートウェイと通信するかどうかを指定する場合は、**[TLS ターミネーションを有効化]** を選択します。
      + **[モード]**で、リスナーで TLS を設定するモードを選択します。
      + **[証明書メソッド]** で、次のいずれかのオプションを選択します。証明書は特定の要件を満たしている必要があります。詳細については、「[証明書の要件](tls.md#virtual-node-tls-prerequisites)」を参照してください。
        + **AWS Certificate Manager ホスティング** – 既存の**証明書**を選択します。
        + **[Envoy Secret Discovery Service (SDS)]** ホスティング — Envoy が Secret Discovery Service を使用して取得するシークレットの名前を入力します。
        + **ローカルファイルホスティング** - Envoy がデプロイされているファイルシステム上の**証明書チェーン**と**プライベートキー**ファイルへのパスを指定します。
      + (オプション) クライアントが証明書を提供する場合、相互 TLS 認証を有効にするには、**クライアント証明書が必要**と次のオプションのいずれかを選択します。相互 TLS の詳細については、App Mesh の「[相互 TLS 認証](https://docs.aws.amazon.com/app-mesh/latest/userguide/mutual-tls.html)」を参照してください。
        + **[Envoy Secret Discovery Service (SDS)]** ホスティング — Envoy が Secret Discovery Service を使用して取得するシークレットの名前を入力します。
        + **ローカルファイルホスティング** — Envoy がデプロイされているファイルシステム上の**証明書チェーン**ファイルへのパスを指定します。
      + (オプション) **サブジェクトの別名**を入力します。SAN を追加するには、**[Add SAN]** (SAN を追加) を選択します。SAN は FQDN または URI 形式である必要があります。

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

------
#### [ 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
   ```

1. create-virtual-gateway.json の**例**の内容:

   ```
   {
       "spec": {
         "listeners": [
           {
             "portMapping": {
               "port": 9080,
               "protocol": "http"
             }
           }
         ]
       }
   }
   ```

1. 出力例:

   ```
   {
       "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](https://docs.aws.amazon.com/cli/latest/reference/appmesh/create-virtual-gateway.html) コマンドを参照してください。

------

## 仮想ゲートウェイのデプロイ
<a name="deploy-virtual-gateway"></a>

[Envoy コンテナ](envoy.md)のみを含む Amazon ECS または Kubernetes サービスをデプロイします。また、Amazon EC2 インスタンスに Envoy コンテナをデプロイすることもできます。詳細については、「[App Mesh と Amazon EC2 の開始方法](https://docs.aws.amazon.com/app-mesh/latest/userguide/getting-started-ec2.html)」を参照してください。Amazon ECS にデプロイする方法の詳細については、「[App MeshとAmazon ECS の使用を開始する](https://docs.aws.amazon.com/app-mesh/latest/userguide/getting-started-ecs.html)」または「[AWS AppMesh と Kubernetes を使用してKubernetesにデプロイする方法](https://docs.aws.amazon.com/app-mesh/latest/userguide/getting-started-kubernetes.html)」を参照してください。`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 の作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-network-load-balancer.html)」(Amazon ECS)、「[外部ロードバランサーの作成](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/)」(Kubernetes)、または「[チュートリアル: Amazon EC2 でのアプリケーションの可用性を高める](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-increase-availability.html)」を参照してください。また、さらに多くの例やチュートリアルについては、[App Mesh の例](https://docs.aws.amazon.com/app-mesh/latest/userguide/examples.html)を参照してください。

プロキシ認可を有効にします。詳細については、「[Envoy プロキシの認可](proxy-authorization.md)」を参照してください。

## 仮想ゲートウェイの削除
<a name="delete-virtual-gateway"></a>

------
#### [ AWS マネジメントコンソール ]

**を使用して仮想ゲートウェイを削除するには AWS マネジメントコンソール**

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

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

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

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

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

------
#### [ AWS CLI ]

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

1. 以下のコマンドを使用して仮想ゲートウェイを削除します (*赤色*の値を独自の値に置き換えてください)。

   ```
   aws appmesh delete-virtual-gateway \
        --mesh-name meshName \
        --virtual-gateway-name virtualGatewayName
   ```

1. 出力例:

   ```
   {
       "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](https://docs.aws.amazon.com/cli/latest/reference/appmesh/delete-virtual-gateway.html) コマンドを参照してください。

------