news 2026/9/16 20:00:41

terraform-provider-aws 6.42.0 版本发布详解:MQ 配置删除行为变更、PromQL 告警支持与大批量 List Resource 上线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
terraform-provider-aws 6.42.0 版本发布详解:MQ 配置删除行为变更、PromQL 告警支持与大批量 List Resource 上线

terraform-provider-aws 6.42.0 版本发布详解:MQ 配置删除行为变更、PromQL 告警支持与大批量 List Resource 上线

【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws

本篇围绕 terraform-provider-aws 6.42.0 版本发布说明展开,逐一拆解该版本中的破坏性变更、全新资源/数据源、关键增强与缺陷修复,并结合仓库源码(如internal/service/mq/configuration.gointernal/service/cloudwatch/metric_alarm.gointernal/service/ec2/)验证底层实现。读完本文,你将掌握aws_mq_configuration新增的skip_destroy用法、CloudWatch 指标告警的 PromQL 配置方式、aws_eip在隔离区域的行为兜底,以及 13 个新增 List Resource 的落地场景。

版本概览

6.42.0(2026-04-22)是 AWS Provider 在 6.x 系列中的一个功能密集版本,变更类型覆盖四个方面:

  • 破坏性变更(BREAKING CHANGES)aws_mq_configuration资源销毁行为从 no-op 变为真实删除;
  • 新功能(FEATURES):新增 2 个数据源、13 个 List Resource、2 个常规 Resource;
  • 增强(ENHANCEMENTS):涉及 EKS 资源身份、CloudWatch PromQL 告警、ODB 跨区域恢复、S3 目录桶 Inventory、Storage Lens 导出等;
  • 缺陷修复(BUG FIXES):覆盖 Bedrock Guardrail、MSK 集群、Security Hub 成员漂移、ECS 服务列举等十余项。

对应发布说明原文见仓库中的 .changes/6.x/6.42.0.md,完整变更历史可在 CHANGELOG.md 中追溯。

破坏性变更:aws_mq_configuration 删除行为落地

6.42.0 最值得关注的破坏性变更来自aws_mq_configuration销毁该资源时现在会真正调用 AWS API 删除配置,而此前由于 MQ 服务缺少对应的删除 API 操作,delete 一直是一个 no-op,导致资源在 Terraform 状态中被移除后,云端配置仍残留、处于无人管理(unmanaged)状态。正因为旧行为会造成资源泄漏,维护者认为在 minor 版本中引入该破坏性变更是可接受的。

源码实现:从 no-op 到真实删除

在 internal/service/mq/configuration.go 的resourceConfigurationDelete中可以看到完整实现:

func resourceConfigurationDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { var diags diag.Diagnostics conn := meta.(*conns.AWSClient).MQClient(ctx) if v, ok := d.GetOk(names.AttrSkipDestroy); ok && v.(bool) { log.Printf("[DEBUG] Retaining MQ Configuration: %s", d.Id()) return diags } log.Printf("[INFO] Deleting MQ Configuration: %s", d.Id()) input := mq.DeleteConfigurationInput{ ConfigurationId: aws.String(d.Id()), } const ( timeout = 1 * time.Minute ) _, err := tfresource.RetryWhenIsAany, *types.ConflictException (any, error) { return conn.DeleteConfiguration(ctx, &input) }) if errs.IsA*types.NotFoundException { return diags } if err != nil { return sdkdiag.AppendErrorf(diags, "deleting MQ Configuration (%s): %s", d.Id(), err) } return diags }

实现要点:

  • 重试机制:删除调用被tfresource.RetryWhenIsA包裹,遇到ConflictException会在 1 分钟超时内自动重试,适用于配置仍被 broker 引用等并发冲突场景;
  • 幂等处理:若 AWS 侧返回NotFoundException,说明配置已不存在,直接静默返回,保证terraform destroy的幂等性;
  • skip_destroy逃生口:删除逻辑的第一行即检查skip_destroy,为 true 时仅记录日志并保留云端资源,用于恢复旧版 no-op 行为。

skip_destroy 参数与升级指引

该破坏性变更随附新增的skip_destroy参数(默认false)。升级到 6.42.0 前,建议评估现有aws_mq_configuration的删除预期:

  • 默认行为(推荐):保持skip_destroy = false,让terraform destroy同步清理 MQ 配置,避免孤儿资源;
  • 恢复旧行为:若你的工作流依赖"状态删除、云端保留"的旧语义,请在配置中显式设置:
resource "aws_mq_configuration" "example" { name = "example-config" engine_type = "ActiveMQ" engine_version = "5.18.0" data = file("config.xml") skip_destroy = true }

需要注意,真实删除需要mq:DeleteConfigurationIAM 权限。若执行删除的凭证缺少该权限,terraform destroy将报错失败;此前 no-op 行为下该权限并不必要。仓库测试 internal/service/mq/configuration_test.go 中的用例即验证了skip_destroy = true时资源被保留的场景,而 internal/service/mq/broker_test.go 中 broker 相关测试也覆盖了该参数组合。

新数据源:EC2 Service Link Virtual Interface

本版本新增了两个 EC2 相关数据源:

  • aws_ec2_service_link_virtual_interface(单接口查询)
  • aws_ec2_service_link_virtual_interfaces(批量列举)

它们基于 EC2 的DescribeServiceLinkVirtualInterfacesAPI。以批量数据源为例,internal/service/ec2/service_link_virtual_interfaces_data_source.go 中的 Schema 包含ids(计算属性,返回接口 ID 列表)、tags(标签过滤)以及filter块(自定义过滤器),Read方法通过 findServiceLinkVirtualInterfaces 调用 SDK 并将结果扁平化为 ID 列表:

data "aws_ec2_service_link_virtual_interfaces" "all" { filter { name = "status" values = ["available"] } }

配套测试见 internal/service/ec2/service_link_virtual_interfaces_data_source_test.go,单接口版本位于 service_link_virtual_interface_data_source.go。

新资源:cloudwatch_otel_enrichment 与 ebs_volume_copy

aws_cloudwatch_otel_enrichment

新增的 CloudWatch OTel Enrichment 资源(PR #47275)用于配置 OpenTelemetry 指标/日志富化处理,可在 CloudWatch 观测管道中对接 OTel 数据流。

aws_ebs_volume_copy

新增的 EBS 卷复制资源(PR #47311)允许通过 Terraform 管理"卷复制"这一有状态对象。相比直接依赖aws_ebs_volume+ 数据拷贝命令,该资源将复制关系纳入状态管理,支持后续查询与清理。它与同期新增的aws_ebs_volumeaws_ebs_volume_attachmentList Resource 形成了 EBS 资源族的完整覆盖。

批量落地:13 个新 List Resource

6.42.0 集中引入了一批新的List Resource(基于框架的列表型资源,见 internal/framework/with_list.go 及相关生成模板,设计规范可参考 docs/design-decisions/relationship-resource-design-standards.md):

List Resource说明关联 PR
aws_apigatewayv2_apiAPI Gateway V2 API#47472
aws_cloudwatch_log_metric_filter日志指标过滤器(同步获得 Resource Identity 支持)#47495
aws_config_remediation_configurationConfig 修复配置#47514
aws_ebs_volumeEBS 卷#47551
aws_ebs_volume_attachmentEBS 卷挂载#47561
aws_eip弹性 IP(同步获得 Resource Identity 支持)#47557
aws_iam_user_policy_attachmentIAM 用户策略挂载#47467
aws_internet_gateway互联网网关#47529
aws_lambda_layer_versionLambda 层版本(同步获得 Resource Identity 支持)#47496
aws_launch_template启动模板(同步获得 Resource Identity 支持)#47540
aws_route53_zoneRoute 53 托管区#47494
aws_sagemaker_hyper_parameter_tuning_jobSageMaker 超参调优作业#47138
aws_sqs_queue_policySQS 队列策略#47489

List Resource 遵循"一个逻辑资源对象对应多个云侧条目"的建模方式,方便将原本散落的子条目作为整体进行管理。多个资源同时声明获得Resource Identity 支持aws_eipaws_launch_templateaws_lambda_layer_versionaws_ebs_volume_attachmentaws_cloudwatch_log_metric_filter),意味着这些资源可以在 plan 阶段通过 identity 而非 ID 进行匹配,相关机制见 docs/resource-identity.md 与 internal/framework/with_identity.go。

其中aws_sagemaker_hyper_parameter_tuning_job同时以常规 Resource 和 List Resource 两种形态提供(分别对应 #47138 的实现),允许用户按需选择管理粒度。

关键增强逐项解读

CloudWatch 指标告警支持 PromQL 查询

aws_cloudwatch_metric_alarm新增evaluation_criteriaevaluation_interval参数,以支持 CloudWatch 的 PromQL 告警能力;同时comparison_operatorevaluation_periods由必填改为 Optional(PR #47449)。

从 internal/service/cloudwatch/metric_alarm.go 的 Schema 可以看到约束关系:

  • evaluation_criteriametric_namemetric_query构成ExactlyOneOf,即三种告警定义方式互斥;
  • evaluation_criteria.promql_criteria为必填块,含query(必填,长度 1~10000 字符)、pending_periodrecovery_period(可选,0~86400 秒);
  • evaluation_interval仅允许102030或 60 的倍数(validation.Any(validation.IntInSlice([]int{10, 20, 30}), validation.IntDivisibleBy(60))),且必须与evaluation_criteria同时出现(RequiredWith)。

一个完整的 PromQL 告警配置示例(取自仓库测试 internal/service/cloudwatch/metric_alarm_test.go):

resource "aws_cloudwatch_metric_alarm" "example" { alarm_name = "promql-alarm" evaluation_criteria { promql_criteria { query = "histogram_quantile(0.99, CPUUtilization) > 0.5" pending_period = 120 recovery_period = 300 } } evaluation_interval = 600 }

对应测试断言(metric_alarm_test.go)验证了evaluation_criteria.0.promql_criteria.0.querypending_periodrecovery_periodevaluation_interval的读写一致性。

aws_eip:Resource Identity 与隔离区域兜底

aws_eip在 6.42.0 中获得 Resource Identity 支持,同时修复了隔离区域(isolated regions)中的UnsupportedOperation报错问题(PR #47091)。

从 internal/service/ec2/ec2_eip.go 可以看到,读取 EIP 的 domain name 属性(ptr_record)时,对以下两类错误做了降级处理而非直接失败:

// Fallback for ISO regions case tfawserr.ErrMessageContains(err, "InvalidAction", "not valid for this web service"), tfawserr.ErrMessageContains(err, errCodeUnsupportedOperation, "not available in this region"): d.Set("ptr_record", nil)

即:当某区域不支持该操作时,ptr_record被置空并继续正常读取其余属性。错误码常量errCodeUnsupportedOperation = "UnsupportedOperation"定义于 internal/service/ec2/errors.go。

需要注意发布说明中的提示:由于无法在隔离区域中轻易测试该行为,此修复为"尽力而为"(best effort),维护者呼吁社区在隔离区域帮助验证。如果你部署在 AWS 中国区或 GovCloud 等隔离分区,升级后请重点回归aws_eip的读取流程。

EKS 资源族批量获得 Resource Identity

aws_eks_access_entryaws_eks_access_policy_associationaws_eks_addonaws_eks_capabilityaws_eks_identity_provider_configaws_eks_node_groupaws_eks_pod_identity_associationaws_fargate_profile八个资源统一获得 Resource Identity 支持(PR #47428)。同时:

  • aws_eks_addon新增namespace_config参数(#44087);
  • aws_eks_identity_provider_config新增identity_provider_config_name属性(#47428)。

其余增强速览

  • aws_network_interface:新增ena_srd_specification参数以支持 ENA Express 高吞吐特性(数据源aws_network_interface同步新增同名属性,PR #46669);
  • aws_identitystore_user/ 数据源:新增user_status属性(#47323);
  • aws_odb_network:增强以支持跨区域恢复(cross-region restore,#46317),并在修复部分解决了创建期间statusManagedService()statusNetwork()的空指针 panic(#47159);
  • aws_mq_configuration:除破坏性变更外还新增skip_destroy参数(#47273);
  • aws_networkmanager_site_to_site_vpn_attachmentrouting_policy_label支持就地更新,需要networkmanager:PutAttachmentRoutingPolicyLabelnetworkmanager:RemoveAttachmentRoutingPolicyLabel权限(#47541);
  • aws_rds_integration:新增integration_identifier属性,data_filterintegration_name支持就地更新(#45632);
  • aws_s3_bucket_inventory:支持目录桶(directory buckets)的 Inventory(#47555);
  • aws_s3control_storage_lens_configuration:新增storage_lens_configuration.expanded_prefixes_data_exportstorage_lens_configuration.prefix_delimiter参数(#47205);
  • aws_s3files_file_system:新增accept_bucket_warning参数(#47510);
  • 网络对等连接:通过peer_network_cidrs参数管理对端 CIDR(#46207)。

缺陷修复要点

本版本修复了多个影响面较大的问题:

  • aws_bedrock_guardrailtopic_policy_config.topics_config.definition最大长度从 200 提升到 1000,以支持标准层级(#47574);
  • aws_cloudwatch_alarm_mute_rule:修复mute_targets.alarm_names排序不一致导致的 "Provider produced inconsistent result after apply" 报错(#47507);
  • aws_ecs_service:列举时排除 Express-Mode 服务(#47533);
  • aws_msk_cluster:修复更新broker_node_group_info.vpc_connectivity配置块时的请求参数错误,该问题由 v6.40.0 引入(#47515);
  • aws_odb_network:修复创建期间 finder 返回 nil 时statusManagedService()/statusNetwork()的空指针 panic(#47159);
  • aws_securityhub_member:仅在 AWS API 返回时才设置email,且不再根据member_status反推invite,消除组织成员场景下的状态漂移(#47106);
  • aws_appintegrations_data_integration:修复source_uri的正则校验(#47498)。

其他注意事项

  • CDKTF 文档移除:从本版本起,Provider 内不再附带 CDKTF 相关文档(#47484),如需 CDKTF 使用说明请以 CDKTF 官方渠道为准;
  • 破坏性变更评估:升级前务必结合"破坏性变更"一节评估aws_mq_configuration的删除语义与 IAM 权限,必要时先设置skip_destroy = true过渡;
  • 验证途径:Provider 的安装与验证方式与常规 Terraform Provider 一致,可参考仓库 README.md 与 docs/development-environment.md;针对本版本涉及的各项变更,仓库内已有对应的单元与验收测试(如internal/service/cloudwatch/metric_alarm_test.gointernal/service/ec2/service_link_virtual_interface_data_source_test.gointernal/service/mq/configuration_test.go)可供参考。

【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 19:59:58

Dell R720 RAID在线扩容实战:固件、驱动与OS协同要点

1. 这不是“加硬盘就完事”——RAID在线扩容的真实门槛与认知误区很多人看到“RAID在线扩容”四个字,第一反应是:换块大硬盘,点几下管理界面,容量就涨了。我在Dell R720机房里亲手拆过37块硬盘、重配过11次PERC卡阵列,…

作者头像 李华
网站建设 2026/9/16 19:59:04

纯Python+NumPy手写多层感知机:从反向传播到决策边界实战

前两天有个读者问我:“我已经会用 sklearn 调 MLPClassifier 了,还有必要自己用 Python 从零写一个多层感知机吗?”我的回答是:如果你只是想交作业,那没必要;但如果你想真的搞懂神经网络在干什么&#xff0…

作者头像 李华
网站建设 2026/9/16 19:57:44

产品经理用Cursor自动生成技术文档:规则文件与提示词实战指南

产品经理用Cursor自动生成技术文档,这段时间在我们团队内部已经成了默认流程。你可能听到“Cursor”第一反应是“AI编程工具,跟我产品经理有什么关系”,但实际上,它是目前最合适做“需求语言到工程语言”翻译的AI编辑器。配合一套…

作者头像 李华