使用 AWS CLI 的apigateway get-stages命令查看 API Gateway 部署阶段
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
导读
aws apigateway get-stages是 AWS CLI 中用于一次性获取某个 REST API 下全部 Stage(部署阶段)信息的命令,在排查 API 发布环境、核对缓存集群状态或审计各阶段方法级配置时非常实用。本指南以官方示例 get-stages.rst 为骨架,结合仓库中 API Gateway 服务模型(service-2.json)对返回字段逐一拆解,帮助你读懂输出并掌握与get-stage命令配合使用的完整查询思路。
命令用法
get-stages属于apigateway服务下的查询类操作,作用是“获取一个或多个 Stage 资源的信息”。官方示例中的最小调用方式为:
aws apigateway get-stages --rest-api-id 1234123412其中--rest-api-id是 REST API 的字符串标识符,即创建 API 时由 API Gateway 分配的资源 ID。根据服务模型中GetStagesRequest的定义(见 service-2.json),该命令还支持第二个可选参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--rest-api-id | String | 是 | 关联 REST API 的字符串标识符 |
--deployment-id | String | 否 | 部署标识符,用于过滤出指向指定 Deployment 的阶段 |
因此,若要精确查看某个部署版本关联了哪些阶段,可以这样写:
aws apigateway get-stages --rest-api-id 1234123412 --deployment-id 123h64与查询单个阶段的get-stage命令不同(后者需要同时提供--rest-api-id与--stage-name,见 get-stage.rst),get-stages只需一个 API ID 即可列出全部阶段,适合先“总览”、再“精查”的排查路径。
输出结构解读
运行上述命令后,返回的 JSON 结构如下(原文取自 get-stages.rst):
{ "item": [ { "stageName": "dev", "cacheClusterSize": "0.5", "cacheClusterEnabled": true, "cacheClusterStatus": "AVAILABLE", "deploymentId": "123h64", "lastUpdatedDate": 1456185138, "createdDate": 1453589092, "methodSettings": { "~1resource~1subresource/POST": { "cacheTtlInSeconds": 300, "loggingLevel": "INFO", "dataTraceEnabled": true, "metricsEnabled": true, "throttlingRateLimit": 500.0, "cacheDataEncrypted": false, "cachingEnabled": false, "throttlingBurstLimit": 1000 } } } ] }从服务模型看,get-stages的输出形状为Stages,主体是一个item数组(ListOfStage),数组中每个元素都是一个Stage结构。下表按Stage形状的成员定义(见 service-2.json)梳理了各字段含义:
| 字段 | 类型 | 说明 |
|---|---|---|
stageName | String | 阶段名称,是调用 API 时 URI 中的第一个路径段 |
deploymentId | String | 该阶段当前指向的 Deployment 标识符 |
clientCertificateId | String | 该阶段绑定的客户端证书标识符 |
description | String | 阶段描述 |
cacheClusterEnabled | Boolean | 是否启用缓存集群;启用后还需在方法级把cachingEnabled置为true才能真正缓存响应 |
cacheClusterSize | CacheClusterSize | 缓存集群容量(GB) |
cacheClusterStatus | CacheClusterStatus | 缓存集群状态 |
methodSettings | Map | 以/{resource}/{method}为键的方法级设置映射 |
variables | Map | 阶段变量,名称允许字母数字与下划线 |
documentationVersion | String | 关联的 API 文档版本 |
accessLogSettings | AccessLogSettings | 访问日志设置(format与destinationArn) |
canarySettings | CanarySettings | 金丝雀部署设置(percentTraffic、deploymentId、stageVariableOverrides、useStageCache) |
tracingEnabled | Boolean | 是否启用 X-Ray 主动追踪 |
webAclArn | String | 关联的 Web ACL 的 ARN |
tags | Map | 资源标签集合 |
createdDate | Timestamp | 阶段创建时间戳 |
lastUpdatedDate | Timestamp | 阶段最后更新时间戳 |
缓存集群状态枚举
cacheClusterStatus字段由服务模型中的CacheClusterStatus枚举约束,取值仅限以下五种:
CREATE_IN_PROGRESS、AVAILABLE、DELETE_IN_PROGRESS、NOT_AVAILABLE、FLUSH_IN_PROGRESS其中AVAILABLE表示缓存集群可用;示例输出中显示为AVAILABLE即说明该阶段的缓存集群已就绪。
缓存集群容量枚举
cacheClusterSize同样有固定取值集合,单位为 GB:
0.5、1.6、6.1、13.5、28.4、58.2、118、237示例中的"0.5"即选择了最小的 0.5 GB 缓存容量。
深入 methodSettings:方法级配置解读
示例输出的methodSettings中,键为~1resource~1subresource/POST。这里的~1是 API Gateway 对/的转义编码(~1表示斜杠、~0表示波浪号),因此该键实际对应/{resource}/{subresource}/POST,即某个子资源的 POST 方法。服务模型将methodSettings定义为MapOfMethodSettings,其值为MethodSetting结构,各字段含义如下(见 service-2.json):
| 字段 | 类型 | 说明 |
|---|---|---|
metricsEnabled | Boolean | 是否启用 CloudWatch 指标 |
loggingLevel | String | 日志级别,合法值为OFF、ERROR、INFO,影响写入 CloudWatch Logs 的日志条目 |
dataTraceEnabled | Boolean | 是否启用数据跟踪日志,可用于排查问题,但可能记录大量数据 |
throttlingBurstLimit | Integer | 限流突发(burst)上限 |
throttlingRateLimit | Double | 限流速率上限 |
cachingEnabled | Boolean | 是否缓存响应;前提是该阶段已启用缓存集群 |
cacheTtlInSeconds | Integer | 缓存响应 TTL(秒),越大缓存越久 |
cacheDataEncrypted | Boolean | 缓存的响应是否加密 |
requireAuthorizationForCacheControl | Boolean | 缓存失效请求是否需要授权 |
unauthorizedCacheControlHeaderStrategy | String | 未授权缓存控制请求的处理策略,枚举值为FAIL_WITH_403、SUCCEED_WITH_RESPONSE_HEADER、SUCCEED_WITHOUT_RESPONSE_HEADER |
对照示例:loggingLevel: "INFO"意味着该方法的 INFO 级日志会进入 CloudWatch Logs;throttlingRateLimit: 500.0与throttlingBurstLimit: 1000表示每秒最多 500 次请求、突发上限 1000 次;cachingEnabled: false表示即使阶段缓存集群已启用,该方法本身也未开启响应缓存。可见阶段级缓存与方法级缓存是两个独立开关,排查缓存不生效时需同时检查这两处。
与 get-stage 的配合使用
get-stage.rst 提供了单阶段查询的完整示例:
aws apigateway get-stage --rest-api-id 1234123412 --stage-name dev其输出结构与get-stages中的单个元素一致,但methodSettings会展开更多方法路径(如*/*通配设置与具体路径设置并存),且可能包含unauthorizedCacheControlHeaderStrategy、requireAuthorizationForCacheControl等字段。两者的典型配合流程是:先用get-stages确认某个 API 下存在哪些阶段及各自指向的部署,再用get-stage --stage-name <name>深入查看单个阶段的完整配置。
命令的底层实现依据
本文涉及的参数与返回字段均可在仓库服务模型中验证:
- 操作定义:
GetStages的输入输出形状位于 service-2.json,其中GetStagesRequest声明了restApiId与可选deploymentId; - 返回结构:
Stages/ListOfStage/Stage形状定义了item数组与各阶段字段; - 枚举约束:
CacheClusterStatus、CacheClusterSize、UnauthorizedCacheControlHeaderStrategy均在该文件中以enum形式给出; - 说明文档:官方示例存放在 get-stages.rst,可作为命令输出格式的直接参照。
值得注意的一点:从 paginators-1.json 看,GetStages并未被声明为可分页操作(分页操作清单中包含GetRestApis、GetDeployments、GetResources等,但不含GetStages),因此该命令返回的是 API 下阶段的完整集合,无需处理分页标记。
小结
aws apigateway get-stages是一个“一键总览”型命令:通过--rest-api-id列出某 API 下的全部阶段,从阶段名、部署版本、缓存集群状态到方法级限流与缓存配置一应俱全。结合get-stage做单点深入,配合本指南对Stage与MethodSetting各字段的解读,即可快速定位部署与配置问题。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考