Terraform AWS Provider 之 aws_opensearchserverless_collection 数据源完整参数与源码级解析【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本指南以 AWS 官方 Terraform Provider 仓库中的 opensearchserverless_collection 数据源文档 为核心系统讲解如何通过aws_opensearchserverless_collection数据源查询 AWS OpenSearch Serverless Collection集合的元数据覆盖参数约束、全部导出属性并结合仓库源码剖析其基于BatchGetCollectionAPI 的底层实现与测试验证。读完本文你将能够准确地在 Terraform 配置中按id或name读取 Collection 信息并将其 ARN、端点地址、加密配置等属性安全地注入到其他资源中。数据源概述与适用场景aws_opensearchserverless_collection是 AWS Provider 提供的只读数据源data source用于获取 AWS OpenSearch Serverless Collection 的详细信息。在 Terraform 中数据源承担查询现状、读取元数据的职责与aws_opensearchserverless_collection资源负责创建、更新、删除形成互补关系。典型应用场景包括跨资源引用将已有 Collection 的arn、collection_endpoint、kms_key_arn等属性注入到 IAM 策略、安全组、监控告警等下游资源中基础设施导入后的状态补充对于通过terraform import或控制台创建的资源用数据源在配置中声明其存在并读取属性避免硬编码在多个配置之间共享 Collection 标识只维护一份名称或 ID 即可动态获取全部元数据。从仓库源码注释collection_data_source.go 中的FrameworkDataSource注解可以确认该数据源基于 HashiCorp 的Terraform Plugin Framework实现并与 Collection 资源共用同一套 AWS SDK 调用与查询逻辑。基础用法示例原文档给出的最简配置如下示例出处data aws_opensearchserverless_collection example { name example }执行terraform apply或terraform plan后即可通过data.aws_opensearchserverless_collection.example引用该 Collection 的各类属性例如output collection_arn { value data.aws_opensearchserverless_collection.example.arn } output collection_endpoint { value data.aws_opensearchserverless_collection.example.collection_endpoint }需要注意的是数据源查询的是已存在的 Collection。若目标 Collection 尚未创建更合适的做法是先声明aws_opensearchserverless_collection资源或采用下文与资源配合使用的写法由资源创建后数据源立即读取。参数Argument Reference数据源的全部参数均为可选但存在严格的互斥约束。原文档参数表如下参数是否可选说明region可选Collection 所在的 AWS 区域。默认使用 Provider 配置中设置的区域id可选Collection 的唯一标识IDname可选Collection 的名称核心约束id 与 name 必须二选一原文档通过醒目的提示强调了查询条件规则恰好需要id与name其中之一Exactly one ofidornameis required也就是说id与name不能同时设置也不能都不设置。这一约束并不仅停留在文档层面而是由源码中的 Schema 校验器强制执行的。在 collection_data_source.go 中可以看到id字段声明了stringvalidator.ConflictsWith(name)与name冲突和stringvalidator.ExactlyOneOf(name)二选一必填name字段声明了stringvalidator.ConflictsWith(id)。这意味着即便绕过文档直接向 Provider 提交不合法配置也会在terraform validate/terraform plan阶段被立即拒绝属于框架层面的静态校验无需发起任何 AWS API 调用。region 参数的作用region用于指定查询目标区域默认为 Provider 配置中的区域。结合 collection.go 中WithRegionModel的嵌入以及数据源模型同样继承自framework.WithRegionModelcollection_data_source.go可以确认该数据源支持多区域显式指定能力当 Collection 位于非默认区域时可显式传入region完成跨区域查询。属性参考Attribute Reference除上述参数外数据源在读取成功后导出以下全部属性属性说明arnCollection 的 ARNcollection_endpoint用于提交索引、搜索和数据上传请求的 Collection 专属端点created_dateCollection 的创建时间dashboard_endpoint用于访问 OpenSearch Dashboards 的 Collection 专属端点descriptionCollection 的描述信息failure_code与 Collection 关联的失败错误码failure_reason与 Collection 关联的失败原因kms_key_arn用于加密 Collection 的 AWS KMS 密钥 ARNlast_modified_dateCollection 的最后修改时间standby_replicas是否启用备用副本standby replicastags分配给 Collection 的标签映射typeCollection 的类型属性语义的源码级印证这些属性与数据源 Schema 定义一一对应collection_data_source.go其中几个关键点值得展开created_date与last_modified_date的时间格式AWS OpenSearch Serverless 返回的是 Unix 毫秒时间戳数据源在读取后通过time.UnixMilli(...).Format(time.RFC3339)转换为 RFC3339 字符串collection_data_source.go因此 Terraform 状态中的日期是标准 ISO 8601 格式便于直接与其他时间字符串比较或写入告警规则。failure_code与failure_reason当 Collection 创建或删除失败时状态为FAILED资源实现会从 API 返回中提取FailureCode与FailureMessage用于错误提示collection.go。数据源导出这两个字段便于在查询到异常状态的 Collection 时快速定位问题。standby_replicas与type对应 AWS 枚举StandbyReplicasENABLED/DISABLED与CollectionTypeSEARCH/TIMESERIES/VECTORSEARCH。资源侧的 Schema 校验通过enum.FrameworkValidate强约束这些取值collection.go。tags数据源以TagsAttributeComputedOnly()声明collection_data_source.go即只读导出不可在数据源上修改标签。源码级原理数据源读取流程为了更准确地使用该数据源理解其底层调用链会很有帮助。数据源的Read方法执行流程如下collection_data_source.go获取客户端通过d.Meta().OpenSearchServerlessClient(ctx)取得当前 Provider 配置下的 OpenSearch Serverless AWS SDK v2 客户端解析配置将用户的 Terraform 配置反序列化到collectionDataSourceModel按 ID 查询或按名称查询若设置了id调用findCollectionByID若设置了name调用findCollectionByName两个函数最终都调用 AWS SDK 的BatchGetCollectionAPI分别传入Ids或Names参数find.go结果反序列化通过flex.Flatten将 API 返回的CollectionDetail结构体映射到数据源模型其中CreatedDate、LastModifiedDate两个字段做特殊的毫秒时间戳转换写入状态将结果写入 Terraform State供其他资源引用。findCollectionByID/findCollectionByName中对ResourceNotFoundException的显式捕获并转换为retry.NotFoundErrorfind.go保证Collection 不存在这一场景能够被框架正确识别为友好的 not-found 语义而不是抛出一个原始 AWS 错误。与资源配合使用实战配置基础场景先创建后读取参考仓库中数据源的验收测试配置collection_data_source_test.go可以写出资源与数据源协同的完整示例。由于 OpenSearch Serverless Collection 必须先配置加密安全策略示例还引入了aws_opensearchserverless_security_policyresource aws_opensearchserverless_security_policy test { name example type encryption policy jsonencode({ Rules [ { Resource [collection/example] ResourceType collection } ] AWSOwnedKey true }) } resource aws_opensearchserverless_collection test { name example depends_on [aws_opensearchserverless_security_policy.test] } # 通过 id 查询 data aws_opensearchserverless_collection by_id { id aws_opensearchserverless_collection.test.id } # 通过 name 查询 data aws_opensearchserverless_collection by_name { name aws_opensearchserverless_collection.test.name } output endpoint { value data.aws_opensearchserverless_collection.by_id.collection_endpoint } output kms_key { value data.aws_opensearchserverless_collection.by_name.kms_key_arn }该示例同时演示了id与name两种查询路径的等价性并印证了测试中对数据源属性与资源属性逐项比对TestCheckResourceAttrPair的行为collection_data_source_test.go数据源读出的arn、collection_endpoint、dashboard_endpoint、description、kms_key_arn、standby_replicas、type等属性应与对应资源完全一致。查询已有 Collection对于已通过其他方式控制台、AWS CLI、导入存在的 Collection直接按名称查询即可data aws_opensearchserverless_collection existing { name my-existing-collection } resource aws_iam_policy aoss_access { name aoss-collection-access policy jsonencode({ Version 2012-10-17 Statement [ { Effect Allow Action [aoss:APIAccessAll] Resource [data.aws_opensearchserverless_collection.existing.arn] } ] }) }这里将数据源的arn直接用于 IAM 策略避免了在策略中硬编码 ARN是数据源最典型的生产级用法。使用注意事项与边界查询条件互斥id与name二选一同时设置或都不设置都会导致校验失败由 Schema 的ExactlyOneOf/ConflictsWith在plan阶段拦截。数据源是只读的它不会创建、修改或删除 Collection只负责读取状态创建 Collection 请使用 aws_opensearchserverless_collection 资源。区域默认行为未指定region时使用 Provider 的默认区域跨区域查询需显式设置region。时间字段格式created_date、last_modified_date在状态中以 RFC3339 字符串呈现内部由 Unix 毫秒转换而来。运行前提该数据源是 AWS Provider 的一部分使用时需在required_providers中声明hashicorp/aws并配置有效的 AWS 凭证与目标区域权限至少需要 OpenSearch Serverless 的读取权限。相关资源延伸阅读opensearchserverless_collection 资源文档数据源的写入端对应资源包含type、standby_replicas、encryption_config、vector_options等创建参数说明collection_data_source.go数据源完整实现Schema 定义与Read流程collection.goCollection 资源实现含创建/删除等待逻辑默认 20 分钟超时find.gofindCollectionByID/findCollectionByName底层查询函数collection_data_source_test.go数据源验收测试演示id与name两种查询路径及属性一致性校验。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考