AWS CLI 实战:使用 `delete-distribution-tenant` 删除 CloudFront Distribution Tenant 完整指南
2026/9/15 14:50:15 网站建设 项目流程

AWS CLI 实战:使用delete-distribution-tenant删除 CloudFront Distribution Tenant 完整指南

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

本文基于当前 aws-cli 仓库中的官方示例文档 delete-distribution-tenant.rst,系统讲解如何在多租户(multi-tenant)CloudFront 场景下安全、正确地删除一个 distribution tenant。你将掌握该命令的完整参数语义、删除前置条件(禁用状态与资源解绑)、ETag 并发控制机制,以及各类失败场景的排查思路,并通过仓库中的 service-2.json 服务模型从源码层面验证命令背后的 HTTP 行为与错误设计。

背景:什么是 CloudFront Distribution Tenant

在多租户 CloudFront 架构中,distribution tenant 是云厂商面向多租户场景提供的轻量级分发单元。与传统的完整 distribution 不同,tenant 通过共享底层连接组(ConnectionGroup)和父级分发(Distribution)来隔离不同租户的域名、参数与自定义配置。

从仓库中的get-distribution-tenant示例输出可以看到一个 tenant 的完整结构(get-distribution-tenant.rst):

{ "ETag": "E23ZP02F085ABC", "DistributionTenant": { "Id": "dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB", "DistributionId": "E1XNX8R2GOAABC", "Name": "example-tenant-2", "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB", "Domains": [ { "Domain": "example.com", "Status": "inactive" } ], "ConnectionGroupId": "cg_2wjDWTBKTlRB87cAaUQFaakABC", "CreatedTime": "2025-05-06T15:42:28.542000+00:00", "LastModifiedTime": "2025-05-06T15:42:37.724000+00:00", "Enabled": true, "Status": "InProgress" } }

注意其中的两个关键字段:Id(形如dt_开头的租户标识)和ETag(租户当前版本的强校验标签)。这两者正是删除命令的必需输入。

删除前置条件:禁用状态与资源解绑

官方示例文档明确指出,执行删除前必须满足两个硬性条件:

The distribution tenant must be disabled and can't be associated with any CloudFront resources.

即:

  1. tenant 必须处于禁用(disabled)状态——Enabled必须为false
  2. tenant 不能与任何 CloudFront 资源关联——例如已绑定的域名、Web ACL、参数引用等必须先行解除。

这一约束在服务端模型中得到了印证。service-2.jsonDeleteDistributionTenant操作的文档描述(service-2.json):

Deletes a distribution tenant. If you use this API operation to delete a distribution tenant that is currently enabled, the request will fail. To delete a distribution tenant, you must first disable the distribution tenant by using the UpdateDistributionTenant API operation.

也就是说,对仍处于 enabled 状态的 tenant 发起删除,请求会直接失败;必须先通过update-distribution-tenant将其禁用。

标准删除命令与参数详解

官方示例给出的删除命令如下(delete-distribution-tenant.rst):

aws cloudfront delete-distribution-tenant \ --id dt_2wjMUbg3NHZEQ7OfoalP5zi1AB \ --if-match ETVPDKIKX0DABC

--id

要删除的 distribution tenant 的唯一标识符,形如dt_xxxxxxxxxxxxxxxxxxxxxxx。在服务模型中(service-2.json),Id被标记为required且位于URI 路径中,因此它决定了实际请求的 URL:

DELETE /2020-05-31/distribution-tenant/{Id}

--if-match

If-Match请求头的值,即get-distribution-tenant响应中拿到的当前 ETag。服务模型对其说明如下:

The value of the ETag header that you received when retrieving the distribution tenant. This value is returned in the response of the GetDistributionTenant API operation.

它同样是required参数,作用是提供乐观并发控制:只有当服务端该租户的当前版本与传入的 ETag 一致时,删除才会执行,从而避免基于过期视图误删被他人并发修改过的租户。

成功返回

When successful, this command has no output.

命令成功执行时没有任何标准输出。这与服务端设计一致:DeleteDistributionTenant的 HTTPresponseCode204 No Content(service-2.json),即成功状态下响应体为空,CLI 自然不打印任何内容。如果希望确认删除是否生效,可随后执行get-distribution-tenant,此时应收到租户不存在的错误,或通过list-distribution-tenants确认列表中已无该租户。

完整操作流程:从查询到删除

一个规范的删除流程通常包含三步:

第 1 步:查询租户,获取 Id 与最新 ETag

aws cloudfront get-distribution-tenant \ --id dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB

记录输出中的Id与顶层ETag字段。

第 2 步:若租户仍为 enabled,先禁用

参考update-distribution-tenant示例(update-distribution-tenant.rst),通过--cli-input-json传入参数,将租户改为禁用状态:

aws cloudfront update-distribution-tenant \ --cli-input-json file://update-tenant.json

对应的update-tenant.json示意(节选):

{ "Id": "dt_2yMvQgam3QkJo2z54FDl91dk1AB", "IfMatch": "E1F83G8C2ARABC", "Parameters": [], "Customizations": {} }

禁用完成后,重新执行get-distribution-tenant确认输出中Enabled已变为false,并重新获取更新后的 ETag——注意禁用操作会使原 ETag 失效。

第 3 步:执行删除

aws cloudfront delete-distribution-tenant \ --id dt_2wjMUbg3NHZEQ7OfoalP5zi1AB \ --if-match <最新ETag>

失败场景与错误码排查

service-2.jsonDeleteDistributionTenant操作声明的错误列表(service-2.json),可以完整梳理出该命令可能遇到的失败场景:

错误形状HTTP 状态触发原因处理建议
PreconditionFailed412传入的If-MatchETag 与服务端当前版本不一致,租户在获取 ETag 后被修改重新调用get-distribution-tenant获取最新 ETag 后重试
EntityNotFound404指定的Id不存在(可能已被删除或拼写错误)list-distribution-tenants核对租户 Id
AccessDenied403当前凭证无删除权限检查 IAM 策略是否包含cloudfront:DeleteDistributionTenant权限
ResourceNotDisabled409租户仍处于 enabled 状态或仍关联 CloudFront 资源先用update-distribution-tenant禁用,并解除域名、Web ACL 等关联

其中ResourceNotDisabled的服务端描述为 "The specified CloudFront resource hasn't been disabled yet."(service-2.json),HTTP 状态码 409 且标记为 sender fault(调用方问题),是删除租户时最常见的错误之一。

从源码看命令的底层行为

结合服务模型可以确认以下实现事实:

  • HTTP 方法DeleteDistributionTenant映射为DELETE请求,请求路径为/2020-05-31/distribution-tenant/{Id}
  • If-MatchIfMatch参数通过location: headerlocationName: If-Match注入到请求头,而非查询参数或请求体;
  • 成功状态码responseCode: 204,对应 CLI "no output" 的成功表现;
  • 参数必填性DeleteDistributionTenantRequestIdIfMatch均标记为required,缺一不可,缺少时 AWS CLI 会在本地校验阶段直接报错并拒绝发送请求。

与相关命令的配合使用

删除租户是租户生命周期管理的最后一环,相关命令可参考仓库中的其他示例:

  • list-distribution-tenants.rst —— 列出全部租户,用于确认待删除租户是否存在;
  • get-distribution-tenant.rst —— 获取租户详情与 ETag;
  • update-distribution-tenant.rst —— 禁用租户、更新参数与自定义配置;
  • create-distribution-tenant.rst —— 创建租户,理解租户的生命周期起点;
  • associate-distribution-tenant-web-acl.rst 与 disassociate-distribution-tenant-web-acl.rst —— 关联/解除 Web ACL,删除前需确保已解除关联。

总结

aws cloudfront delete-distribution-tenant是 CloudFront 多租户分发管理中回收租户资源的唯一入口。其使用要点可归纳为四步:确认租户 Id → 用get-distribution-tenant获取最新 ETag → 确保租户已禁用且无资源关联 → 携带--id--if-match执行删除。命令成功无输出对应服务端的 204 响应;若遭遇失败,可依据错误码快速定位是并发冲突(412)、资源未禁用(409)、权限不足(403)还是资源不存在(404)。在自动化脚本中,建议将"查询 ETag → 禁用 → 再次查询 ETag → 删除"封装为幂等流程,以应对 ETag 在禁用操作后失效的问题。

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

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

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

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

立即咨询