
terraform-provider-aws 中 aws_elasticache_replication_group 数据源读取 ElastiCache 复制组的完整指南【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本篇指南聚焦 terraform-provider-aws 提供的aws_elasticache_replication_group数据源如何按replication_group_id查询一个 ElastiCache 复制组的运行时状态并完整解读其导出的端点、节点组shard、日志投递等属性。读完本文你将掌握该数据源的配置方法、全部参数与属性含义以及 provider 源码中查询调用链、ID 校验规则和端点回退逻辑的实现细节便于在 Terraform 配置中可靠地引用已有 Redis 复制组。数据源定位与基本用法aws_elasticache_replication_group是一个只读数据源data source用于获取一个已存在的 ElastiCache 复制组的信息。它适合以下典型场景应用部署时引用复制组的configuration_endpoint_address/primary_endpoint_address让客户端完成主机发现在迁移、备份策略等配置中引用复制组的snapshot_window、snapshot_retention_limit用arn在 IAM 策略中引用该复制组作为资源。文档给出的最小示例如下data aws_elasticache_replication_group bar { replication_group_id example }更贴近实战的写法是引用资源块本身输出的 ID保证依赖关系正确该写法即仓库验收测试中使用的方式见 replication_group_data_source_test.go 中的testAccReplicationGroupDataSourceConfig_basicdata aws_elasticache_replication_group test { replication_group_id aws_elasticache_replication_group.test.replication_group_id }参数Argument Reference数据源支持以下参数参数必填说明region否查询该资源所在的 AWS Region默认使用 provider 配置中的 Regionreplication_group_id是复制组的标识符从源码结构看replication_group_id在 schema 中声明了显式校验函数见 replication_group_data_source.go 中的ValidateFunc: validateReplicationGroupID该校验器定义在 replication_group.go具体规则为长度在 1 到 40 个字符之间只允许字母、数字和连字符^[0-9A-Za-z-]$必须以字母开头不允许出现连续两个连字符--不允许以连字符结尾。这意味着如果你手工填写了一个不符合规则的 IDTerraform 会在 plan 阶段就被拦截不会发起 API 调用。属性Attribute Reference数据源在参数之外导出以下属性属性类型说明arnstring复制组的 ARNauth_token_enabledbool是否启用了 AuthToken密码认证automatic_failover_enabledbool主节点故障时是否自动将只读副本提升为主节点cluster_modestring集群模式是否启用enabled/disabledconfiguration_endpoint_addressstring用于主机发现的 configuration endpoint 地址descriptionstring复制组的描述log_delivery_configurationsetRedis SLOWLOG 或 Engine Log 的日志投递配置结构见下文member_clustersset(string)该复制组包含的所有集群 ID 列表multi_az_enabledbool是否启用 Multi-AZ 支持node_group_configurationset节点组shard配置列表结构见下文node_typestring集群节点类型如cache.t3.smallnum_cache_clustersint复制组拥有的缓存集群数量num_node_groupsint节点组shard数量portintconfiguration endpoint 接受连接的端口号primary_endpoint_addressstring节点组中主节点的端点地址reader_endpoint_addressstring节点组中读者节点的端点地址replicas_per_node_groupint每个节点组内的副本节点数snapshot_retention_limitint自动快照保留天数snapshot_windowstring每日快照时间窗口UTCnode_group_configuration结构每个元素包含字段说明node_group_id节点组 IDprimary_availability_zone主节点所在可用区primary_outpost_arn主节点的 Outpost ARNreplica_availability_zones副本节点可用区列表replica_count该节点组内的副本节点数replica_outpost_arns副本节点 Outpost ARN 列表slots该节点组的键空间hash slot 范围从源码看该结构的填充逻辑位于 replication_group.go 的 flattenNodeGroupConfigurations。一个值得注意的实现细节是由于 AWS API 返回的CurrentRole字段不可靠provider 采用“成员位置”策略来区分主节点与副本——NodeGroupMembers列表中的第一个成员视为 primary其余视为 replica并据此分别填充primary_availability_zone与replica_availability_zones等字段。同时replica_count由len(NodeGroupMembers) - 1计算得出。log_delivery_configuration结构文档中说明该属性承载 Redis SLOWLOG 或 Engine Log 的投递设置。从源码 schemareplication_group_data_source.go可以看到每个元素实际包含四个只读字段字段说明destination日志投递目标如 CloudWatch Logs 日志组名或 Kinesis Firehose 流名destination_type目标类型取值如cloudwatch-logs、kinesis-firehoselog_format日志格式如text、jsonlog_type日志类型如slow-log、engine-log其扁平化函数为 flex.go 中的 flattenLogDeliveryConfigurations可被资源与其他数据源复用。源码级实现解析查询链路如何工作数据源的读取入口是 replication_group_data_source.go 中的 dataSourceReplicationGroupRead其完整调用链为获取客户端meta.(*conns.AWSClient).ElastiCacheClient(ctx)取得当前 Region 的 ElastiCache SDK v2 客户端按 ID 查找调用 findReplicationGroupByID其构造DescribeReplicationGroupsInput并委托给findReplicationGroup→findReplicationGroups分页拉取与错误归一化findReplicationGroupsreplication_group.go使用DescribeReplicationGroupsPaginator遍历分页结果若遇到ReplicationGroupNotFoundFault会被转换为retry.NotFoundError由 provider 统一处理为“资源未找到”语义单值断言tfresource.AssertSingleValueResult保证查询结果唯一后才继续。在字段写入阶段有几处与属性语义直接相关的逻辑端点回退replication_group_data_source.go若 API 返回了ConfigurationEndpoint集群模式下存在则port与configuration_endpoint_address取自该端点否则回退到第一个节点组的PrimaryEndpoint/ReaderEndpoint填充port、primary_endpoint_address、reader_endpoint_address。若既没有 configuration endpoint 也没有任何节点组provider 会清空资源 ID 并返回错误 ElastiCache Replication Group (...) doesnt have node groups。因此引用configuration_endpoint_address时要意识到只有集群模式的复制组才会有该值。状态机归一化automatic_failover_enabled并不直接透传 API 的枚举值而是将Enabled/Enabling归一为true、Disabled/Disabling归一为falsemulti_az_enabled同理遇到未知状态时仅记录日志而不置值。这说明复制组正在切换故障转移开关的过程中数据源读取到的布尔值会反映目标状态。副本数计算replicas_per_node_group取第一个节点组的len(NodeGroupMembers) - 1即“成员数减去主节点”。成员集群数num_cache_clusters等于len(MemberClusters)与member_clusters集合一一对应。验收测试如何验证这些属性replication_group_data_source_test.go 中包含四组验收测试覆盖不同形态的复制组TestAccElastiCacheReplicationGroupDataSource_basic创建 2 集群、开启自动故障转移的复制组配置见testAccReplicationGroupDataSourceConfig_basic使用node_type cache.t3.small、snapshot_window 01:00-02:00、显式指定preferred_cache_cluster_azs逐项断言数据源与资源之间arn、automatic_failover_enabled、cluster_mode、multi_az_enabled、member_clusters.#、node_type、num_cache_clusters、port、primary_endpoint_address、reader_endpoint_address、description、snapshot_window等属性一致TestAccElastiCacheReplicationGroupDataSource_clusterMode创建集群模式复制组replicas_per_node_group 1、num_node_groups 2重点验证configuration_endpoint_address、num_node_groups、replicas_per_node_groupTestAccElastiCacheReplicationGroupDataSource_multiAZ开启multi_az_enabled true配合automatic_failover_enabled true验证多可用区场景下两个布尔属性与资源一致TestAccElastiCacheReplicationGroupDataSource_Engine_Redis_LogDeliveryConfigurations验证log_delivery_configuration的多条投递配置例如 CloudWatch Logs 接收slow-logtext 格式、Kinesis Firehose 接收engine-logjson 格式。这四组测试基本对应了前文属性表中每一类字段的验证路径可作为你自行编写集成测试时的参考模板。使用注意事项小结ID 规则replication_group_id必须以字母开头、不含连续连字符且不以连字符结尾plan 阶段即校验端点语义configuration_endpoint_address仅在集群模式复制组上有值单机/非集群场景请读取primary_endpoint_address与reader_endpoint_address过渡状态故障转移或 Multi-AZ 开关切换过程中布尔属性按目标状态归一化属于预期行为只读定位该数据源不参与资源生命周期管理创建与变更复制组应使用对应的aws_elasticache_replication_group资源数据源仅用于读取与引用实现代码位于 internal/service/elasticache/ 目录可进一步查阅replication_group.go与replication_group_data_source.go的完整逻辑。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考