Terraform AWS Provider 6.3.0 版本深度解析:AMP 查询日志配置新资源与 12 项关键修复
【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws
6.3.0 是 Terraform AWS Provider 于 2025 年 7 月 10 日发布的 6.x 系列功能版本,其核心亮点是新增了aws_prometheus_query_logging_configuration资源(用于为 Amazon Managed Service for Prometheus 工作区配置查询日志),同时为 CloudFront 分发、Network Manager Core Network 策略文档、DynamoDB 全局表等带来多项增强,并集中修复了一批影响资源创建、更新与删除的缺陷。读完本文,你将掌握新资源与新增参数(anycast_ip_list_id、dns_support、consistency_mode)的完整配置方式,理解其底层 SDK 调用与等待器实现,并能对照版本说明评估升级影响。
版本概览:一次"一新增、三增强、十二修复"的常规迭代
本版本说明位于仓库 .changes/6.x/6.3.0.md,属于该项目按 changie 流程维护的逐版本变更记录(同目录下还包含 6.0.0 至 6.58.0 的完整 6.x 系列记录,见 .changes/6.x/)。整体结构为标准的三段式:
- FEATURES:新增 1 个资源;
- ENHANCEMENTS:对 3 处既有功能进行参数/属性增强;
- BUG FIXES:修复 12 项涉及 10 余个资源的缺陷,其中包含一条针对整个 provider 的通用修复。
下文将按这三个类别逐一展开,并结合仓库源码给出可验证的实现依据。
新资源:aws_prometheus_query_logging_configuration
功能背景
Amazon Managed Service for Prometheus(AMP)查询日志用于记录工作区中执行的 PromQL 查询,便于审计与排障。本版本新增的aws_prometheus_query_logging_configuration资源在 Terraform 中托管该配置,其声明式定义位于 internal/service/amp/query_logging_configuration.go,通过@FrameworkResource("aws_prometheus_query_logging_configuration", ...)注解注册进 AMP 服务包(internal/service/amp/service_package_gen.go),属于采用 Terraform Plugin Framework 实现的新一代资源。
完整配置示例
以下配置来自资源官方文档 website/docs/r/prometheus_query_logging_configuration.html.markdown 的 Example Usage,可直接复制运行:
resource "aws_prometheus_workspace" "example" { alias = "example" } resource "aws_cloudwatch_log_group" "example" { name = "/aws/prometheus/query-logs/example" } resource "aws_prometheus_query_logging_configuration" "example" { workspace_id = aws_prometheus_workspace.example.id destination { cloudwatch_logs { log_group_arn = "${aws_cloudwatch_log_group.example.arn}:*" } filters { qsp_threshold = 1000 } } }参数详解(含源码级约束)
| 参数 | 必填 | 说明与约束 |
|---|---|---|
workspace_id | 是 | AMP 工作区 ID。源码中标记为stringplanmodifier.RequiresReplace(),即该值变更会触发资源重建;同时是资源的导入标识(ImportStatePassthroughID直接映射到该字段)。 |
destination | 是 | 日志目的地配置块。源码校验器要求列表大小至少为 1 且必填(listvalidator.SizeAtLeast(1)+listvalidator.IsRequired())。 |
destination.cloudwatch_logs | 是 | CloudWatch Logs 目的地,列表大小必须恰好为 1。 |
destination.cloudwatch_logs.log_group_arn | 是 | 接收查询日志的 CloudWatch 日志组 ARN。源码通过正则校验:\*$,即ARN 必须以:*结尾,且使用fwtypes.ARNType自定义类型强校验 ARN 格式。 |
destination.filters | 是 | 过滤配置,列表大小必须恰好为 1。 |
destination.filters.qsp_threshold | 是 | 查询采样处理(QSP)阈值,整数且>= 0(int64validator.AtLeast(0))。处理采样数超过该阈值的查询才会被记录。 |
region | 否 | 资源管理区域,默认继承 provider 配置。 |
上述destination、cloudwatch_logs、filters、timeouts均定义为嵌套块(ListNestedBlock),并与模型结构loggingDestinationModel、cloudWatchLogDestinationModel、loggingFilterModel一一对应(见源码 L364-L382)。
底层实现:CRUD 调用链与状态等待器
源码完整实现了 Create/Read/Update/Delete/Import 五个生命周期方法,核心调用链如下:
- Create:调用 AMP SDK 的
CreateQueryLoggingConfiguration,并附带由create.UniqueId(ctx)生成的ClientToken保证幂等;随后调用waitQueryLoggingConfigurationCreated等待状态从Creating流转到Active; - Read:通过
findQueryLoggingConfigurationByID调用DescribeQueryLoggingConfiguration;若返回ResourceNotFoundException则转为retry.NotFoundError,由框架从 State 中移除资源(State.RemoveResource); - Update:调用
UpdateQueryLoggingConfiguration,同样携带ClientToken,等待Updating -> Active; - Delete:调用
DeleteQueryLoggingConfiguration,对ResourceNotFoundException静默容忍(视为已删除),等待Deleting/Active -> 空; - Import:以
workspace_id为导入 ID 直接透传。
三个等待器(waitQueryLoggingConfigurationCreated/Updated/Deleted)均基于internal/retry.StateChangeConf实现,并把 API 返回的StatusReason写入retry.SetLastError,便于在超时时给出明确诊断信息。默认超时时间均为 5 分钟(源码 L46-L48 设置 create/update/delete 默认值),与官方文档 Timeouts 章节一致,也支持用户在timeouts块中覆盖。
测试验证
该资源的接受性测试位于 internal/service/amp/query_logging_configuration_test.go,覆盖三类场景:
- basic:创建工作区、日志组与查询日志配置,断言
workspace_id与工作区 ID 一致、destination.#为 1、qsp_threshold为 500,并验证按workspace_id导入; - withFilters:验证
qsp_threshold = 1000的变体配置; - disappears:验证资源被外部删除后,Terraform 能感知并触发重建(
ExpectResourceAction(... ResourceActionCreate))。
测试中的实际 HCL(L177-L201)与官方文档示例一致,是"文档-代码-测试"三者在仓库内互相印证的典型样例。
功能增强:三项新能力
1. CloudFront 分发:新增 anycast_ip_list_id
aws_cloudfront_distribution资源与aws_cloudfront_distribution数据源同时新增anycast_ip_list_id参数/属性(对应 issue #43196),用于为分发指定 Anycast IP 列表。实现位置在 internal/service/cloudfront/distribution.go:
- Schema 中注册
anycast_ip_list_id属性(L85); - 读取时将
distributionConfig.AnycastIpListId写入 State(L1092); - 写入时通过
d.GetOk("anycast_ip_list_id")读取并映射为 API 对象的AnycastIpListId字段(L1511-L1512)。
配置示例:
resource "aws_cloudfront_distribution" "example" { anycast_ip_list_id = aws_cloudfront_anycast_ip_list.example.id # ... 其余分发配置(origin、default_cache_behavior、restrictions、viewer_certificate 等) }数据源aws_cloudfront_distribution同样导出该属性,便于在只读场景中获取已存在的 Anycast IP 列表 ID(见 internal/service/cloudfront/distribution_data_source.go)。
2. Network Manager:策略文档新增两个核心网络配置参数
数据源aws_networkmanager_core_network_policy_document新增core_network_configuration.dns_support与core_network_configuration.security_group_referencing_support两个参数(对应 issue #43277),用于在生成 Core Network 策略文档时声明是否启用 DNS 解析支持与安全组引用支持。两者均为布尔型开关,用于在策略文档中输出对应的dns-support与security-group-referencing-support配置项。
3. DynamoDB 全局表:多区域强一致性
aws_dynamodb_table新增replica.consistency_mode参数(对应 issue #43236),用于在多区域全局表场景下为副本配置一致性模式,选择强一致(strong consistency)或最终一致。该参数直接支撑 DynamoDB 全局表的"多区域强一致性"能力,配置示例:
resource "aws_dynamodb_table" "example" { name = "example" billing_mode = "PAY_PER_REQUEST" hash_key = "id" attribute { name = "id" type = "S" } replica { region_name = "us-west-2" consistency_mode = "STRONG" } }缺陷修复:12 项修复的分组解读
provider 级修复
tags修改触发的空指针 panic(#43324):修复了"修改 tags 时大量资源类型出现runtime error: invalid memory address or nil pointer dereferencepanic"的通用问题,属于本次升级中影响面最广的一项修复,建议所有使用标签管理的用户优先升级。
重试与状态机修复(Bedrock Agent / RDS)
- Bedrock Agent 动作组(#43232):
aws_bedrockagent_agent_action_group在删除动作组时补充缺失的 prepare agent 调用;并在动作组的基础创建、更新、删除过程中,对operation can't be performed on Agent when it is in Preparing state.错误增加重试逻辑; - Bedrock Agent 知识库关联(#43232):
aws_bedrockagent_agent_knowledge_base_association在删除知识库关联时补充缺失的 prepare agent 调用;并在创建与解除关联时对上述 Preparing 状态错误重试; - RDS 角色关联(#43303):
aws_db_instance_role_association与aws_rds_cluster_role_association在删除时分别对InvalidDBInstanceState、InvalidDBClusterStateFault增加重试,规避数据库实例/集群仍处于不可操作状态导致的删除失败。
数据一致性修复
- CloudFront KeyValue Store(#43208):
aws_cloudfrontkeyvaluestore_keys_exclusive修复了当键值对值发生变更时误删除其他键值对的问题; - Cognito 自定义域名(#43252):
aws_cognito_user_pool_domain现在能正确为自定义 Cognito 域名更新managed_login_version; - Redshift 集群(#43270):
aws_redshift_cluster正确设置availability_zone_relocation_enabled,避免 State 与真实配置不一致; - Route 53 Profiles(#42562):
aws_route53profiles_resource_association将resource_properties改为 Computed,以支持vpc_endpoint关联场景; - SSO Admin 应用(#43273):
aws_ssoadmin_application在刷新 State 时更新arn属性值。
崩溃类修复
- MediaLive 通道(#43308):
aws_medialive_channel修复配置块为空时出现的interface conversion: interface {} is nil, not map[string]interface {}panic。
升级建议与验证方式
- 优先关注 tags panic 修复:若你的配置大量使用
tags且版本低于 6.3.0,建议升级后跑一遍terraform plan验证 State 刷新; - 新资源开箱即用:
aws_prometheus_query_logging_configuration已随本版本发布,可直接在配置中引用;其完整参数与约束也可在 website/docs/r/prometheus_query_logging_configuration.html.markdown 查阅; - 新增参数为可选增量:
anycast_ip_list_id、dns_support、security_group_referencing_support、consistency_mode均为新增可选配置,不影响存量配置的兼容性; - 行为变更提示:
aws_route53profiles_resource_association的resource_properties变为 Computed 属于行为变化,涉及该资源的配置在升级后可能产生 plan 差异,属预期表现。
从源码结构看,本版本的迭代遵循了该项目"先出 changelog、文档与测试同步落地"的惯例:新资源的框架资源定义、接受性测试与官网文档在仓库内同批出现,为使用者提供了完整的可参考闭环。
【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考