

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

# 虛擬服務
<a name="virtual_services"></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)。

虛擬服務是實際服務的抽象化，由虛擬節點直接提供，或透過虛擬路由器間接提供。相依服務會以 `virtualServiceName` 呼叫您的虛擬服務，而且這些請求會路由傳送到虛擬節點或虛擬路由器 (指定為虛擬服務的提供者)。

## 建立虛擬服務
<a name="create-virtual-service"></a>

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

**使用 建立虛擬服務 AWS 管理主控台**

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

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

1. 在左側導覽中，選擇 **Virtual services (虛擬服務)**。

1. 選擇 **Create virtual service (建立虛擬服務)**。

1. 對於 **Virtual service name (虛擬服務名稱)**，為您的虛擬服務選擇名稱。您可以選擇任何名稱，但建議您目標為 等實際服務的服務探索名稱`my-service.default.svc.cluster.local`，可讓您更輕鬆地將虛擬服務與實際服務建立關聯。如此一來，您不需要變更程式碼來參考與目前程式碼不同的名稱。您指定的名稱必須解析為非回溯 IP 地址，因為應用程式容器必須能夠成功解析名稱，才能將請求傳送至 Envoy 代理。您可以使用任何非回溯 IP 地址，因為應用程式或代理容器都無法與此 IP 地址通訊。代理會透過您在 App Mesh 中為它們設定的名稱與其他虛擬服務通訊，而不是透過名稱解析的 IP 地址。

1. 針對 **Provider (提供者)**，為您的虛擬服務選擇提供者類型：
   + 如果您希望虛擬服務將流量分散到多個虛擬節點，請選取 **Virtual router (虛擬路由器)**，然後從下拉式功能表選擇要使用的虛擬路由器。
   + 如果您希望虛擬服務在沒有虛擬路由器的情況下直接到達虛擬節點，請選取**虛擬節點**，然後從下拉式功能表中選擇要使用的虛擬節點。
**注意**  
App Mesh 可能會為您在 2020 年 7 月 29 日當天或之後定義的每個虛擬節點提供者自動建立預設 Envoy 路由重試政策，即使您無法透過 App Mesh API 定義此類政策。如需詳細資訊，請參閱[預設路由重試政策](envoy-defaults.md#default-retry-policy)。
   + 如果您此時不想讓虛擬服務路由傳送流量 (例如，如果您的虛擬節點或虛擬路由器尚不存在)，請選擇 **None (無)**。您稍後可以更新此虛擬服務的提供者。

1. 選擇 **Create virtual service (建立虛擬服務)** 以完成。

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

**使用 建立虛擬服務 AWS CLI。**

使用下列命令和輸入 JSON 檔案，使用虛擬節點提供者建立虛擬服務 （使用您自己的值取代*紅色*值）：

1. 

   ```
   aws appmesh create-virtual-service \ 
   --cli-input-json file://create-virtual-service-virtual-node.json
   ```

1. create-virtual-service-virtual-node.json **範例**的內容：

   ```
   {
       "meshName": "meshName",
       "spec": {
           "provider": {
               "virtualNode": {
                   "virtualNodeName": "nodeName"
               }
           }
       },
       "virtualServiceName": "serviceA.svc.cluster.local"
   }
   ```

1. 輸出範例：

   ```
   {
       "virtualService": {
           "meshName": "meshName",
           "metadata": {
               "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualService/serviceA.svc.cluster.local",
               "createdAt": "2022-04-06T09:45:35.890000-05:00",
               "lastUpdatedAt": "2022-04-06T09:45:35.890000-05:00",
               "meshOwner": "123456789012",
               "resourceOwner": "210987654321",
               "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
               "version": 1
           },
           "spec": {
               "provider": {
                   "virtualNode": {
                       "virtualNodeName": "nodeName"
                   }
               }
           },
           "status": {
               "status": "ACTIVE"
           },
           "virtualServiceName": "serviceA.svc.cluster.local"
       }
   }
   ```

如需使用 AWS CLI for App Mesh 建立虛擬服務的詳細資訊，請參閱 AWS CLI 參考中的 [create-virtual-service](https://docs.aws.amazon.com/cli/latest/reference/appmesh/create-virtual-service.html) 命令。

------

## 刪除虛擬服務
<a name="delete-virtual-service"></a>

**注意**  
您無法刪除閘道路由參考的虛擬服務。您需要先刪除閘道路由。

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

**使用 刪除虛擬服務 AWS 管理主控台**

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

1. 選擇您想要從中刪除虛擬服務的網格。會列出您擁有和已與您[共用](sharing.md)的所有網格。

1. 在左側導覽中，選擇 **Virtual services (虛擬服務)**。

1. 選擇您要刪除的虛擬服務，然後按一下右上角的**刪除**。您只能刪除將帳戶列為**資源擁有者**的虛擬閘道。

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

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

**使用 刪除虛擬服務 AWS CLI**

1. 使用下列命令來刪除您的虛擬服務 （將*紅色*值取代為您自己的值）：

   ```
   aws appmesh delete-virtual-service \
        --mesh-name meshName \
        --virtual-service-name serviceA.svc.cluster.local
   ```

1. 輸出範例：

   ```
   {
       "virtualService": {
           "meshName": "meshName",
           "metadata": {
               "arn": "arn:aws:appmesh:us-west-2:210987654321:mesh/meshName/virtualService/serviceA.svc.cluster.local",
               "createdAt": "2022-04-06T09:45:35.890000-05:00",
               "lastUpdatedAt": "2022-04-07T10:39:42.772000-05:00",
               "meshOwner": "123456789012",
               "resourceOwner": "210987654321",
               "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
               "version": 2
           },
           "spec": {
               "provider": {
                   "virtualNode": {
                       "virtualNodeName": "nodeName"
                   }
               }
           },
           "status": {
               "status": "DELETED"
           },
           "virtualServiceName": "serviceA.svc.cluster.local"
       }
   }
   ```

如需使用 AWS CLI for App Mesh 刪除虛擬服務的詳細資訊，請參閱 AWS CLI 參考中的 [delete-virtual-service](https://docs.aws.amazon.com/cli/latest/reference/appmesh/delete-virtual-service.html) 命令。

------