terraform-provider-aws 6.25.0 版本解读:CloudWatch Log Transformer 与 EKS Capability 新资源及关键能力增强
【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws
导读
本文基于 terraform-provider-aws 官方变更日志 .changes/6.x/6.25.0.md(发布于 2025 年 12 月 4 日)深度解读 6.25.0 版本的技术增量:新增aws_cloudwatch_log_transformer(CloudWatch Logs 日志处理器)与aws_eks_capability(EKS 集群能力)两个资源,同时为 8 个数据源与 18 个资源引入新属性,覆盖日志处理、KMS 明文写入保护、ALB Target Optimizer、VPC Lattice 连接、恶意软件扫描等多个领域。读完本文,你将掌握该版本全部新增/增强项的适用场景、配置写法与底层实现线索,可直接对照仓库源码验证与落地。
一、版本概览:6.25.0 改了什么
6.25.0 是 AWS Provider 6.x 系列的一个功能增量版本,变更日志结构为标准三段式:
| 分类 | 数量 | 内容 |
|---|---|---|
| 新资源(New Resource) | 2 | aws_cloudwatch_log_transformer、aws_eks_capability |
| 数据源增强(data-source) | 8 | 覆盖 Backup、CloudWatch Logs、EC2 Transit Gateway、Lambda、ELB、Route 53、Transfer、WorkSpaces |
| 资源增强(resource) | 18 | 覆盖 API Gateway、Athena、Backup、Bedrock Agent Core、CloudWatch Logs、EC2 Transit Gateway、Flow Logs、KMS、Lambda、ELB、Roles Anywhere、Route 53、SSM、Transfer、WorkSpaces |
该版本没有包含 Bug Fix 与 Breaking Changes 条目,整体属于"纯增量"发布。所有变更条目均以 GitHub issue/PR 编号(如 #44300、#45326)追溯,仓库根目录的 CHANGELOG.md 会随版本发布同步合并这些片段。若你想查看其他版本的同期变更,可浏览 .changes/6.x 目录下的全部版本文件。
二、新资源:aws_cloudwatch_log_transformer — CloudWatch Logs 日志转换器
2.1 功能定位
CloudWatch Logs Transformer 是 CloudWatch Logs 的日志处理能力:在日志进入 Log Group 后,通过一系列**处理器(processor)**实时转换日志(添加字段、重命名字段、复制字段、删除字段、解析、掩码、类型转换等),便于后续查询与告警。aws_cloudwatch_log_transformer让 Terraform 用户能够以声明式配置管理这一处理链路。
从源码看,该资源定义在 internal/service/logs/transformer.go,基于 Terraform Plugin Framework 实现:
- 通过
@FrameworkResource("aws_cloudwatch_log_transformer", name="Transformer")注解注册(transformer.go); - 资源以
log_group_arn作为标识(@ArnIdentity),并支持按该 ARN 导入(WithImportByIdentity)。
2.2 核心 Schema 与约束
log_group_arn:必填、RequiresReplace()。指定要绑定 Transformer 的目标 Log Group ARN。注意该资源是"一个 Log Group 一个 Transformer"的模型,变更 ARN 会触发重建。transformer_config:必填的处理器列表块,校验规则为SizeBetween(1, 20),即至少配置 1 个、最多 20 个处理器。处理链路顺序即列表顺序。- 处理器子块包括
add_keys(添加键)、parse、move_keys、rename_keys、copy_keys、delete_keys、grok、mask、type_conversion、trim_string、split_string、lowercase_string、uppercase_string、substitute_string、datetime_converter等 AWS CloudWatch Logs Transformer API 所支持的类型。
以add_keys为例,源码中可见其约束细节(transformer.go):
entry:必填,数量 1~5;- 每条
entry的key长度 1~128,value长度 1~256; overwrite_if_exists:可选,控制键已存在时是否覆盖。
2.3 配置示例
resource "aws_cloudwatch_log_group" "example" { name = "app/backend" } resource "aws_cloudwatch_log_transformer" "example" { log_group_arn = aws_cloudwatch_log_group.example.arn transformer_config { add_keys { entry { key = "env" value = "production" overwrite_if_exists = false } } parse { source = "message" type = "JSON" } mask { mask = "****" } } }提示:处理器子块的可用类型与字段以 CloudWatch Logs Transformer API(
PutTransformer/GetTransformer)为准,仓库中的 schema 定义(transformer.go)是最直接的参照物。
2.4 源码与测试佐证
- 资源生命周期:创建时调用 CloudWatch Logs
PutTransformer,读取时通过GetTransformer验证状态(源码中的existsType注解即指向cloudwatchlogs.GetTransformerOutput)。 - 验收测试:transformer_test.go 覆盖基本创建、更新与导入;测试配置模板见 testdata/Transformer/basic/main_gen.tf,由于该资源"无既有资源可依赖"(
@Testing(hasNoPreExistingResource=true)),测试会自行创建配套的 Log Group。
三、新资源:aws_eks_capability — EKS 集群能力管理
3.1 功能定位
aws_eks_capability用于在 EKS 集群上启用/管理特定"能力"(Capability)。当前版本支持的能力围绕 Argo CD 集成展开(详见下文configuration块),例如为集群启用 Argo CD 管控平面并配置 IAM Identity Center(IDC)身份、网络访问与 RBAC 角色映射。
实现文件为 internal/service/eks/capability.go,同样基于 Plugin Framework:
- 注册注解
@FrameworkResource("aws_eks_capability", name="Capability")(capability.go); - 以
cluster_name+capability_name双属性作为资源身份(@IdentityAttribute双注解),导入时需组合二者; - 支持标签(
@Tags(identifierAttribute="arn")),自带 create/update/delete 超时,默认均为20 分钟(capability.go)。
3.2 属性一览
| 属性 | 必填/计算 | 说明 |
|---|---|---|
cluster_name | 必填(RequiresReplace) | 目标 EKS 集群名称 |
capability_name | 必填(RequiresReplace) | 能力名称,如argo_cd |
type | 必填(RequiresReplace) | 能力类型枚举(awstypes.CapabilityType),如eks_v1 |
role_arn | 必填 | 承载能力运行的角色 ARN |
delete_propagation_policy | 必填 | 删除时的传播策略枚举(awstypes.CapabilityDeletePropagationPolicy) |
version | 计算 | 能力版本,由 AWS 返回,用UseStateForUnknown保持稳定 |
arn | 计算 | 能力 ARN(标签标识) |
configuration | 可选 | 能力配置块,最多 1 个(见下) |
3.3 configuration 块:Argo CD 集成
configuration为ListNestedBlock,当前仅支持argo_cd子块(capability.go):
argo_cd.namespace:可选,Argo CD 部署命名空间;argo_cd.server_url:计算属性,由 AWS 返回的 Argo CD 服务地址;argo_cd.aws_idc:必填块,配置 IAM Identity Center 集成:idc_instance_arn:必填(RequiresReplace),IDC 实例 ARN;idc_managed_application_arn:计算,AWS 自动创建的受管应用 ARN;idc_region:可选,IDC 所在区域(带 AWS Region 校验器);
argo_cd.network_access.vpce_ids:可选,用于网络访问控制的 VPC Endpoint ID 集合;argo_cd.rbac_role_mapping:可选,RBAC 角色映射集合,每个映射包含role(枚举ArgoCdRole)与identity(必填集合,含id与type,type为SsoIdentityType枚举)。
3.4 配置示例
resource "aws_eks_cluster" "example" { name = "example" role_arn = aws_iam_role.example.arn # ... 省略网络与节点配置 } resource "aws_eks_capability" "example" { cluster_name = aws_eks_cluster.example.name capability_name = "argo_cd" type = "eks_v1" role_arn = aws_iam_role.capability.arn delete_propagation_policy = "DELETE" configuration { argo_cd { aws_idc { idc_instance_arn = aws_ssoadmin_permission_set.example.instance_arn } } } }3.5 源码与测试佐证
- 创建流程:调用 EKS
CreateCapabilityAPI,并携带幂等令牌ClientRequestToken = create.UniqueId(ctx)与资源标签(capability.go),随后通过waitCapabilityCreated等待能力就绪,超时即上文所述的 20 分钟; - 删除传播:
delete_propagation_policy决定能力被删除时其下层资源(如 Argo CD 应用)的清理策略,创建后仍可更新; - 验收测试:capability_test.go 及生成式测试数据 testdata/Capability/basic/main_gen.tf 覆盖基础场景与区域覆盖场景,导入时按
cluster_name,capability_name组合解析。
四、数据源增强(8 项)
以下属性均来自 6.25.0 变更日志,用于让数据源输出与对应资源能力对齐:
| 数据源 | 新增属性 | 说明 |
|---|---|---|
aws_backup_plan | rule.scan_action、scan_setting | 暴露备份计划的恶意软件扫描配置(与下文的资源增强配套) |
aws_cloudwatch_log_group | deletion_protection_enabled | 日志组删除保护开关状态 |
aws_ec2_transit_gateway | encryption_support | 中转网关的加密支持状态 |
aws_lambda_function | durable_config | Lambda 持久化配置(如 S3 桶与日志配置) |
aws_lb | health_check_logs | 负载均衡器的健康检查日志配置 |
aws_lb_target_group | target_control_port | 目标组控制端口(配合 ALB Target Optimizer) |
aws_route53_zone | enable_accelerated_recovery | 是否启用加速恢复 |
aws_transfer_connector | egress_config | 暴露 VPC Lattice 出站连接配置 |
aws_workspaces_directory | tenancy | 目录的租期模式(Dedicated/Shared) |
例如,读取已有 Lambda 函数的持久化配置:
data "aws_lambda_function" "existing" { function_name = "my-func" } output "durable_s3_bucket" { value = data.aws_lambda_function.existing.durable_config[0].s3_bucket }这些数据源属性多与资源侧新参数一一对应(详见下一节),保证"资源写什么、数据源就能读什么"。
五、资源增强(18 项)重点解读
5.1 KMS 密文写入保护:plaintext_wo(Write-Only 特性)
aws_kms_ciphertext新增plaintext_wo与plaintext_wo_version参数,支持write-only(只写)输入:明文仅在 apply 期间传入,不会进入 Terraform 状态文件,从而避免敏感数据落盘。
源码实现在 internal/service/kms/ciphertext.go:
plaintext与plaintext_wo通过ExactlyOneOf互斥,二选一;plaintext_wo标记WriteOnly: true;plaintext_wo与plaintext_wo_version相互RequiredWith绑定——使用 write-only 明文时必须同时提供一个版本号,用于在下次 apply 时判断明文是否发生变化。
resource "aws_kms_ciphertext" "example" { key_id = aws_kms_key.example.key_id plaintext_wo = var.secret_payload # 敏感变量,仅运行期使用 plaintext_wo_version = sha256(var.secret_payload) }对应实现细节可进一步阅读 internal/flex/write_only.go 与 internal/framework/flex 下的 write-only 展开逻辑。
5.2 ALB Target Optimizer:aws_lb_target_group 的 target_control_port
aws_lb_target_group新增target_control_port,用于支持ALB Target Optimizer。控制端口用于负载均衡器与控制平面通信,与业务流量端口相互独立,典型场景下可通过该端口实现更细粒度的目标健康与路由控制。该参数同时被aws_lb_target_group数据源以同名字段暴露。
5.3 Transfer Connector 的 VPC Lattice 支持
aws_transfer_connector两项相关变更:
- 新增
egress_config参数,支持为 SFTP Connector 配置VPC Lattice 出站连接(访问 VPC Lattice 服务网络); url参数由必填改为可选——当使用 VPC Lattice 连接时不再需要显式填写 URL。
这使得 Transfer Family Connector 可以完全走 VPC Lattice 内部网络,而非公网访问端点。配套的数据源aws_transfer_connector同步新增egress_config属性。
5.4 Backup 恶意软件扫描:rule.scan_action 与 scan_setting
aws_backup_plan新增对恶意软件扫描的支持:
rule.scan_action:为备份规则指定扫描动作;scan_setting:扫描设置块(如是否扫描已恢复的恢复点)。
数据源aws_backup_plan同步输出rule.scan_action与scan_setting。典型形态:
resource "aws_backup_plan" "example" { name = "example" rule { rule_name = "daily" target_vault_name = aws_backup_vault.example.name schedule = "cron(0 12 * * ? *)" scan_action { scan_action_type = "backup" } } scan_setting { scan_vault = true } }5.5 其余资源增强速览
| 资源 | 新增内容 | 说明 |
|---|---|---|
aws_api_gateway_integration | integration_target、response_transfer_mode | 集成目标与响应传输模式(如BINARY) |
aws_athena_workgroup | configuration.managed_query_results_configuration | 受管查询结果配置(如 S3 桶前缀、加密) |
aws_bedrockagentcore_gateway | interceptor_configuration | 网关拦截器配置 |
aws_cloudwatch_log_group | deletion_protection_enabled | 防止日志组被误删的删除保护开关 |
aws_ec2_transit_gateway | encryption_support | 指定中转网关的加密支持(如enable) |
aws_flow_log | regional_nat_gateway_id | 支持为区域级 NAT 网关创建流日志 |
aws_lambda_function | durable_config | Lambda 持久化配置(S3 桶、日志配置) |
aws_lb | health_check_logs | 负载均衡器健康检查日志配置 |
aws_rolesanywhere_profile | accept_role_session_name | 是否接受来自角色的会话名称 |
aws_rolesanywhere_profile | 计划期校验 | 对managed_policy_arns、role_arns增加 plan-time 校验 |
aws_route53_zone | enable_accelerated_recovery | 启用 Route 53 加速恢复 |
aws_ssm_association | calendar_names | 关联的维护窗口日历名称(用于调度约束) |
aws_workspaces_directory | tenancy | 目录租期模式(Dedicated/Shared) |
值得注意的两点实现细节:
aws_rolesanywhere_profile的校验是plan-time(计划期)校验,即terraform plan阶段就会报错,而非等到 apply 时才由 AWS API 拒绝,属于体验性改进;aws_flow_log的regional_nat_gateway_id意味着流日志目标类型扩展到了REGIONAL_NAT_GATEWAY,此前仅支持 NAT 网关实例级 ID。
六、升级与验证建议
- 升级路径:6.25.0 为纯增量发布(无破坏性变更与 Bug Fix),从 6.24.0 或更早 6.x 版本升级风险较低。标准升级流程:先
terraform init -upgrade更新 provider 锁定版本,再terraform plan观察 diff。若启用新参数,请先在小环境验证。 - 验证新资源:
- CloudWatch Log Transformer:创建后可在 AWS 控制台 Log Group 的 Transformations 页签查看处理器链路,或用
GetTransformerAPI 核对; - EKS Capability:创建后
terraform state list确认aws_eks_capability进入状态,标签与 Argo CD 集成状态可通过terraform show检查。
- CloudWatch Log Transformer:创建后可在 AWS 控制台 Log Group 的 Transformations 页签查看处理器链路,或用
- KMS write-only 使用前提:
plaintext_wo依赖 provider 的 write-only 支持(Terraform 1.10+ 的 write-only 参数机制),使用前确认你的 Terraform 版本满足要求;plaintext_wo_version用于触发变更检测,务必选择能反映明文内容变化的版本值(如哈希)。 - 查阅源码:所有新功能的 schema 与生命周期实现均可直接在仓库中追溯——日志转换器见 internal/service/logs/transformer.go,EKS 能力见 internal/service/eks/capability.go,KMS 只写参数见 internal/service/kms/ciphertext.go,其余增强项可到 internal/service 下对应服务的资源文件与测试文件中进一步确认。
【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考