ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

terraform-provider-aws 6.55.0:一批全新 List Resource、aws_elasticache_service_updates 数据源与资源身份支持

terraform-provider-aws 6.55.0:一批全新 List Resource、aws_elasticache_service_updates 数据源与资源身份支持 terraform-provider-aws 6.55.0一批全新 List Resource、aws_elasticache_service_updates 数据源与资源身份支持【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsterraform-provider-aws v6.55.02026 年 7 月 15 日发布是一次以“资源可见性与发现能力”为主题的版本一次性新增 6 个 List Resourceaws_autoscaling_group、aws_cloudwatch_log_stream、aws_kinesis_firehose_delivery_stream、aws_network_interface、aws_rds_cluster、aws_sfn_state_machine和 1 个数据源aws_elasticache_service_updates并为aws_network_interface、aws_rds_cluster增加了资源身份resource identity支持。读完本文你能完整掌握 6.55.0 的全部变更内容、List Resource 在 Provider 内部的实现机制分页迭代、Schema 复用、include_resource行为以及新数据源的 Schema 字段与调用链便于在升级 Provider 后快速启用这些新能力。6.55.0 变更全览以下条目完整继承自本仓库的变更记录 .changes/6.x/6.55.0.md。FEATURES新功能新数据源aws_elasticache_service_updates#44608新 List Resourceaws_autoscaling_group#48928新 List Resourceaws_cloudwatch_log_stream#48878新 List Resourceaws_kinesis_firehose_delivery_stream#48946新 List Resourceaws_network_interface#48887新 List Resourceaws_rds_cluster#48948新 List Resourceaws_sfn_state_machine#48840ENHANCEMENTS增强aws_bedrock_guardrail新增updated_at属性#48881aws_bedrockagentcore_agent_runtimeauthorizer_configuration.custom_jwt_authorizer增加allowed_workload_configuration、private_endpoint、private_endpoint_overrides配置块network_configuration.network_mode_config增加只读属性require_service_s3_endpoint#48654aws_bedrockagentcore_gatewayauthorizer_configuration.custom_jwt_authorizer增加allowed_workload_configuration、private_endpoint、private_endpoint_overrides配置块#48654aws_bedrockagentcore_harnessauthorizer_configuration.custom_jwt_authorizer增加上述三个配置块且network_configuration.network_mode_config新增require_service_s3_endpoint参数#48654aws_bedrockagentcore_registryauthorizer_configuration.custom_jwt_authorizer增加上述三个配置块#48654aws_msk_replicatorconsumer_group_replication块新增consumer_group_offset_sync_mode属性#47670aws_network_interface新增资源身份resource identity支持#48887aws_rds_cluster新增资源身份支持#48948BUG FIXES缺陷修复aws_bedrockagentcore_harness修复未配置memory时出现的Unsupported Type错误#48654aws_config_organization_managed_rule修复删除时interface conversion: interface {} is nil, not *configservice.DescribeOrganizationConfigRuleStatusesOutput导致的 panic#48845一次落地 6 个 List Resource面向“列出而非创建”的资源类型List Resource 是 Terraform 插件框架引入的一种资源形态它不对应“创建/删除”的生命周期而是让terraform以列表资源的形式枚举环境中已存在的对象例如列出账户下所有 Auto Scaling Group 供引用、筛选或后续操作。关于其设计动机与使用规范仓库中有专门文档 docs/list-resources.md 以及设计决策记录 docs/design-decisions/resource-types-without-list.md说明哪些资源类型不提供 List 形态及其理由。6.55.0 是 List Resource 批量扩张的版本一次覆盖 6 个此前只有单资源形态的热门服务。下面以aws_autoscaling_group为例剖析其内部实现其余 List Resource 结构与之高度一致。aws_autoscaling_group List Resource 实现剖析实现在 internal/service/autoscaling/group_list.go其骨架可以概括为三步注册注解与 Schema 复用。入口函数通过注解注册到 Provider// Function annotations are used for list resource registration to the Provider. DO NOT EDIT. // SDKListResource(aws_autoscaling_group) func newGroupResourceAsListResource() inttypes.ListResourceForSDK { l : groupListResource{} l.SetResourceSchema(resourceGroup()) return l }关键点在于SetResourceSchema(resourceGroup())——List Resource 直接复用既有aws_autoscaling_group单资源的 SDKv2 Schema保证列表项字段与单资源形态完全对齐。结构体groupListResource内嵌framework.ListResourceWithSDKv2Resource定义于 internal/framework/list_resource_with_sdkv2_resource.go从源码结构看这套内嵌机制是 Provider 将大量 SDKv2 资源“零成本”包装为 List Resource 的通用手法。基于 Go 2 迭代器的分页遍历。List方法通过stream.Results注入一个yield闭包内部调用listGroupsfunc listGroups(ctx context.Context, conn *autoscaling.Client, input *autoscaling.DescribeAutoScalingGroupsInput) iter.Seq2[awstypes.AutoScalingGroup, error] { return func(yield func(awstypes.AutoScalingGroup, error) bool) { pages : autoscaling.NewDescribeAutoScalingGroupsPaginator(conn, input) for pages.HasMorePages() { page, err : pages.NextPage(ctx) ... for _, g : range page.AutoScalingGroups { if !yield(g, nil) { return } } } } }这里使用iter.Seq2[T, error]惰性产出每个 Auto Scaling Group分页由 AWS SDK v2 的NewDescribeAutoScalingGroupsPaginator完成调用方一旦不再需要后续结果yield返回 false即可提前终止避免拉取全量数据。IncludeResource控制结果粒度。列表项默认只填充Id与namerd.SetId(name)、rd.Set(names.AttrName, ...)仅当请求携带include_resource时才会调用resourceGroupFlatten将完整的组配置伸缩范围、实例配置、健康检查等扁平化进结果。单条记录读取失败时仅记录错误日志并continue跳过该条不会中断整个列表——这是从diags.HasError() { ... continue }分支可以直接确认的容错设计。每个结果还带有DisplayName name用于 Terraform 在交互输出中展示可读名称日志方面则通过tflog.SetField注入name字段便于排查具体是哪个资源导致的错误。对应的验收测试位于 internal/service/autoscaling/group_list_test.go。其余五个 List Resource 的落点本版本新增aws_kinesis_firehose_delivery_streaminternal/service/firehose/delivery_stream_list.goaws_rds_clusterinternal/service/rds/cluster_list.go测试见 internal/service/rds/cluster_list_test.goaws_sfn_state_machineinternal/service/sfn/state_machine_list.go测试见 internal/service/sfn/state_machine_list_test.goaws_network_interface与aws_cloudwatch_log_stream分别位于internal/service/ec2与internal/service/cloudwatch服务目录目录见仓库 internal/service 下的对应子目录遵循相同的“注解注册 分页迭代 条件扁平化”模式。新数据源 aws_elasticache_service_updates查看弹性缓存服务的计划内更新aws_elasticache_service_updates#44608用于查询 AWS 对 ElastiCache 集群计划执行的服务更新如小版本维护、安全补丁帮助用户在变更窗口规划时提前获知recommended_apply_by_date等关键时间点。Schema 与输出字段实现位于 internal/service/elasticache/service_updates_data_source.go。数据源仅有一个可选输入与一个计算输出status可选Set of String Enum按ServiceUpdateStatus枚举值过滤底层类型为fwtypes.SetOfStringEnumType[awstypes.ServiceUpdateStatus]因此 Terraform 侧只会接受 AWS SDK 定义中的合法状态值非法值在 Schema 校验阶段即被拒绝service_updates计算List of Object更新条目列表。从源码结构看每个service_updates元素serviceUpdateModel包含以下字段可直接用于 HCL 引用HCL 属性含义name服务更新名称API 字段ServiceUpdateNamedescription更新描述engine引擎类型如 redis、memcachedengine_version引擎版本severity严重程度status更新状态type更新类型release_date发布日期RFC3339 时间类型end_date结束日期RFC3339 时间类型recommended_apply_by_date建议应用截止日期auto_update_after_recommended_apply_by_date是否会在建议截止日期后自动应用estimated_update_time预计更新耗时其中三个日期字段使用了timetypes.RFC3339来自 terraform-plugin-framework-timetypes说明它们在 Terraform 状态中以标准 RFC3339 时间类型保存可直接参与时间比较运算。读取流程与分页Read方法的调用链清晰可见req.Config.Get(ctx, data)取出配置flex.Expand(ctx, data, input)将 Terraform 配置映射为elasticache.DescribeServiceUpdatesInputfindServiceUpdates使用elasticache.NewDescribeServiceUpdatesPaginator遍历所有分页并聚合flex.Flatten将 SDK 类型转换回 Terraform 模型并写入状态。值得注意的一个工程细节findServiceUpdates中显式make([]awstypes.ServiceUpdate, 0)初始化结果并注释说明“确保无结果时返回空切片而非 nil”——这保证了账户下没有任何待更新时service_updates渲染为空列表而不是 null下游length(service_updates)之类的表达式不会出现空值歧义。该数据源为 Plugin Framework 实现FrameworkDataSource注解验收测试位于 internal/service/elasticache/service_updates_data_source_test.go。典型用法示例data aws_elasticache_service_updates pending { status [PENDING] } output pending_cache_updates { value [ for u in data.aws_elasticache_service_updates.pending.service_updates : { name u.name engine u.engine severity u.severity recommended_by u.recommended_apply_by_date } ] }status合法枚举值以当前 AWS 账户可查询到的ServiceUpdateStatus为准Schema 层已做枚举校验。资源身份Resource Identity支持落地到更多资源本版本为aws_network_interface#48887与aws_rds_cluster#48948增加资源身份支持二者恰好也分别对应新增的aws_network_interface、aws_rds_clusterList Resource——即同一 PR 同时交付了“列出资源”和“以身份而非裸 ID 引用资源”两项能力。资源身份允许在 HCL 中以结构化的身份字段而不仅仅是 ARN/ID 字符串唯一标识一个资源其概念与落地规范见 docs/resource-identity.md、docs/add-resource-identity-support.mdID 属性标准化方向则记录于 docs/design-decisions/standardize-use-of-the-id-attribute.md。其他增强与缺陷修复Bedrock AgentCore 网络与 JWT 授权增强#48654贯穿本版本最多条目aws_bedrockagentcore_agent_runtime、aws_bedrockagentcore_gateway、aws_bedrockagentcore_harness、aws_bedrockagentcore_registry四个资源的authorizer_configuration.custom_jwt_authorizer统一新增allowed_workload_configuration、private_endpoint、private_endpoint_overrides配置块agent_runtime与harness的network_configuration.network_mode_config新增require_service_s3_endpoint前者只读、后者可写。相关实现集中于 internal/service/bedrockagentcore 服务目录。aws_bedrock_guardrail新增updated_at属性#48881实现于 internal/service/bedrock。aws_msk_replicatorconsumer_group_replication块新增consumer_group_offset_sync_mode属性#47670实现于 internal/service/kafkaMSK Replicator 归属于该服务包。缺陷修复aws_bedrockagentcore_harness修复了未配置memory时模型解析报Unsupported Type的问题#48654aws_config_organization_managed_rule修复了删除阶段对DescribeOrganizationConfigRuleStatusesOutput的 nil 类型断言 panic#48845实现位于 internal/service/configservice。获取与验证 6.55.0版本号维护在 version/VERSION代码读取入口为 version/version.goregistry 元信息见 terraform-registry-manifest.json。升级后在required_providers中将hashicorp/aws约束到6.55.0或~ 6.55即可使用本版本全部新资源形态新增 List Resource 遵循 Terraform List Resource 语法可在配置中以列表资源声明引用现有对象。若需核对某条变更的实现可按本文给出的internal/service/服务目录路径直接查看对应 Go 源码与同名_test.go验收测试。适用前提与限制新数据源依赖DescribeServiceUpdatesAPI 在目标区域的可用性输出字段由 AWS 侧返回值决定List Resource 的完整性依赖当前凭证具备相应服务的只读列举权限单条读取失败会被跳过并记入诊断日志而非整体失败。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表