

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 虚拟服务
<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. 打开 App Mesh 控制台，网址为[https://console.aws.amazon.com/appmesh/](https://console.aws.amazon.com/appmesh/)。

1. 选择要在其中创建虚拟服务的网格。列出了您拥有的所有网格以及已与您[共享](sharing.md)的所有网格。

1. 在左侧导航中，选择**虚拟服务**。

1. 选择**创建虚拟服务**。

1. 对于**虚拟服务名称**，为您的虚拟服务选择一个名称。您可以选择任何名称，但建议使用您要定位的真实服务的服务发现名称，如 `my-service.default.svc.cluster.local`，这样可以更轻松地将您的虚拟服务与真实服务关联起来。通过这种方式，您无需更改代码以引用与代码当前引用名称不同的名称。您指定的名称必须解析为非环回 IP 地址，因为在将请求发送到 Envoy 代理之前，应用程序容器必须能够成功解析该名称。您可以使用任何非环回 IP 地址，因为应用程序或代理容器都不会与此 IP 地址通信。代理通过您在 App Mesh 中为其配置的名称与其他虚拟服务进行通信，而不是通过名称解析到的 IP 地址进行通信。

1. 对于**提供商**，选择您的虚拟服务的提供商类型：
   + 如果您希望虚拟服务跨多个虚拟节点分布流量，则选择**虚拟路由器**，然后从下拉菜单中选择要使用的虚拟路由器。
   + 如果您希望虚拟服务直接到达虚拟节点，而不使用虚拟路由器，则选择**虚拟节点**，然后从下拉菜单中选择要使用的虚拟节点。
**注意**  
App Mesh 可能会自动为您在 2020 年 7 月 29 日当天或之后定义的每个虚拟节点提供者创建默认 Envoy 路由重试策略，即使您无法通过 App Mesh API 定义这样的策略。有关更多信息，请参阅 [默认路由重试策略](envoy-defaults.md#default-retry-policy)。
   + 如果您此时不希望虚拟服务路由流量（例如，如果您的虚拟节点或虚拟路由器不存在），则选择**无**。您可以稍后更新此虚拟服务的提供商。

1. 选择**创建虚拟服务**以完成。

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

**使用 AWS CLI创建虚拟服务。**

使用以下命令和输入 JSON 文件（用您自己的*red*值替换）使用虚拟节点提供商创建虚拟服务：

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"
       }
   }
   ```

有关使用 for App Mesh 创建虚拟服务的更多信息，请参阅 AWS CLI 参考中的[create-virtual-service](https://docs.aws.amazon.com/cli/latest/reference/appmesh/create-virtual-service.html)命令。 AWS CLI 

------

## 删除虚拟服务
<a name="delete-virtual-service"></a>

**注意**  
您无法删除网关路由引用的虚拟服务。您需要先删除网关路由。

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

**要删除虚拟服务，请使用 AWS 管理控制台**

1. 打开 App Mesh 控制台，网址为[https://console.aws.amazon.com/appmesh/](https://console.aws.amazon.com/appmesh/)。

1. 选择要从中删除虚拟服务的网格。列出了您拥有的所有网格以及已与您[共享](sharing.md)的所有网格。

1. 在左侧导航中，选择**虚拟服务**。

1. 选择要删除的虚拟服务，然后单击右上角的**删除**。您只能删除您的账户被列为**资源所有者的**虚拟网关。

1. 在确认框中，键入 **delete**，然后单击**删除**。

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

**要删除虚拟服务，请使用 AWS CLI**

1. 使用以下命令删除您的虚拟服务（用您自己的*red*值替换这些值）：

   ```
   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"
       }
   }
   ```

有关使用 for App Mesh 删除虚拟服务的更多信息，请参阅 AWS CLI 参考中的[delete-virtual-service](https://docs.aws.amazon.com/cli/latest/reference/appmesh/delete-virtual-service.html)命令。 AWS CLI 

------