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.go、internal/service/cloudwatch/metric_alarm.go、internal/service/ec2/验证底层实现。读完本文你将掌握aws_mq_configuration新增的skip_destroy用法、CloudWatch 指标告警的 PromQL 配置方式、aws_eip在隔离区域的行为兜底以及 13 个新增 List Resource 的落地场景。版本概览6.42.02026-04-22是 AWS Provider 在 6.x 系列中的一个功能密集版本变更类型覆盖四个方面破坏性变更BREAKING CHANGESaws_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_copyaws_cloudwatch_otel_enrichment新增的 CloudWatch OTel Enrichment 资源PR #47275用于配置 OpenTelemetry 指标/日志富化处理可在 CloudWatch 观测管道中对接 OTel 数据流。aws_ebs_volume_copy新增的 EBS 卷复制资源PR #47311允许通过 Terraform 管理卷复制这一有状态对象。相比直接依赖aws_ebs_volume 数据拷贝命令该资源将复制关系纳入状态管理支持后续查询与清理。它与同期新增的aws_ebs_volume、aws_ebs_volume_attachmentList Resource 形成了 EBS 资源族的完整覆盖。批量落地13 个新 List Resource6.42.0 集中引入了一批新的List Resource基于框架的列表型资源见 internal/framework/with_list.go 及相关生成模板设计规范可参考 docs/design-decisions/relationship-resource-design-standards.mdList Resource说明关联 PRaws_apigatewayv2_apiAPI Gateway V2 API#47472aws_cloudwatch_log_metric_filter日志指标过滤器同步获得 Resource Identity 支持#47495aws_config_remediation_configurationConfig 修复配置#47514aws_ebs_volumeEBS 卷#47551aws_ebs_volume_attachmentEBS 卷挂载#47561aws_eip弹性 IP同步获得 Resource Identity 支持#47557aws_iam_user_policy_attachmentIAM 用户策略挂载#47467aws_internet_gateway互联网网关#47529aws_lambda_layer_versionLambda 层版本同步获得 Resource Identity 支持#47496aws_launch_template启动模板同步获得 Resource Identity 支持#47540aws_route53_zoneRoute 53 托管区#47494aws_sagemaker_hyper_parameter_tuning_jobSageMaker 超参调优作业#47138aws_sqs_queue_policySQS 队列策略#47489List Resource 遵循一个逻辑资源对象对应多个云侧条目的建模方式方便将原本散落的子条目作为整体进行管理。多个资源同时声明获得Resource Identity 支持aws_eip、aws_launch_template、aws_lambda_layer_version、aws_ebs_volume_attachment、aws_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_criteria与evaluation_interval参数以支持 CloudWatch 的 PromQL 告警能力同时comparison_operator、evaluation_periods由必填改为 OptionalPR #47449。从 internal/service/cloudwatch/metric_alarm.go 的 Schema 可以看到约束关系evaluation_criteria与metric_name、metric_query构成ExactlyOneOf即三种告警定义方式互斥evaluation_criteria.promql_criteria为必填块含query必填长度 110000 字符、pending_period与recovery_period可选086400 秒evaluation_interval仅允许10、20、30或 60 的倍数validation.Any(validation.IntInSlice([]int{10, 20, 30}), validation.IntDivisibleBy(60))且必须与evaluation_criteria同时出现RequiredWith。一个完整的 PromQL 告警配置示例取自仓库测试 internal/service/cloudwatch/metric_alarm_test.goresource 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.query、pending_period、recovery_period与evaluation_interval的读写一致性。aws_eipResource 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 Identityaws_eks_access_entry、aws_eks_access_policy_association、aws_eks_addon、aws_eks_capability、aws_eks_identity_provider_config、aws_eks_node_group、aws_eks_pod_identity_association、aws_fargate_profile八个资源统一获得 Resource Identity 支持PR #47428。同时aws_eks_addon新增namespace_config参数#44087aws_eks_identity_provider_config新增identity_provider_config_name属性#47428。其余增强速览aws_network_interface新增ena_srd_specification参数以支持 ENA Express 高吞吐特性数据源aws_network_interface同步新增同名属性PR #46669aws_identitystore_user/ 数据源新增user_status属性#47323aws_odb_network增强以支持跨区域恢复cross-region restore#46317并在修复部分解决了创建期间statusManagedService()与statusNetwork()的空指针 panic#47159aws_mq_configuration除破坏性变更外还新增skip_destroy参数#47273aws_networkmanager_site_to_site_vpn_attachmentrouting_policy_label支持就地更新需要networkmanager:PutAttachmentRoutingPolicyLabel与networkmanager:RemoveAttachmentRoutingPolicyLabel权限#47541aws_rds_integration新增integration_identifier属性data_filter与integration_name支持就地更新#45632aws_s3_bucket_inventory支持目录桶directory buckets的 Inventory#47555aws_s3control_storage_lens_configuration新增storage_lens_configuration.expanded_prefixes_data_export与storage_lens_configuration.prefix_delimiter参数#47205aws_s3files_file_system新增accept_bucket_warning参数#47510网络对等连接通过peer_network_cidrs参数管理对端 CIDR#46207。缺陷修复要点本版本修复了多个影响面较大的问题aws_bedrock_guardrailtopic_policy_config.topics_config.definition最大长度从 200 提升到 1000以支持标准层级#47574aws_cloudwatch_alarm_mute_rule修复mute_targets.alarm_names排序不一致导致的 Provider produced inconsistent result after apply 报错#47507aws_ecs_service列举时排除 Express-Mode 服务#47533aws_msk_cluster修复更新broker_node_group_info.vpc_connectivity配置块时的请求参数错误该问题由 v6.40.0 引入#47515aws_odb_network修复创建期间 finder 返回 nil 时statusManagedService()/statusNetwork()的空指针 panic#47159aws_securityhub_member仅在 AWS API 返回时才设置email且不再根据member_status反推invite消除组织成员场景下的状态漂移#47106aws_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.go、internal/service/ec2/service_link_virtual_interface_data_source_test.go、internal/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),仅供参考