资讯动态

terraform-provider-aws 数据源 aws_elasticache_serverless_cache 完整使用指南与源码解析

发布时间:2026/9/18 22:46:36 来源:尧图企业网站定制
terraform-provider-aws 数据源 aws_elasticache_serverless_cache 完整使用指南与源码解析【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本文以 terraform-provider-aws 仓库中的官方数据源文档website/docs/d/elasticache_serverless_cache.html.markdown为主体完整覆盖aws_elasticache_serverless_cache数据源的参数、属性与嵌套块说明并结合仓库内 数据源实现、缓存查找器 与 验收测试 的源码证据讲清该数据源如何读取 ElastiCache Serverless Cache 以及各字段的底层来源帮助你在 Terraform 配置中正确引用已有 Serverless Cache 的连接地址、规格上限等运行时信息。一、数据源定位与适用场景aws_elasticache_serverless_cache是一个只读数据源Data Source用于获取一个已存在的 ElastiCache Serverless Cache 的详细信息典型用途包括在其它资源中引用缓存的连接地址endpoint与端口避免硬编码 DNS 主机名读取缓存的用量上限cache_usage_limits用于容量审计与告警规则生成获取arn用于 IAM 权限策略、KMS 授权等依赖场景。该数据源只负责“读取”不负责创建缓存创建与管理由配套资源aws_elasticache_serverless_cache承担两者在仓库中同属internal/service/elasticache服务包。二、基本用法示例官方文档给出的最小示例data aws_elasticache_serverless_cache example { name example }仓库验收测试中serverless_cache_data_source_test.go则展示了更贴近实战的写法——数据源名称直接引用同栈资源创建的缓存resource aws_elasticache_serverless_cache test { engine redis # 或 valkey name my-serverless-cache } data aws_elasticache_serverless_cache test { name aws_elasticache_serverless_cache.test.name }测试分别覆盖了engine redis与engine valkey两种引擎见TestAccElastiCacheServerlessCacheDataSource_Redis_basic与TestAccElastiCacheServerlessCacheDataSource_Valkey_basic两个测试函数说明数据源对两种引擎均可正常工作。三、参数说明Argument Reference该数据源支持以下参数参数必选说明name是RequiredServerless Cache 的标识符缓存名称。region否Optional数据源查询所在的 AWS 区域默认使用 provider 配置中设置的 Region。从源码看name在 schema 定义 中标记为Required: true是整个数据源唯一的必填查询键region则通过framework.WithRegionModel模型定义 中内嵌的WithRegionModel字段注入属于该 provider 数据源的通用能力。四、属性说明Attribute Reference除上述参数外数据源导出以下属性属性类型说明arnStringServerless Cache 的 ARN。cache_usage_limitsBlock缓存的用量上限存储与 ECPU详见cache_usage_limitsBlock。create_timeString (RFC3339)缓存创建时间戳。daily_snapshot_timeString每日快照的创建时间仅对redis与valkey引擎可用。descriptionString缓存描述。endpointBlock客户端连接主端点所需的信息详见endpointBlock。engineString缓存引擎名称redis或valkey。full_engine_versionString缓存兼容的引擎名称与完整版本号。kms_key_idString用于静态数据加密的客户管理 KMS 密钥 ARN。major_engine_versionString缓存兼容的引擎主版本号。reader_endpointBlock读取端点信息详见reader_endpointBlock。security_group_idsList(String)关联到该缓存的一个或多个 VPC 安全组 ID 列表。snapshot_retention_limitInt保留的快照数量仅对 Redis 引擎可用。statusString缓存当前状态。subnet_idsList(String)部署该缓存 VPC 端点所在子网的 ID 列表。user_group_idString关联的 UserGroup 标识符对 Redis 与 Valkey 可用。在源码中这些属性与 schema 定义 一一对应其中几个值得注意的类型细节arn使用了自定义的fwtypes.ARNType保证该字段在 Terraform 侧被识别为标准 ARN 类型create_time使用timetypes.RFC3339类型即时间戳以 RFC3339 格式解析与呈现snapshot_retention_limit是Int64Attributeschema 源码security_group_ids与subnet_ids为字符串列表fwtypes.ListOfStringType。cache_usage_limits Blockcache_usage_limits块包含以下属性data_storage- 缓存中最大数据存储上限以 GB 为单位详见data_storageBlock。ecpu_per_second- 缓存每秒可消费的 ElastiCache Processing UnitsECPU配置值详见ecpu_per_secondBlock。data_storage Blockminimum- 数据存储的下限Int。maximum- 数据存储的上限Int。unit- 存储的计量单位。源码中该字段为枚举类型fwtypes.StringEnum[awstypes.DataStorageUnit]模型定义即取值受 AWS SDK 的DataStorageUnit枚举约束如 GB。ecpu_per_second Blockminimum- 缓存每秒可消费 ECPU 的最小值Int。maximum- 缓存每秒可消费 ECPU 的最大值Int。endpoint Blockendpoint块导出以下属性address- 缓存节点的 DNS 主机名。port- 缓存引擎监听的端口号以整数Int64表示。reader_endpoint Blockreader_endpoint块同样导出address节点 DNS 主机名与port监听端口整数两个属性用于客户端连接缓存节点的读取端点。在 数据源模型 中endpoint与reader_endpoint共用同一个dsEndpoint结构体Address types.String、Port types.Int64二者差异仅在于指向不同的端点角色。五、源码解析数据源如何读取缓存理解实现有助于排错与字段溯源。数据源由 newServerlessCacheDataSource 注册标注为FrameworkDataSource(aws_elasticache_serverless_cache)基于 Terraform Plugin Framework而非旧版 SDKv2实现整体调用链如下1. Read 入口Read 方法 的流程为从配置中解出serverlessCacheDataSourceModel其中Name为用户传入的缓存名调用findServerlessCacheByID(ctx, conn, data.Name.ValueString())向 AWS 发起查询出错时通过create.ProblemStandardMessage生成标准错误信息返回成功后使用flex.Flatten将 AWS 返回的ServerlessCache结构体扁平化映射到 Terraform 模型最终response.State.Set写入状态。2. 查找器与分页findServerlessCacheByID 以缓存名为键构造DescribeServerlessCachesInput并委托给单值查找函数findServerlessCache对分页结果调用tfresource.AssertSingleValueResult确保“恰好命中一个”缓存——如果同名缓存有多个或查不到会以明确的错误而非静默返回处理findServerlessCaches使用 AWS SDK 的DescribeServerlessCachesPaginator遍历所有分页遇到ServerlessCacheNotFoundFault时转换为retry.NotFoundError这是该 provider 统一的“资源不存在”识别机制使上层能区分“不存在”与“API 报错”。从源码结构看该查找器同时被数据源、资源Read与状态等待逻辑复用如 statusServerlessCache 轮询缓存状态保证数据源读到的信息与实际资源管理路径一致。3. status 取值源码常量 定义了四个缓存状态值即status属性可能的取值creating- 创建中available- 可用modifying- 修改中deleting- 删除中。六、与配套资源 aws_elasticache_serverless_cache 的字段对照验收测试通过TestCheckResourceAttrPair逐一断言数据源属性与资源属性相等见 测试检查项这实际上构成了两者的字段对照表arn、create_time、daily_snapshot_time、description、engine、full_engine_version、kms_key_id、major_engine_version、name、security_group_ids、snapshot_retention_limit、status、subnet_ids、user_group_id、cache_usage_limits以及endpoint/reader_endpoint的address与port均在测试中被逐字段比对。这意味着你在资源侧配置或观察到的这些值都可以放心地从数据源侧读取复用。需要注意引擎相关的字段差异与文档描述一致daily_snapshot_time仅redis与valkey引擎有值snapshot_retention_limit仅 Redis 引擎可用user_group_idRedis 与 Valkey 均可用。另外从 资源 schema 可见engine只支持redis与valkey之间原地互转其它引擎变更会触发替换——这解释了为什么数据源文档中反复以这两个引擎限定相关属性。七、典型实战模式一个常见用法是缓存由 IaC 创建但连接串需要交给非 Terraform 管理的系统如 Lambda 环境变量、RDS 参数。此时数据源提供了规范化的引用方式data aws_elasticache_serverless_cache example { name aws_elasticache_serverless_cache.example.name } output cache_address { value ${data.aws_elasticache_serverless_cache.example.endpoint.address}:${data.aws_elasticache_serverless_cache.example.endpoint.port} }由于endpoint.port在模型中为types.Int64dsEndpoint 定义拼接时不会像某些旧数据源那样出现字符串端口带来的比较问题。八、小结aws_elasticache_serverless_cache数据源以name为唯一必填键借助 AWS 的DescribeServerlessCachesAPI带分页与 NotFound 语义完成精确单值查询导出 ARN、端点、引擎版本、用量上限、网络与安全组、快照策略等 16 个属性完整覆盖客户端接入与容量治理所需的信息。文档定义位于 website/docs/d/elasticache_serverless_cache.html.markdown实现与测试分别位于 internal/service/elasticache/serverless_cache_data_source.go 和 internal/service/elasticache/serverless_cache_data_source_test.go可作为后续定制或排错的入口。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价