AWS CLI appmesh describe-virtual-router 实战指南:查询 AWS App Mesh 虚拟路由器的完整状态
2026/9/14 3:46:08 网站建设 项目流程

AWS CLI appmesh describe-virtual-router 实战指南:查询 AWS App Mesh 虚拟路由器的完整状态

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

本篇指南围绕 AWS CLI 的aws appmesh describe-virtual-router命令展开:它是 AWS App Mesh 服务网格(Service Mesh)中查询单个虚拟路由器(Virtual Router)当前规格、元数据与运行状态的标准操作。读完本文,你将能够完整复现该命令、逐字段解读其返回的 JSON 结构,并理解该命令在底层是如何映射到 App Mesh REST API 的,从而在网格排障与自动化脚本中准确地定位、核对虚拟路由器的配置。

1. 命令示例与基本用法

describe-virtual-router 官方示例给出了该命令的标准调用方式:描述指定虚拟路由器,返回其完整详情。以下命令在名为app1的服务网格中查询名为vrServiceB的虚拟路由器:

aws appmesh describe-virtual-router \ --mesh-name app1 \ --virtual-router-name vrServiceB

执行成功(HTTP 200)时,CLI 输出的 JSON 结构如下(与仓库示例中的输出完全一致):

{ "virtualRouter": { "meshName": "app1", "metadata": { "arn": "arn:aws:appmesh:us-east-1:123456789012:mesh/app1/virtualRouter/vrServiceB", "createdAt": 1563810546.59, "lastUpdatedAt": 1563810546.59, "uid": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ] }, "status": { "status": "ACTIVE" }, "virtualRouterName": "vrServiceB" } }

该示例中的虚拟路由器只有一个监听器(listener),端口映射为80端口的http协议——这与 create-virtual-router 示例中创建的规格完全对应,说明describe返回的spec字段忠实地反映了创建时的声明式配置。

2. 命令参数说明

从仓库内置的 App Mesh API 模型(service-2.json,API 版本2019-01-25)中的DescribeVirtualRouterInput结构定义看,该命令的参数构成如下:

参数必填类型说明
--mesh-name字符串(1–255 字符)虚拟路由器所在的 service mesh 名称,映射到 REST 请求的路径变量{meshName}
--virtual-router-name字符串(1–255 字符)要描述的虚拟路由器名称,映射到请求路径变量{virtualRouterName}
--mesh-owner账号 ID网格所有者的 IAM 账号 ID。当查询的是其他账号共享给你的网格中的虚拟路由器时,需指定该账号 ID;它通过查询字符串(querystring)传给 API

两个必填参数都是纯字符串定位符,遵循 App Mesh 的ResourceName约束(最小 1、最大 255 字符)。命令不需要任何文件型参数;如果你希望以完整 JSON 结构传入参数(例如由脚本拼装),App Mesh 系列的 create/update 类命令支持--cli-input-json file://xxx.json的文件输入语法(file:///fileb://前缀机制见 clidocs.py 中对 CLI 参数值的文档说明),create-virtual-router 示例正是这一用法的演示:

aws appmesh create-virtual-router \ --cli-input-json file://create-virtual-router.json

对应的create-virtual-router.json内容:

{ "meshName": "app1", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ] }, "virtualRouterName": "vrServiceB" }

3. 输出结构逐字段解读

返回体顶层只有一个必填键virtualRouter,其结构为模型中的VirtualRouterData("An object that represents a virtual router returned by a describe operation")。按定义,以下 5 个成员均必填:

3.1 meshName 与 virtualRouterName

  • meshName:虚拟路由器所属的 service mesh 名称,即app1
  • virtualRouterName:虚拟路由器自身名称,即vrServiceB

两者与请求参数回显一致,便于在批量巡检脚本中校验"查的确实是目标资源"。

3.2 metadata:资源元数据

metadataResourceMetadata结构)包含 7 个必填字段:

字段示例值含义
arnarn:aws:appmesh:us-east-1:123456789012:mesh/app1/virtualRouter/vrServiceB资源完整 ARN,格式为arn:aws:appmesh:<region>:<account>:mesh/<mesh>/virtualRouter/<name>
createdAt1563810546.59资源创建时间的 Unix 纪元时间戳(秒)
lastUpdatedAt1563810546.59最近一次更新的时间戳
uida1b2c3d4-5678-90ab-cdef-11111EXAMPLE资源唯一标识符(UUID)
version1资源版本号,创建时为 1,每次更新后递增
meshOwner(模型必填,示例输出未展示)网格所有者 IAM 账号 ID
resourceOwner(模型必填,示例输出未展示)资源所有者 IAM 账号 ID

其中version字段是排障时很有价值的信号:对比 update-virtual-router 示例输出中version: 2与 delete-virtual-router 示例输出中version: 3,可以看出示例虚拟路由器经历了"创建(v1)→ 更新监听端口(v2)→ 删除(v3)"的完整生命周期,每次变更都会体现在lastUpdatedAtversion上。

3.3 spec:声明式规格

specVirtualRouterSpec结构)目前只有一个成员listeners,表示虚拟路由器预期接收入站流量的监听器列表。按模型文档说明,最多可指定一个监听器。每个监听器(Listener结构)中仅portMapping必填,可选成员还有connectionPool(连接池)、healthCheck(健康检查)、outlierDetection(异常检测)、timeout(超时)、tls(TLS 属性)等——这些在 update-virtual-router 示例中将端口从80改为8080的变更流程中同样适用。

portMappingPortMapping结构)要求两个字段:

  • port:端口号(PortNumber);
  • protocol:协议,枚举值限定为httptcphttp2grpc四种。

3.4 status:当前状态

statusVirtualRouterStatus结构)中的status字段为VirtualRouterStatusCode枚举,取值范围:

  • ACTIVE—— 路由器处于活动状态(本示例的返回值);
  • INACTIVE—— 非活动状态;
  • DELETED—— 已被删除(见 delete-virtual-router 示例的输出,其status.status即为DELETED)。

因此在脚本中判断资源是否仍有效时,检查status.status == "ACTIVE"是直接的判据。

4. 底层 API 调用机制

从 service-2.json 中DescribeVirtualRouter操作的定义可以确认该命令与 REST API 的精确对应关系:

  • HTTP 语义GET /v20190125/meshes/{meshName}/virtualRouters/{virtualRouterName},响应码200mesh-namevirtual-router-name两个参数被直接拼入请求 URI(location: uri),而可选的mesh-owner则以查询字符串(location: querystring)形式附加;
  • 协议与签名:服务元数据声明protocol: rest-jsonjsonVersion: 1.1signatureVersion: v4signingName: appmesh,即请求采用 AWS 签名版本 4 对appmesh服务签名,响应为 JSON(1.1 版);
  • 可能返回的错误:模型中列出的操作级错误包括NotFoundException(网格或虚拟路由器不存在,通常意味着名称拼写错误或资源已被删除)、BadRequestException(请求格式非法)、TooManyRequestsException(限流)、ForbiddenException(权限不足)、ServiceUnavailableExceptionInternalServerErrorException(服务端故障)。在编写自动化脚本时,NotFoundException是最值得显式捕获的错误类型。

5. 与相邻命令的配合:虚拟路由器的完整生命周期

describe-virtual-router并非孤立使用。awscli/examples/appmesh/ 目录下的示例文件共同覆盖了 App Mesh 资源的完整操作面,围绕虚拟路由器形成闭环:

阶段命令示例文件
创建create-virtual-router--cli-input-json file://create-virtual-router.jsoncreate-virtual-router.rst
列表list-virtual-routers--mesh-name app1,返回网格内全部虚拟路由器的 ARN 与名称)list-virtual-routers.rst
查询describe-virtual-router(本文主题,返回完整规格与状态)describe-virtual-router.rst
更新update-virtual-router--cli-input-json提交新的specupdate-virtual-router.rst
删除delete-virtual-routerdelete-virtual-router.rst

典型的排障工作流是:先用list-virtual-routers列出网格内所有虚拟路由器拿到准确的virtualRouterName,再用describe-virtual-router拉取该路由器的完整详情,核对spec.listeners是否与设计一致、status.status是否为ACTIVEmetadata.versionlastUpdatedAt是否反映了预期的最近一次变更。由于list只返回 ARN、网格名和路由器名,而describe才返回规格、状态与完整元数据,两者是互补关系而非冗余。

6. 使用注意与适用前提

  1. 名称精确匹配--mesh-name--virtual-router-name必须与资源实际名称完全一致,否则 API 返回NotFoundException;建议名称来源以list-virtual-routers的输出为准。
  2. 跨账号共享网格:当目标网格属于其他 AWS 账号并共享给你的账号时,需追加--mesh-owner指定所有者账号 ID;此时输出metadata中的meshOwnerresourceOwner字段也会体现共享关系。
  3. 输出体积describe返回的是完整资源对象(含 ARN、时间戳、规格等),在循环巡检大量虚拟路由器时应注意解析开销;若只需名称列表,优先使用list-virtual-routers
  4. 适用前提:命令可用性取决于已安装的 AWS CLI 版本中内置的 App Mesh 服务模型。当前仓库在 awscli/botocore/data/appmesh/ 下提供2018-10-012019-01-25两个 API 版本的模型数据,本文所有字段说明均以2019-01-25版本的模型为准。

小结

aws appmesh describe-virtual-router以两个必填名称参数即可完整取回虚拟路由器的声明式规格(监听器与端口映射)、资源元数据(ARN、创建/更新时间、UID、版本号)和运行状态(ACTIVE/INACTIVE/DELETED)。结合本文对 service-2.json API 模型的解读——GET 请求路径、URI/查询字符串参数映射、签名方式与错误类型——你可以将该命令直接嵌入网格配置审计与故障定位的自动化脚本中,并与 create/list/update/delete 系列命令组成完整的虚拟路由器生命周期管理闭环。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询