AWS CLI 实战:使用 apigatewayv2 delete-vpc-link 删除 HTTP API 的 VPC 链接
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
本指南以 AWS CLI 官方示例库中的 delete-vpc-link.rst 为骨架,系统讲解如何通过aws apigatewayv2 delete-vpc-link命令删除 HTTP API 的 VPC link,并结合当前仓库中的配套示例(create / get / update)与底层 API 模型(service-2.json),带你走完 VPC link 从创建、查询、更新到删除的完整生命周期,并理解删除操作在协议层的真实语义。
命令概览:一条命令删除 VPC link
VPC link 是 API Gateway 与用户在 VPC 中部署的私有资源(如 ELB、ALB、NLB)之间建立私密连接的通道。当某个 HTTP API 的集成不再需要使用 VPC 内的私有端点时,就可以用delete-vpc-link将其删除。仓库中的官方示例给出了最简用法:
aws apigatewayv2 delete-vpc-link \ --vpc-link-id abcd123--vpc-link-id:必填参数,指定要删除的 VPC link 的唯一 ID,即创建时返回的VpcLinkId。- 命令执行成功后不产生任何标准输出(This command produces no output),这与该命令的响应模型完全吻合(详见下文"删除操作在协议层如何工作"一节)。
参数详解:唯一必填参数 VpcLinkId
从 API 模型看,DeleteVpcLink操作的请求结构定义在 service-2.json 的 DeleteVpcLinkRequest 中:
"DeleteVpcLinkRequest": { "type": "structure", "members": { "VpcLinkId": { "shape": "__string", "location": "uri", "locationName": "vpcLinkId", "documentation": "<p>The ID of the VPC link.</p>" } }, "required": ["VpcLinkId"] }关键信息如下:
| 字段 | 位置 | 必填 | 说明 |
|---|---|---|---|
vpc-link-id | URI 路径(location: "uri",locationName: "vpcLinkId") | 是 | 要删除的 VPC link ID |
注意location为uri意味着该参数不是以请求体(JSON body)提交,而是拼接进请求路径,最终请求对应DELETE /v2/vpclinks/{vpcLinkId}。这也是为什么在 AWS CLI 命令行上必须显式传入--vpc-link-id,因为它是该操作唯一的入参。
完整实战:VPC link 生命周期四步走
为了让删除命令在真实环境中有的放矢,这里串联仓库中与 VPC link 相关的全部官方示例,展示完整生命周期。
第一步:创建 VPC link
参考 create-vpc-link.rst,创建时至少要提供名称、子网列表,并可指定安全组:
aws apigatewayv2 create-vpc-link \ --name MyVpcLink \ --subnet-ids subnet-aaaa subnet-bbbb \ --security-group-ids sg1234 sg5678返回结果(示例输出):
{ "CreatedDate": "2020-04-07T00:11:46Z", "Name": "MyVpcLink", "SecurityGroupIds": ["sg1234", "sg5678"], "SubnetIds": ["subnet-aaaa", "subnet-bbbb"], "Tags": {}, "VpcLinkId": "abcd123", "VpcLinkStatus": "PENDING", "VpcLinkStatusMessage": "VPC link is provisioning ENIs", "VpcLinkVersion": "V2" }VpcLinkId(示例中的abcd123)就是后续删除命令需要使用的值。
第二步:查询确认目标
删除前建议先用 get-vpc-links.rst 或get-vpc-link核对 ID 与状态:
aws apigatewayv2 get-vpc-links从示例输出可以看到 VPC link 进入可用状态后的特征:"VpcLinkStatus": "AVAILABLE"、"VpcLinkStatusMessage": "VPC link is ready to route traffic"。根据 service-2.json 的 VpcLinkStatus 枚举,状态共有PENDING、AVAILABLE、DELETING、FAILED、INACTIVE五种,其中DELETING即删除流程进行中的状态。
第三步:更新(可选)
如果只是改名而不打算删除,可参考 update-vpc-link.rst:
aws apigatewayv2 update-vpc-link \ --vpc-link-id abcd123 \ --name MyUpdatedVpcLink该示例明确提示:创建完成后,VPC link 的安全组与子网无法再修改,只能更新名称等字段。
第四步:删除
aws apigatewayv2 delete-vpc-link \ --vpc-link-id abcd123删除成功后无输出;若再次执行get-vpc-links,该链接将不再出现在列表中。
删除操作在协议层如何工作
从源码结构看,DeleteVpcLink在 service-2.json 中的定义揭示了三个值得注意的实现细节:
"DeleteVpcLink": { "name": "DeleteVpcLink", "http": { "method": "DELETE", "requestUri": "/v2/vpclinks/{vpcLinkId}", "responseCode": 202 }, "input": { "shape": "DeleteVpcLinkRequest" }, "output": { "shape": "DeleteVpcLinkResponse", "documentation": "<p>202 response</p>" }, "errors": [ { "shape": "NotFoundException", "documentation": "<p>The resource specified in the request was not found.</p>" }, { "shape": "TooManyRequestsException", "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>" } ], "documentation": "<p>Deletes a VPC link.</p>" }- HTTP 方法与路径:底层走
DELETE /v2/vpclinks/{vpcLinkId},是标准 RESTful 资源删除。 - 异步语义(202 Accepted):成功响应码是
202而非200/204,表明删除是被接受处理的异步操作,而非立即完成的同步删除。这解释了为什么 VPC link 状态枚举中存在DELETING状态——服务端接受删除请求后,需要异步释放其背后的弹性网络接口(ENI)等资源,期间链接会处于删除中状态,之后才会从查询结果中消失。 - 空响应体:
DeleteVpcLinkResponse在 service-2.json 中定义为"members": {}的空结构。这正是官方示例中"命令不产生输出"的直接原因——响应模型本身没有任何可序列化的字段。
常见错误与排障
根据DeleteVpcLink的错误定义,该操作可能抛出两类异常,CLI 会以非零退出码与 stderr 错误消息呈现:
| 异常 | 触发场景 | 排查建议 |
|---|---|---|
NotFoundException | 传入的vpc-link-id不存在、已被删除或不属于当前账户 | 用aws apigatewayv2 get-vpc-links复核 ID 拼写与所属区域 |
TooManyRequestsException | 单位时间内请求数超过 API Gateway 的调用限制 | 采用指数退避重试,或降低调用频率 |
另外,从 API 模型看,该操作没有声明BadRequestException(不同于CreateVpcLink),说明除上述两类异常外,入参层面的校验失败主要以NotFoundException形式呈现(例如指向不存在的 ID)。若删除操作始终失败,建议配合 CloudTrail 中的DeleteVpcLink事件审计调用来源与错误码。
小结
aws apigatewayv2 delete-vpc-link --vpc-link-id <id>是一个参数极少、行为明确的管理类命令:只接受唯一的--vpc-link-id参数,走DELETE /v2/vpclinks/{vpcLinkId}协议,以202异步接受删除并以空响应返回。结合仓库中的 create-vpc-link.rst、get-vpc-links.rst 与 update-vpc-link.rst,你可以安全地完成 VPC link 从创建到销毁的闭环管理。在自动化脚本(如 CI/CD 清理流程)中,可先通过get-vpc-links解析出目标VpcLinkId,再循环调用删除命令,并结合返回码判断是否真正清理成功。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考