恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
使用 AWS CLI `update-connection-group` 更新 CloudFront 连接组:参数、ETag 乐观锁与完整生命周期实战
首页
资讯中心
/
使用 AWS CLI `update-connection-group` 更新 CloudFront 连接组:参数、ETag 乐观锁与完整生命周期实战
使用 AWS CLI `update-connection-group` 更新 CloudFront 连接组:参数、ETag 乐观锁与完整生命周期实战
发布时间:2026/9/15 10:20:30
使用 AWS CLIupdate-connection-group更新 CloudFront 连接组参数、ETag 乐观锁与完整生命周期实战【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读本文围绕 AWS CLI 官方示例文档 update-connection-group.rst深入讲解如何通过aws cloudfront update-connection-group命令修改 CloudFront 连接组Connection Group——包括启用/禁用连接组、切换 IPv6 开关等核心能力。你将掌握该命令的完整参数语义、If-MatchETag乐观锁的用法、返回字段的逐项含义以及连接组从创建到删除的完整生命周期操作并对照 AWS CLI 仓库中的服务模型源码理解其底层 HTTP 行为。什么是 CloudFront 连接组连接组Connection Group是 CloudFront 为**分布租户distribution tenant**提供的一种网络资源分组机制。从当前仓库的服务模型 service-2.json 中的ConnectionGroup结构定义可以看出一个连接组包含以下属性字段类型含义Idstring连接组的 IDNamestring连接组名称Arnstring连接组的 Amazon 资源名称ARNCreatedTime/LastModifiedTimetimestamp创建时间 / 最后更新时间Tagsmap标签集合Ipv6Enabledboolean是否启用 IPv6RoutingEndpointstring分配给连接组的路由端点即 DNS 名称形如d111111abcdef8.cloudfront.netAnycastIpListIdstringAnycast 静态 IP 列表的 IDStatusstring连接组状态如InProgress、DeployedEnabledboolean连接组是否处于启用状态IsDefaultboolean是否为分布租户的默认连接组根据模型中的文档说明当你首次创建分布租户且未显式指定连接组时CloudFront 会自动创建一个默认连接组并与该租户关联而自定义连接组则允许你按需配置网络的连接模式包括 IPv6 开关、Anycast 静态 IP 列表等。update-connection-group正是用于在创建之后对这类连接组做就地修改的命令。update-connection-group 命令参数详解命令签名与必选/可选参数从服务模型UpdateConnectionGroupRequestservice-2.json 中定义可以看到该操作对应的底层 API 为PUT /2020-05-31/connection-group/{Id}其中Id位于 URI 路径IfMatch位于If-Match请求头。转换到 AWS CLI 后update-connection-group支持的参数如下CLI 参数对应 API 字段必填说明--idIdURI 路径✅ 必填要更新的连接组 ID形如cg_2yHsDkcPKeUlVkk3aEgLKcjABC--if-matchIfMatchIf-Match头✅ 必填你在读取get该连接组时收到的ETag值用于并发保护--enabled/--no-enabledEnabled可选是否启用连接组默认由布尔值开关控制--ipv6-enabled/--no-ipv6-enabledIpv6Enabled可选是否为连接组启用 IPv6--anycast-ip-list-idAnycastIpListId可选要绑定的 Anycast 静态 IP 列表 ID需要特别注意的是--enabled与--ipv6-enabled这类布尔参数在 AWS CLI 中使用--xxx-enabled/--no-xxx-enabled的成对开关形式传入。未指定的布尔字段在更新请求中不会被提交这与其他某些 CloudFront 资源如分发配置的“整体替换”语义不同——更新连接组时只需携带你要修改的字段即可。典型用法示例下面这条命令来自官方示例文档 update-connection-group.rst演示了如何禁用连接组并同时关闭 IPv6aws cloudfront update-connection-group \ --id cg_2yHsDkcPKeUlVkk3aEgLKcjABC \ --no-ipv6-enabled \ --no-enabled \ --if-match E3UN6WX5RRO2ABC执行成功后的输出如下{ ETag: E1F83G8C2ARABC, ConnectionGroup: { Id: cg_2yHsDkcPKeUlVkk3aEgLKcjABC, Name: cg-example, Arn: arn:aws:cloudfront::123456789012:connection-group/cg_2yHsDkcPKeUlVkk3aEgLKcjABC, CreatedTime: 2025-06-09T20:58:35.48100000:00, LastModifiedTime: 2025-06-11T16:25:54.28000000:00, Ipv6Enabled: false, RoutingEndpoint: du9xp1elo1abc.cloudfront.net, Status: InProgress, Enabled: false, IsDefault: false } }返回结果逐字段解读根据UpdateConnectionGroupResult与ConnectionGroup的定义响应体中包含ETag顶层更新后连接组的最新版本标识。每次更新都会生成新的 ETag后续再执行更新时必须使用这个新值作为--if-match的输入。ConnectionGroup.Id连接组 ID与请求中的--id一致格式为cg_前缀的字符串。ConnectionGroup.Name连接组名称本示例为cg-example。ConnectionGroup.Arn连接组的 ARN形如arn:aws:cloudfront::123456789012:connection-group/cg_2yHsDkcPKeUlVkk3aEgLKcjABC可用于资源级权限管理与标签操作。ConnectionGroup.CreatedTime/LastModifiedTime创建时间与本次修改后的更新时间ISO 8601 格式。在本示例中可以看到两者相差约两天说明该连接组并非新建而是被更新的既有资源。ConnectionGroup.Ipv6Enabled本次更新后为false与--no-ipv6-enabled对应。ConnectionGroup.RoutingEndpoint连接组被分配的路由端点 DNS 名称du9xp1elo1abc.cloudfront.net由 CloudFront 分配创建后不可修改。ConnectionGroup.StatusInProgress表示本次更新正在生效中连接组配置会在后台传播最终变为Deployed状态可参见 get-connection-group.rst 中已部署连接组的输出示例。ConnectionGroup.Enabled本次更新后为false与--no-enabled对应。ConnectionGroup.IsDefaultfalse表示这是一个自定义连接组而非系统自动创建的默认连接组。理解If-Match与 ETag 乐观锁机制update-connection-group的请求模型中IfMatch被标记为必填参数其文档明确说明“这是你在读取要更新的连接组时收到的ETag头值”。这意味着更新操作采用乐观并发控制先通过aws cloudfront get-connection-group --identifier id读取当前连接组从响应中拿到ETag参见 get-connection-group.rst修改需要变更的字段并携带该ETag作为--if-match提交更新服务端校验If-Match头与连接组当前版本是否一致一致则应用更新并返回新的 ETag不一致则拒绝请求防止覆盖他人/其他流程的并发修改。在 service-2.json 中UpdateConnectionGroup操作声明的错误列表也印证了这一点PreconditionFailedIf-Match头携带的 ETag 与当前版本不匹配典型并发冲突需重新get后再试InvalidIfMatchVersion传入的If-Match值格式/版本非法EntityNotFound目标连接组不存在可能已被删除EntityAlreadyExists更新导致与已存在实体冲突EntityLimitExceeded超出实体数量限制ResourceInUse连接组当前正被其他资源如分布租户使用无法执行该更新AccessDenied当前凭证无权修改该连接组InvalidArgument请求参数不合法。因此每次更新成功后务必从响应中读取新的ETag如示例中的E1F83G8C2ARABC并妥善保存作为下一次更新的--if-match值。连接组完整生命周期从创建到删除update-connection-group只是连接组生命周期中的一环。在当前仓库的 cloudfront 示例目录awscli/examples/cloudfront/中可以看到围绕连接组的完整命令族服务模型中对应操作均可在 service-2.json 找到阶段命令底层 API说明创建create-connection-groupPOST /2020-05-31/connection-group新建连接组可指定名称、Anycast IP 列表、IPv6 开关与标签查询get-connection-groupGET /2020-05-31/connection-group/{Id}获取单个连接组详情及当前 ETag查询list-connection-groupsGET /2020-05-31/connection-group列出所有连接组摘要ConnectionGroupSummary更新update-connection-groupPUT /2020-05-31/connection-group/{Id}修改启用状态、IPv6 开关、Anycast IP 列表删除delete-connection-groupDELETE /2020-05-31/connection-group/{Id}删除不再需要的连接组以 create-connection-group.rst 为例创建命令为aws cloudfront create-connection-group \ --name cg-with-anycast-ip-list \ --no-ipv6-enabled \ --enabled \ --anycast-ip-list-id aip_CCkW6gKrDiBD4n78123ABC \ --tags Items[{Keyabc,Value123}]创建成功后会返回与更新命令同构的ConnectionGroup结构同样包含ETag、RoutingEndpoint、Status: InProgress等字段其中的ETag即为后续首次update-connection-group时--if-match的来源。一个典型的运维流程是# 1. 读取当前状态拿到 ETag aws cloudfront get-connection-group --identifier cg_2yHsDkcPKeUlVkk3aEgLKcjABC # 2. 基于返回的 ETag 做条件更新例如仅关闭 IPv6保持 Enabled 不变 aws cloudfront update-connection-group \ --id cg_2yHsDkcPKeUlVkk3aEgLKcjABC \ --no-ipv6-enabled \ --if-match E3UN6WX5RRO2ABC # 3. 如不再需要删除该连接组 aws cloudfront delete-connection-group --id cg_2yHsDkcPKeUlVkk3aEgLKcjABC注意由于update-connection-group属于 PUT 类操作服务模型中的错误列表还包含EntityNotFound目标不存在与ResourceInUse资源使用中等状态实际自动化脚本中应针对这些错误做相应的重试或告警处理。源码级依据与进一步探索本文涉及的参数定义、必填约束、HTTP 方法与错误列表均来自当前仓库的服务模型 awscli/botocore/data/cloudfront/2020-05-31/service-2.jsonUpdateConnectionGroup操作定义PUT /2020-05-31/connection-group/{Id}、200 响应码以及PreconditionFailed、ResourceInUse、AccessDenied、EntityNotFound、EntityAlreadyExists、EntityLimitExceeded、InvalidArgument、InvalidIfMatchVersion八种错误UpdateConnectionGroupRequest/UpdateConnectionGroupResult结构的字段与必填项ConnectionGroup/ConnectionGroupSummary结构及其字段文档说明。该 JSON 模型是 AWS CLI 为 CloudFront 服务生成命令、参数校验与序列化逻辑的数据基础也是理解update-connection-group各参数底层映射关系的权威依据。如果你想继续深入其他连接组操作可以对比阅读同一目录下的 create-connection-group.rst、get-connection-group.rst、list-connection-groups.rst、delete-connection-group.rst 以及 get-connection-group-by-routing-endpoint.rst 等官方示例从而形成对 CloudFront 连接组管理能力的完整认识。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考