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:资源元数据
metadata(ResourceMetadata结构)包含 7 个必填字段:
| 字段 | 示例值 | 含义 |
|---|---|---|
arn | arn:aws:appmesh:us-east-1:123456789012:mesh/app1/virtualRouter/vrServiceB | 资源完整 ARN,格式为arn:aws:appmesh:<region>:<account>:mesh/<mesh>/virtualRouter/<name> |
createdAt | 1563810546.59 | 资源创建时间的 Unix 纪元时间戳(秒) |
lastUpdatedAt | 1563810546.59 | 最近一次更新的时间戳 |
uid | a1b2c3d4-5678-90ab-cdef-11111EXAMPLE | 资源唯一标识符(UUID) |
version | 1 | 资源版本号,创建时为 1,每次更新后递增 |
meshOwner | (模型必填,示例输出未展示) | 网格所有者 IAM 账号 ID |
resourceOwner | (模型必填,示例输出未展示) | 资源所有者 IAM 账号 ID |
其中version字段是排障时很有价值的信号:对比 update-virtual-router 示例输出中version: 2与 delete-virtual-router 示例输出中version: 3,可以看出示例虚拟路由器经历了"创建(v1)→ 更新监听端口(v2)→ 删除(v3)"的完整生命周期,每次变更都会体现在lastUpdatedAt和version上。
3.3 spec:声明式规格
spec(VirtualRouterSpec结构)目前只有一个成员listeners,表示虚拟路由器预期接收入站流量的监听器列表。按模型文档说明,最多可指定一个监听器。每个监听器(Listener结构)中仅portMapping必填,可选成员还有connectionPool(连接池)、healthCheck(健康检查)、outlierDetection(异常检测)、timeout(超时)、tls(TLS 属性)等——这些在 update-virtual-router 示例中将端口从80改为8080的变更流程中同样适用。
portMapping(PortMapping结构)要求两个字段:
port:端口号(PortNumber);protocol:协议,枚举值限定为http、tcp、http2、grpc四种。
3.4 status:当前状态
status(VirtualRouterStatus结构)中的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},响应码200。mesh-name与virtual-router-name两个参数被直接拼入请求 URI(location: uri),而可选的mesh-owner则以查询字符串(location: querystring)形式附加; - 协议与签名:服务元数据声明
protocol: rest-json、jsonVersion: 1.1、signatureVersion: v4、signingName: appmesh,即请求采用 AWS 签名版本 4 对appmesh服务签名,响应为 JSON(1.1 版); - 可能返回的错误:模型中列出的操作级错误包括
NotFoundException(网格或虚拟路由器不存在,通常意味着名称拼写错误或资源已被删除)、BadRequestException(请求格式非法)、TooManyRequestsException(限流)、ForbiddenException(权限不足)、ServiceUnavailableException与InternalServerErrorException(服务端故障)。在编写自动化脚本时,NotFoundException是最值得显式捕获的错误类型。
5. 与相邻命令的配合:虚拟路由器的完整生命周期
describe-virtual-router并非孤立使用。awscli/examples/appmesh/ 目录下的示例文件共同覆盖了 App Mesh 资源的完整操作面,围绕虚拟路由器形成闭环:
| 阶段 | 命令 | 示例文件 |
|---|---|---|
| 创建 | create-virtual-router(--cli-input-json file://create-virtual-router.json) | create-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提交新的spec) | update-virtual-router.rst |
| 删除 | delete-virtual-router | delete-virtual-router.rst |
典型的排障工作流是:先用list-virtual-routers列出网格内所有虚拟路由器拿到准确的virtualRouterName,再用describe-virtual-router拉取该路由器的完整详情,核对spec.listeners是否与设计一致、status.status是否为ACTIVE、metadata.version与lastUpdatedAt是否反映了预期的最近一次变更。由于list只返回 ARN、网格名和路由器名,而describe才返回规格、状态与完整元数据,两者是互补关系而非冗余。
6. 使用注意与适用前提
- 名称精确匹配:
--mesh-name与--virtual-router-name必须与资源实际名称完全一致,否则 API 返回NotFoundException;建议名称来源以list-virtual-routers的输出为准。 - 跨账号共享网格:当目标网格属于其他 AWS 账号并共享给你的账号时,需追加
--mesh-owner指定所有者账号 ID;此时输出metadata中的meshOwner与resourceOwner字段也会体现共享关系。 - 输出体积:
describe返回的是完整资源对象(含 ARN、时间戳、规格等),在循环巡检大量虚拟路由器时应注意解析开销;若只需名称列表,优先使用list-virtual-routers。 - 适用前提:命令可用性取决于已安装的 AWS CLI 版本中内置的 App Mesh 服务模型。当前仓库在 awscli/botocore/data/appmesh/ 下提供
2018-10-01与2019-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),仅供参考