aws apigatewayv2 get-stage 实战指南:在 aws-cli 中查询 HTTP API 阶段配置
2026/9/14 5:11:34 网站建设 项目流程

aws apigatewayv2 get-stage 实战指南:在 aws-cli 中查询 HTTP API 阶段配置

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

本文以 aws-cli 官方示例awscli/examples/apigatewayv2/get-stage.rst为主体,详解aws apigatewayv2 get-stage命令的使用方法、完整输出字段含义,并结合仓库内 API 服务模型(service-2.json)剖析该命令背后的 HTTP 请求映射、参数约束与可能返回的错误。读完本文,你可以独立完成“查询某个 HTTP API 指定阶段的配置、部署 ID 与阶段变量”这一操作,并据此与create-stageupdate-stageget-stages等命令组合成完整的阶段管理流程。

命令定位与适用场景

get-stageapigatewayv2命令组下的只读查询操作,用于获取某个 API Gateway HTTP API(REST API 对应的是apigateway命令组)中**一个指定阶段(stage)**的完整配置信息。典型场景包括:

  • 确认生产阶段(如prod)当前绑定的DeploymentId,排查“改动未生效”类问题;
  • 检查阶段变量(StageVariables),例如按环境指向不同 Lambda 函数的配置;
  • 核对限流设置(RouteSettings)与详细指标开关(DefaultRouteSettings)。

在 get-stage.rst 中,官方给出的示例意图就是“获取一个阶段的信息”(To retrieve information about a stage)。

命令语法与参数说明

从服务模型 service-2.json 中GetStageRequest的定义可以确认,该命令只有两个参数,且均为必填required列表中同时包含StageNameApiId):

参数必填说明
--api-idAPI 标识符。在服务模型中其locationuri,会被填入请求路径的{apiId}位置
--stage-name阶段名称。服务模型中的文档注明:阶段名只能包含字母、数字、连字符(-)和下划线(_),最大长度128个字符

两个参数在模型中的定义如下(service-2.json):

"GetStageRequest": { "type": "structure", "members": { "ApiId": { "shape": "__string", "location": "uri", "locationName": "apiId", "documentation": "<p>The API identifier.</p>" }, "StageName": { "shape": "__string", "location": "uri", "locationName": "stageName", "documentation": "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>" } }, "required": [ "StageName", "ApiId" ] }

完整示例:查询 prod 阶段

以下示例完整继承自 get-stage.rst,用于显示某个 API 的prod阶段信息:

aws apigatewayv2 get-stage \ --api-id a1b2c3d4 \ --stage-name prod

实际使用时,将a1b2c3d4替换为aws apigatewayv2 get-apis返回结果中的真实apiId。若不确定 API 下存在哪些阶段,可先用get-stages列举(见 get-stages.rst 中的示例)。

命令成功时的输出为(同样摘自 get-stage.rst):

{ "CreatedDate": "2020-04-08T00:36:05Z", "DefaultRouteSettings": { "DetailedMetricsEnabled": false }, "DeploymentId": "x1zwyv", "LastUpdatedDate": "2020-04-08T00:36:13Z", "RouteSettings": {}, "StageName": "prod", "StageVariables": { "function": "my-prod-function" }, "Tags": {} }

输出字段逐项解析

结合服务模型中GetStageResponseStage结构的定义(service-2.json),各字段含义如下:

  • CreatedDate/LastUpdatedDate:阶段的创建时间与最近修改时间,格式为 ISO 8601 UTC 时间戳。
  • DeploymentId:该阶段当前指向的部署(deployment)标识,例如x1zwyv。HTTP API 中阶段与部署是多对多关系,此字段是排查“流量打到哪个版本”的关键。对照 get-stages.rst 的列举输出可以看到,某些阶段(如 API Gateway 自动管理的$default阶段,带有"AutoDeploy": true)不一定返回该字段。
  • DefaultRouteSettings.DetailedMetricsEnabled:默认路由级别的 CloudWatch 详细指标开关,示例中为false
  • RouteSettings:按路由(route)粒度配置的限流/指标设置。示例中为空对象{},表示未做单路由覆盖;若通过update-stage --route-settings配置过限流,这里会显示形如"GET /pets": {"ThrottlingBurstLimit": 100, "ThrottlingRateLimit": 2000.0}的内容(参考 update-stage.rst 的输出)。
  • StageName:阶段名,即请求参数--stage-name的回显,示例中为prod
  • StageVariables:阶段变量,是一个字符串键值对映射。示例中的"function": "my-prod-function"演示了按环境注入变量值的典型用法:dev阶段可指向my-dev-functionprod阶段指向my-prod-function,从而让同一份 API 定义在不同阶段路由到不同后端资源。在 get-stages.rst 的输出中可以看到同一 API 下devprod两个阶段各自的变量取值。
  • Tags:阶段上附加的资源标签键值对,示例中为空。

底层实现:CLI 参数如何映射到 HTTP 请求

从服务模型的GetStage操作定义可以确认(service-2.json):

"GetStage": { "name": "GetStage", "http": { "method": "GET", "requestUri": "/v2/apis/{apiId}/stages/{stageName}", "responseCode": 200 }, "input": { "shape": "GetStageRequest" }, "output": { "shape": "GetStageResponse" }, "errors": [ { "shape": "NotFoundException" }, { "shape": "TooManyRequestsException" } ], "documentation": "<p>Gets a Stage.</p>" }

由此得到三点实现层面的事实:

  1. 请求映射:CLI 的aws apigatewayv2 get-stage会被 botocore 序列化为对GET /v2/apis/{apiId}/stages/{stageName}的 HTTP 请求,--api-id--stage-name直接填充到 URI 路径中(模型中两参数的location均为uri),成功时返回 HTTP 200。
  2. 参数校验:由于两个参数都位于required列表,缺少任一参数时 CLI 会在本地直接报Missing required parameter类错误,不会发出请求。
  3. 错误语义:模型声明该操作可能返回NotFoundException(指定的 API 或阶段不存在)与TooManyRequestsException(客户端请求频率超过允许值)。因此当命令报 404 时,应优先核对--api-id是否属于 apigatewayv2(HTTP API),以及阶段名是否拼写正确。

此外要注意 API 版本维度:该命令依赖的服务模型文件位于 awscli/botocore/data/apigatewayv2/2018-11-29/,2018-11-29即 apigatewayv2 的 API 版本。如果通过--api-version指定了其他可用版本,行为以对应版本的模型为准。

与其他 stage 命令的配合

get-stage只是阶段生命周期中的“查询”一环,示例文档目录 awscli/examples/apigatewayv2/ 下与阶段管理直接相关的命令还包括:

  • 创建阶段create-stage,最简形式为aws apigatewayv2 create-stage --api-id a1b2c3d4 --stage-name dev(见 create-stage.rst);
  • 列举阶段get-stages --api-id a1b2c3d4返回该 API 下所有阶段的Items数组(见 get-stages.rst),是定位--stage-name取值的推荐前置步骤;
  • 修改阶段update-stage可用于设置路由级限流,例如--route-settings '{"GET /pets":{"ThrottlingBurstLimit":100,"ThrottlingRateLimit":2000}}'(见 update-stage.rst);
  • 删除阶段delete-stage(见 delete-stage.rst)。

一个常见的核对流程是:先create-stage建立dev/prod,用update-stage注入阶段变量或限流,随后以get-stage确认最终落地的StageVariablesRouteSettingsDeploymentId是否与预期一致。

小结

aws apigatewayv2 get-stage的参数极简(必填--api-id--stage-name),但返回的 JSON 完整覆盖了一个 HTTP API 阶段的状态:时间戳、部署绑定(DeploymentId)、默认与路由级限流/指标设置(DefaultRouteSettingsRouteSettings)、阶段变量(StageVariables)与标签。结合服务模型 service-2.json 可以确认它对应GET /v2/apis/{apiId}/stages/{stageName}请求,失败时典型错误为NotFoundExceptionTooManyRequestsException。掌握这一命令后,再配合 create-stage.rst、get-stages.rst 与 update-stage.rst 中的示例,即可在 aws-cli 中完成 HTTP API 阶段的全生命周期管理。

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

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

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

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

立即咨询