

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 閘道路由
<a name="gateway-routes"></a>

**重要**  
支援終止通知：2026 年 9 月 30 日， AWS 將停止支援 AWS App Mesh。2026 年 9 月 30 日之後，您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊，請參閱此部落格文章[從 遷移 AWS App Mesh 至 Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)。

閘道路由會連結至虛擬閘道，並將流量路由傳送至現有的虛擬服務。如果路由符合請求，它可以將流量分配到目標虛擬服務。本主題可協助您在服務網格中使用閘道路由。

## 建立閘道路由
<a name="create-gateway-route"></a>

------
#### [ AWS 管理主控台 ]

**使用 建立閘道路由 AWS 管理主控台**

1. 在 https：//[https://console.aws.amazon.com/appmesh/](https://console.aws.amazon.com/appmesh/) 開啟 App Mesh 主控台。

1. 選擇您要在其中建立閘道路由的網格。會列出您擁有和已與您[共用](sharing.md)的所有網格。

1. 在左側導覽中選擇**虛擬閘道**。

1. 選擇您要與新閘道路由建立關聯的虛擬閘道。如果沒有列出，則需要先[建立虛擬閘道](virtual_gateways.md#create-virtual-gateway)。您只能為將帳戶列為**資源擁有者**的虛擬閘道建立閘道路由。

1. 在**閘道路由**表中，選擇**建立閘道路由**。

1. 針對**閘道路由名稱**，指定要用於閘道路由的名稱。

1. 針對**閘道路由類型**，選擇 **http**、**http2** 或 **grpc**。

1. 選取現有的**虛擬服務名稱**。如果沒有列出，則需要先建立[虛擬服務](virtual_services.md#create-virtual-service)。

1. 選擇與**虛擬服務供應商連接埠目標對應的連接埠**。當所選虛擬服務的提供者 （路由器或節點） 有多個接聽程式時，**需要**虛擬服務提供者連接埠。

1. （選用） 針對**優先順序**，指定此閘道路由的優先順序。

1. 針對**相符**組態，指定：
   + 

     如果 **http/http2** 是選取的類型：
     + （選用） **方法** - 指定要在傳入 **http**/**http2** 請求中比對的方法標頭。
     + （選用） **連接埠比對** - 比對傳入流量的連接埠。如果此虛擬閘道有多個接聽程式，**則需要**連接埠比對。
     + （選用） **確切/尾碼主機名稱** - 指定應該在傳入請求上比對的主機名稱，以路由至目標虛擬服務。
     + （選用） **Prefix/Exact/Regex 路徑** - 符合 URL 路徑的方法。
       + **字首比對** - 根據預設`/`，閘道路由相符的請求會重寫至目標虛擬服務的名稱，相符的字首則會重寫至 。視您設定虛擬服務的方式而定，它可以使用虛擬路由器，根據特定字首或標頭，將請求路由到不同的虛擬節點。
**重要**  
您無法`/aws-app-mesh*`為**字首比對**指定 `/aws-appmesh*`或 。這些字首保留供未來 App Mesh 內部使用。
如果定義了多個閘道路由，則請求會與字首最長的路由相符。例如，如果存在兩個閘道路由，其中一個具有 字首，`/chapter`另一個具有 字首`/`，則 的請求`www.example.com/chapter/`會與具有 `/chapter`字首的閘道路由相符。
**注意**  
如果您啟用**以路徑**/**字首**為基礎的比對，App Mesh 會啟用路徑標準化 ([normalize\_path](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-field-extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-normalize-path) 和 [merge\_slashes](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-field-extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-merge-slashes))，以將路徑混淆漏洞的可能性降至最低。  
當參與請求的各方使用不同的路徑表示法時，會發生路徑混淆漏洞。
       + **完全相符** - 精確參數會停用路由的部分相符，並確保只有在路徑符合目前 URL ****時才傳回路由。
       + **Regex 比對** - 用於描述多個 URLs可能實際識別網站上的單一頁面的模式。
     + （選用） **查詢參數** - 此欄位可讓您比對查詢參數。
     + （選用） **標頭** - 指定 **http** 和 **http2** 的標頭。它應該符合傳入請求，以路由到目標虛擬服務。
   + 

     如果 **grpc** 是選取的類型：
     + **主機名稱比對類型**和 （選用） **精確/尾碼比對** - 指定應該在傳入請求上比對的主機名稱，以路由至目標虛擬服務。
     + **grpc 服務名稱** - **grpc** 服務可做為應用程式的 API，並使用 ProtoBuf 定義。
**重要**  
您無法`aws.appmesh`為**服務名稱**指定 `/aws.app-mesh*`或 。這些服務名稱保留供未來的 App Mesh 內部使用。
     + （選用） **中繼資料** - 指定 **grpc** 的中繼資料。它應該符合路由至目標虛擬服務的傳入請求。

1. （選用） 針對**重寫**組態：
   + 

     如果 **http/http2** 是選取的類型：
     + 

       如果**字首**是選取的比對類型：
       + **覆寫主機名稱的自動重寫** - 根據預設，主機名稱會重寫為目標虛擬服務的名稱。
       + **覆寫字首的自動重寫** - 開啟時，**字首重寫**會指定重寫字首的值。
     + 

       如果**精確路徑**是選取的比對類型：
       + **覆寫主機名稱的自動重寫** - 預設會將主機名稱重寫為目標虛擬服務的名稱。
       + **路徑重寫** - 指定重寫路徑的值。沒有預設路徑。
     + 

       如果 **Regex 路徑**是選取的比對類型：
       + **覆寫主機名稱的自動重寫** - 預設會將主機名稱重寫為目標虛擬服務的名稱。
       + **路徑重寫** - 指定重寫路徑的值。沒有預設路徑。
   + 

     如果 **grpc** 是選取的類型：
     + **覆寫主機名稱的自動重寫** - 根據預設，主機名稱會重寫為目標虛擬服務的名稱。

1. 選擇**建立閘道路由**以完成。

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

**使用 建立閘道路由 AWS CLI。**

使用下列命令建立閘道路由並輸入 JSON （使用您自己的值取代{{紅色}}值）：

1. 

   ```
   aws appmesh create-virtual-gateway \ 
   --mesh-name {{meshName}} \ 
   --virtual-gateway-name {{virtualGatewayName}} \
   --gateway-route-name {{gatewayRouteName}} \ 
   --cli-input-json file://{{create-gateway-route.json}}
   ```

1. create-gateway-route.json **範例**的內容：

   ```
   {
       "spec": {
           "httpRoute" : {
               "match" : {
                   "prefix" : "/"
               },
               "action" : {
                   "target" : {
                       "virtualService": {
                           "virtualServiceName": "serviceA.svc.cluster.local"
                       }
                   }
               }
           }
       }
   }
   ```

1. 輸出範例：

   ```
   {
       "gatewayRoute": {
           "gatewayRouteName": "gatewayRouteName",
           "meshName": "meshName",
           "metadata": {
               "arn": "arn:aws:appmesh:{{us-west-2}}:210987654321:mesh/meshName/virtualGateway/virtualGatewayName/gatewayRoute/gatewayRouteName",
               "createdAt": "2022-04-06T11:05:32.100000-05:00",
               "lastUpdatedAt": "2022-04-06T11:05:32.100000-05:00",
               "meshOwner": "123456789012",
               "resourceOwner": "210987654321",
               "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
               "version": 1
           },
           "spec": {
               "httpRoute": {
                   "action": {
                       "target": {
                           "virtualService": {
                               "virtualServiceName": "serviceA.svc.cluster.local"
                           }
                       }
                   },
                   "match": {
                       "prefix": "/"
                   }
               }
           },
           "status": {
               "status": "ACTIVE"
           },
           "virtualGatewayName": "gatewayName"
       }
   }
   ```

如需使用 AWS CLI for App Mesh 建立閘道路由的詳細資訊，請參閱 AWS CLI 參考中的 [create-gateway-route](https://docs.aws.amazon.com/cli/latest/reference/appmesh/create-gateway-route.html) 命令。

------

## 刪除閘道路由
<a name="delete-gateway-route"></a>

------
#### [ AWS 管理主控台 ]

**使用 刪除閘道路由 AWS 管理主控台**

1. 在 https：//[https://console.aws.amazon.com/appmesh/](https://console.aws.amazon.com/appmesh/) 開啟 App Mesh 主控台。

1. 選擇您要從中刪除閘道路由的網格。會列出您擁有和已與您[共用](sharing.md)的所有網格。

1. 在左側導覽中選擇**虛擬閘道**。

1. 選擇您想要從中刪除閘道路由的虛擬閘道。

1. 在**閘道路由**表中，選擇您要刪除的閘道路由，然後選擇**刪除**。只有在您的帳戶列為**資源擁有者**時，您才能刪除閘道路由。

1. 在確認方塊中，輸入 **delete**，然後按一下**刪除**。

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

**使用 刪除閘道路由 AWS CLI**

1. 使用下列命令來刪除閘道路由 （使用您自己的值取代{{紅色}}值）：

   ```
   aws appmesh delete-gateway-route \
        --mesh-name {{meshName}} \
        --virtual-gateway-name {{virtualGatewayName}} \
        --gateway-route-name {{gatewayRouteName}}
   ```

1. 輸出範例：

   ```
   {
       "gatewayRoute": {
           "gatewayRouteName": "gatewayRouteName",
           "meshName": "meshName",
           "metadata": {
               "arn": "arn:aws:appmesh:{{us-west-2}}:210987654321:mesh/meshName/virtualGateway/virtualGatewayName/gatewayRoute/gatewayRouteName",
               "createdAt": "2022-04-06T11:05:32.100000-05:00",
               "lastUpdatedAt": "2022-04-07T10:36:33.191000-05:00",
               "meshOwner": "123456789012",
               "resourceOwner": "210987654321",
               "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
               "version": 2
           },
           "spec": {
               "httpRoute": {
                   "action": {
                       "target": {
                           "virtualService": {
                               "virtualServiceName": "serviceA.svc.cluster.local"
                           }
                       }
                   },
                   "match": {
                       "prefix": "/"
                   }
               }
           },
           "status": {
               "status": "DELETED"
           },
           "virtualGatewayName": "virtualGatewayName"
       }
   }
   ```

如需使用 AWS CLI for App Mesh 刪除閘道路由的詳細資訊，請參閱 AWS CLI 參考中的 [delete-gateway-route](https://docs.aws.amazon.com/cli/latest/reference/appmesh/delete-gateway-route.html) 命令。

------