terraform-provider-aws 6.26.0 版本解析:List 资源、IAM 出站身份联合与 RDS 升级序列控制
terraform-provider-aws 6.26.0 版本解析List 资源、IAM 出站身份联合与 RDS 升级序列控制【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇文章围绕 HashiCorp 官方 AWS Provider当前仓库 terraform-provider-aws发布的6.26.0版本变更记录对应仓库 .changes/6.x/6.26.0.md展开逐一拆解本版本新增的 4 个 List 资源、1 个全新 IAM 资源、9 项功能增强与 8 项 Bug 修复。读者阅读后可快速掌握各变更的配置方法、适用场景并借助仓库源码理解底层实现原理从而安全、平滑地升级到该版本。版本概览一次聚焦「可列举性」与「升级可控性」的发布6.26.0 于2025 年 12 月 10 日发布见 .changes/6.x/6.26.0.md是本仓库 6.x 系列的一个重要里程碑。本版本最突出的主题是List 资源List Resource的批量落地——一次性新增了 4 个 List 资源占全部 5 个新功能的一半以上。List 资源是 Terraform 1.14 引入的list块查询能力的产物。仓库内的设计文档 docs/list-resources.md 说明借助list块用户可以在配置中直接对远端资源进行查询与过滤Provider 端则通过实现List方法把 AWS API 的列举能力映射为 Terraform 的声明式查询。除 List 资源外本版本还围绕RDS 升级序列控制upgrade_rollout_order进行了资源与数据源的多点增强并修复了一批涉及崩溃回归、持久化 Diff、写权限校验的缺陷整体变更面广但风险点集中。新增 List 资源把 AWS 列举 API 转化为声明式查询List 资源的设计背景在了解具体资源前先明确 List 资源的实现约束。docs/list-resources.md 指出为某个远端资源类型实现 List 资源需要从三个维度评估与其他资源的关系分为强实体仅凭自身标识即可读取/列举如aws_instance、弱实体还需关联资源标识如aws_lb_listener需要 ELB ARN、属性实体1:1 或 1:[0,1] 关系与等待资源AWS API 模式包括 All-Or-One给标识取单个、不给取全部、All-Or-Some给一组标识取一组、不给取全部、Summary List列举接口只返回概要信息需后续 API 补全典型如标签Terraform 侧考虑Provider 对资源类型的管理方式会影响 List 实现。本版本新增的 4 个 List 资源均为可通过自身标识读取的强实体且全部基于 Summary List 模式实现列举接口只返回概要名称/元数据完整属性在IncludeResource开启时通过额外的读取或批量获取 API 补全。aws_batch_job_definition基于 SDKv2 资源的 List 化第一个新增 List 资源是aws_batch_job_definition。其实现位于 internal/service/batch/job_definition_list.go通过SDKListResource(aws_batch_job_definition)注解注册并复用了既有的resourceJobDefinition()schema 与resourceJobDefinitionFlatten展开函数属于典型的「SDKv2 资源复用式 List」。实现要点见 internal/service/batch/job_definition_list.go使用batch.NewDescribeJobDefinitionsPaginator分页遍历DescribeJobDefinitions接口逐条产出JobDefinition过滤掉状态为INACTIVE的作业定义jobDefinitionStatusInactive保证查询结果只包含可用的定义以JobDefinitionArn作为资源 IDJobDefinitionName作为展示名所有条目一次性通过DescribeJobDefinitions返回属于 All-Or-One 模式的典型应用。对应的单元与接受性测试见 internal/service/batch/job_definition_list_test.go。aws_codebuild_project分页 批量补全的 List 实现aws_codebuild_project的 List 实现位于 internal/service/codebuild/project_list.go其设计更具代表性列举阶段调用codebuild.ListProjectsSDKListResource注册见 internal/service/codebuild/project_list.go该接口只返回项目名称数组是典型的 Summary List 模式当查询请求IncludeResource即需要完整资源属性时实现会对当前页的名称批量调用BatchGetProjects补齐详情再以projectsByName映射按名称关联internal/service/codebuild/project_list.go资源 ID 为项目名ARN 通过awsClient.RegionalARN(ctx, codebuild, project/projectName)本地拼装避免额外的 API 调用若批量获取时某项目已消失会打 Warning 并跳过保证列举过程的健壮性。测试见 internal/service/codebuild/project_list_test.go。aws_lambda_capacity_providerFramework List 资源与资源身份支持aws_lambda_capacity_provider是本版本的双料新增既以 List 资源形态出现又在此前版本基础上补充了资源身份Resource Identity支持见 changelog 的 ENHANCEMENTS 小节。其 List 实现位于 internal/service/lambda/capacity_provider_list.go是Framework 原生 List 资源FrameworkListResource与 SDKv2 复用式实现互补调用lambda.ListCapacityProviders分页列举listCapacityProviders见 internal/service/lambda/capacity_provider_list.go显式跳过Deleting状态的容量提供者通过解析 ARN 并strings.TrimPrefix(cpARN.Resource, capacity-provider:)从 ARN 中还原资源名称作为展示名internal/service/lambda/capacity_provider_list.go使用flex.Flatten将 AWS 类型扁平化为 Framework 模型。资源本体Schema、CRUD 与身份逻辑见 internal/service/lambda/capacity_provider.go身份相关测试在 internal/service/lambda/capacity_provider_identity_gen_test.go。关于资源身份的设计原则可参考 docs/resource-identity.md。aws_ssm_parameter复用既有 Parameter schema 的 SDK List 资源aws_ssm_parameter的 List 实现位于 internal/service/ssm/parameter_list.go同样通过SDKListResource复用既有resourceParameter()schemainternal/service/ssm/parameter_list.go使用ssm.NewDescribeParametersPaginator对DescribeParameters分页遍历listParametersinternal/service/ssm/parameter_list.go每个条目以参数Name作为 ID 与展示名IncludeResource开启时通过findParameterByName拉取完整参数信息并resourceParameterFlatten展开同时写入value属性internal/service/ssm/parameter_list.go。测试见 internal/service/ssm/parameter_list_test.go。小结4 个 List 资源覆盖了两种实现路径——SDKv2 资源复用式Batch、CodeBuild、SSM与 Framework 原生式Lambda Capacity Provider展示了 List 资源在既有资源上的两种主流接入方式。全新资源aws_iam_outbound_web_identity_federation除 List 资源外本版本新增了aws_iam_outbound_web_identity_federation资源用于管理 IAM 的出站 Web 身份联合Outbound Web Identity Federation功能的启用状态。其实现位于 internal/service/iam/outbound_web_identity_federation.go几个值得注意的设计点单例资源通过SingletonIdentity注解声明internal/service/iam/outbound_web_identity_federation.go意味着该功能在整个账户内是全局唯一的Schema 中只有一个issuer_identifierComputed 属性无用户可配置参数Create 即 EnableCreate直接调用iam.EnableOutboundWebIdentityFederation完成后从响应中回填issuer_identifierinternal/service/iam/outbound_web_identity_federation.goDelete 即 DisableDelete调用iam.DisableOutboundWebIdentityFederation并特殊处理FeatureDisabledException功能未启用时视为删除成功避免报错internal/service/iam/outbound_web_identity_federation.goRead 容错findOutboundWebIdentityFederation同样把FeatureDisabledException归一化为NotFoundError交给retry.NotFound处理从而在功能未启用时安全地从 State 中移除资源internal/service/iam/outbound_web_identity_federation.go不可更新结构体组合了framework.WithNoUpdate任何属性变化都会触发重建。导入支持该资源支持按账户 ID 导入Testing(importStateIdFuncimportStateIDAccountID, importStateIdAttributeissuer_identifier)。测试见 internal/service/iam/outbound_web_identity_federation_test.go 与 internal/service/iam/outbound_web_identity_federation_data_source_test.go。功能增强RDS 升级序列、EKS 更新策略与更多参数RDS 实例与集群新增upgrade_rollout_order属性本版本为aws_db_instance、aws_rds_cluster两个资源及其数据源data-source/aws_db_instance、data-source/aws_rds_cluster同步新增了upgrade_rollout_order属性用于表达数据库实例在集群升级时的滚动顺序。以aws_db_instance为例该属性在 Schema 中被声明为Computed的字符串见 internal/service/rds/instance.go在读取阶段从 AWS SDK 的UpgradeRolloutOrder字段回填internal/service/rds/instance.go。aws_rds_cluster的对应定义见 internal/service/rds/cluster.go 与展开逻辑 internal/service/rds/cluster.go。这意味着用户可以在配置中以upgrade_rollout_order data.aws_rds_cluster.example.upgrade_rollout_order的方式引用该值实现跨资源编排例如按序升级集群中的多个实例。EKS Node Groupupdate_config支持update_strategydata-source/aws_eks_node_group与resource/aws_eks_node_group均新增了update_config块内的update_strategy属性。在 internal/service/eks/node_group.go 中update_strategy被定义为可选字符串并通过enum.Validate[types.NodegroupUpdateStrategies]()做枚举校验合法值如DEFAULT、MINIMAL。它与max_unavailable、max_unavailable_percentage共同构成update_config块后两者受ExactlyOneOf约束二选一且取值范围 1–100见 internal/service/eks/node_group.go。数据源侧对应定义见 internal/service/eks/node_group_data_source.go。配置示例resource aws_eks_node_group example { cluster_name aws_eks_cluster.example.name node_group_name example node_role_arn aws_iam_role.example.arn subnet_ids aws_subnet.example[*].id update_config { update_strategy DEFAULT max_unavailable 1 } }Kinesis Analytics v2支持 Flink 1.20 运行时与加密配置aws_kinesisanalyticsv2_application获得两项增强runtime_environment新增合法值FLINK-1_20新增application_configuration.application_encryption_configuration参数。FLINK-1_20的接受性测试覆盖可见于 internal/service/kinesisanalyticsv2/application_test.go例如testAccApplicationConfig_basicFlink(rName, FLINK-1_20)与runtime_environment断言说明该值已作为受支持版本进入测试矩阵。Bedrock Agent新增session_summary_configuration.max_recent_sessionsaws_bedrockagent_agent新增memory_configuration下的session_summary_configuration块及其max_recent_sessions参数用于控制会话摘要保留的最近会话数量。在 internal/service/bedrockagent/agent.go 中模型以SessionSummaryConfiguration与MaxRecentSessionsInt64呈现。测试断言示例resource.TestCheckResourceAttr(resourceName, memory_configuration.0.session_summary_configuration.0.max_recent_sessions, 5)见 internal/service/bedrockagent/agent_test.go。配置示例resource aws_bedrockagent_agent example { # ... 其他必填参数 memory_configuration { session_summary_configuration { max_recent_sessions 5 } } }ODB 网络对等支持odb_network_arn资源分享模式aws_odb_network_peering_connection新增了基于odb_network_arn创建网络对等连接的资源分享resource sharing模式。相关校验逻辑位于 internal/service/odb/cloud_autonomous_vm_cluster.go用户必须且只能提供以下组合之一——odb_network_idcloud_exadata_infrastructure_id或odb_network_arncloud_exadata_infrastructure_arn否则会返回明确的错误诊断。S3 Vectors索引新增加密与元数据配置块aws_s3vectors_index新增两个配置块encryption_configuration配置索引加密metadata_configuration配置元数据字段。二者在 internal/service/s3vectors/index.go 中对应模型字段EncryptionConfiguration与MetadataConfiguration其中metadata_configuration在 Schema 中定义为ListNestedBlockinternal/service/s3vectors/index.go。其他增强aws_lambda_capacity_provider新增资源身份支持详见上文 List 资源小节测试见 internal/service/lambda/capacity_provider_identity_gen_test.go。Bug 修复崩溃回归、持久化 Diff 与校验修正本版本共修复 8 个问题按影响面可归纳为四类。崩溃回归修复aws_ec2_transit_gateway/data-source/aws_ec2_transit_gateway修复读取与设置encryption_support时可能发生的崩溃panic。该问题源自 v6.25.0 引入的回归。相关 Schema 定义见 internal/service/ec2/transitgateway_.goencryption_support为Optional Computed取值经enum.Validate[awstypes.EncryptionSupportOptionValue]校验。持久化 Diffperpetual diff修复aws_lambda_function修复image_config中存在null值时反复产生 Diff 的问题aws_notifications_event_rule修复配置中未指定event_pattern参数时反复产生 Diff 的问题。这两项修复消除了「配置未变、Plan 却始终显示变更」的体验问题。校验与必填项修正aws_api_gateway_integration修复timeout_milliseconds校验逻辑——当response_transfer_mode为STREAM时允许上限提升至900,000 ms15 分钟。实现细节见 internal/service/apigateway/integration.govalidateTimeoutMilliseconds中定义了三个常量minTimeoutMilliseconds 50、maxTimeoutMillisecondsResponseTransferModeBuffered 300000、maxTimeoutMillisecondsResponseTransferModeStream 900000未指定response_transfer_mode时默认按BUFFERED处理。配套测试见 internal/service/apigateway/integration_test.goaws_bedrock_model_invocation_logging_configuration将logging_config.s3_config.bucket_name、logging_config.cloudwatch_config.log_group_name、logging_config.cloudwatch_config.role_arn及logging_config.cloudwatch_config.large_data_delivery_s3_config.bucket_name标记为Required必填避免缺失时产生静默错误。行为与语义修正aws_route53_zone启用加速恢复accelerated recovery的操作在配置多个托管区时被强制串行执行避免并发修改引发状态冲突。相关等待逻辑见 internal/service/route53/accelerated_recovery_status.gowaitUpdateAcceleratedRecoveryCompleted会轮询Enabling/EnablingHostZoneLocked/Disabling/DisablingHostZoneLocked等中间态直至稳定aws_sagemaker_modelvpc_config.security_group_ids与vpc_config.subnets被标记为ForceNew修改将触发资源重建避免在不可原地变更的字段上进行原地更新aws_secretsmanager_secret_version当 Secret 为 write-only仅写模式时避免发送GetSecretValue读取调用。internal/service/secretsmanager/secret_version.go 中findSecretVersionForExistence依据hasWriteOnly分支选择仅获取VersionStages的存在性查询从而省去读取敏感值读取阶段同样通过flex.HasWriteOnlyValue/flex.GetWriteOnlyStringValue判断是否跳过取值internal/service/secretsmanager/secret_version.go。升级建议与验证清单基于本版本的变更内容升级到 6.26.0 前建议关注以下几点List 资源为增量能力aws_batch_job_definition、aws_codebuild_project、aws_lambda_capacity_provider、aws_ssm_parameter均为新增资源类型不影响既有资源配置升级后即可在配置中使用list块查询需 Terraform 1.14关注破坏性语义调整aws_sagemaker_model的vpc_config字段改为ForceNew现有配置若修改该块将触发重建而非原地更新补充必填字段aws_bedrock_model_invocation_logging_configuration的 4 个字段改为 Required存量配置需检查是否显式声明RDS 升级编排可利用新增的upgrade_rollout_order属性做跨资源依赖编排但该属性为 Computed 只读请勿在配置中写入值回归验证涉及 EC2 Transit Gatewayencryption_support的用户建议升级后立即执行一次terraform plan与terraform apply验证读取链路正常。如需深入阅读实现细节可依次查看 internal/service/batch/job_definition_list.go、internal/service/codebuild/project_list.go、internal/service/lambda/capacity_provider_list.go、internal/service/ssm/parameter_list.go 四个 List 实现以及 internal/service/iam/outbound_web_identity_federation.goList 资源的设计原则与实体分类模型可对照 docs/list-resources.md 阅读。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考