使用 aws_oam_links 数据源枚举 CloudWatch Observability Access Manager 链接(terraform-provider-aws 实战指南)
使用 aws_oam_links 数据源枚举 CloudWatch Observability Access Manager 链接terraform-provider-aws 实战指南【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_oam_links是 terraform-provider-aws 提供的用于枚举 AWS CloudWatch Observability Access ManagerOAM中全部 Link 资源 ARN 的数据源。本文以官方数据源文档为核心结合仓库内 links_data_source.go 的实现与 links_data_source_test.go 的验收测试配置完整讲解该数据源的用法、参数、返回属性、底层实现原理以及与aws_oam_link、aws_oam_sink等配套资源的配合方式帮助你在跨账户可观测性场景中快速盘点已建立的链接。数据源概述CloudWatch Observability Access Manager 允许一个账户监控账户通过Sink汇与Link链接机制跨账户共享 CloudWatch 指标、日志与 X-Ray 追踪数据。其中Sink是接收共享数据的监控账户侧实体由 sink.go 中的aws_oam_sink资源管理Link是数据源账户侧建立的指向某个 Sink 的关联由 link.go 中的aws_oam_link资源管理。aws_oam_links数据源的作用就是在当前账户与区域下一次性列出所有 Link 的 ARN供其他资源引用或用于批量巡检。它属于典型的「只读盘点型」数据源不接收业务配置只返回现有资源的标识集合。提示与它配套的单数数据源aws_oam_link按link_identifier查询单个链接的详细属性见 link_data_source.go以及同类枚举数据源aws_oam_sinks见 sinks_data_source.go共同构成了 OAM 资源在 Provider 中的完整数据查询能力。Example Usage基本用法官方文档给出的最小化定义如下data aws_oam_links example { }该数据源在无任何参数的情况下即可运行会返回当前 Provider 所配置区域内的全部 Link ARN。这是使用数据源最简洁的形态适合直接嵌入到输出或条件判断中例如data aws_oam_links example {} output all_link_arns { value data.aws_oam_links.example.arns }Argument Reference参数说明该数据源仅支持一个可选参数参数类型必填说明regionstring否数据源将在此区域执行枚举操作。默认取 Provider 配置中设置的区域即provider aws块中的region通常无需显式指定。region参数可用于跨区域场景当你的 Provider 默认区域与目标枚举区域不一致时可以显式指定例如data aws_oam_links eu_links { region eu-west-1 }从实现看数据源在读取时执行d.SetId(meta.(*conns.AWSClient).Region(ctx))将数据源自身 ID 设为实际执行的区域并且客户端通过meta.(*conns.AWSClient).ObservabilityAccessManagerClient(ctx)获取因此区域语义完全由该参数与 Provider 配置共同决定。Attribute Reference返回属性读取完成后数据源导出以下属性属性类型说明arnsSet of string当前区域下所有 OAM Link 的 ARN 集合。arns是一个无序集合Terraform Set元素为字符串类型的 ARN格式形如arn:aws:oam:region:account-id:link/link-id。在配置中可用data.aws_oam_links.example.arns整体引用也可配合for表达式或toset()做进一步处理data aws_oam_links example {} locals { link_count length(data.aws_oam_links.example.arns) } output link_count { value local.link_count }源码实现原理要理解该数据源的精确行为可以阅读仓库中的实现文件 links_data_source.go。其核心逻辑如下声明 Schema数据源只声明了一个arns属性类型为schema.TypeSet元素为schema.TypeString标记为Computed只读、由 Provider 填充没有任何用户输入字段region属于所有资源共享的通用区域参数。执行读取dataSourceLinksRead中构造一个空的oam.ListLinksInput调用findLinks完成 API 枚举。分页处理findLinks使用 AWS SDK for Go v2 的分页器oam.NewListLinksPaginator(conn, input)循环拉取所有页逐页把page.Items追加到结果切片中——因此即使账户中存在大量 Link超过单页返回上限也能完整枚举不会漏项。结果转换对每个awstypes.ListLinksItem通过aws.ToString(v.Arn)提取 ARN 字符串并借助tfslices.ApplyToAll批量转换为字符串切片后写入arns属性。设置资源 ID将数据源 ID 设置为当前执行区域保证同一配置在不同区域下各自独立刷新状态。整个流程没有任何写操作也不会对 AWS 侧产生副作用符合数据源「幂等只读」的设计原则。完整的跨账户实战配置仅靠一个空数据源并不能体现 OAM 的完整语义。仓库的验收测试 links_data_source_test.go 给出了一个真实可用的跨账户配置它完整展示了「从创建 Sink → 授权 Sink 策略 → 建立 Link → 用数据源枚举」的链路是理解aws_oam_links最佳实践的权威示例# 数据源账户信息默认 Provider data aws_caller_identity source {} data aws_partition source {} # 监控账户信息alternate Provider即 awsalternate data aws_caller_identity monitoring { provider awsalternate } data aws_partition monitoring { provider awsalternate } # 监控账户创建 Sink resource aws_oam_sink test { provider awsalternate name example-sink } # 监控账户为 Sink 授权允许数据源账户建立 Link resource aws_oam_sink_policy test { provider awsalternate sink_identifier aws_oam_sink.test.arn policy jsonencode({ Version 2012-10-17 Statement [ { Action [oam:CreateLink, oam:UpdateLink] Effect Allow Resource * Principal { AWS arn:${data.aws_partition.source.partition}:iam::${data.aws_caller_identity.source.account_id}:root } Condition { ForAnyValue:StringEquals { oam:ResourceTypes [AWS::CloudWatch::Metric, AWS::Logs::LogGroup] } } } ] }) } # 数据源账户建立 Link resource aws_oam_link test { label_template $AccountName resource_types [AWS::CloudWatch::Metric] sink_identifier aws_oam_sink.test.arn tags { key1 value1 } depends_on [ aws_oam_sink_policy.test ] } # 用数据源枚举本账户全部 Link data aws_oam_links test { depends_on [aws_oam_link.test] }这个配置中有几个值得注意的实战要点双 Provider 账号模型Sink 建在监控账户awsalternateLink 建在数据源账户默认 Provider模拟真实的跨账户可观测性架构aws_oam_links枚举的是当前数据源账户下的链接。先授权后建链aws_oam_sink_policy通过Principal指定允许建立 Link 的源账户并用Condition限定允许共享的资源类型指标、日志组aws_oam_link通过depends_on确保授权策略先于链接创建避免oam:CreateLink被拒绝。依赖顺序测试中数据源depends_on [aws_oam_link.test]保证在数据源读取前链接已创建完成从而能断言arns.#的数量。Link 资源的关键约束来自 link.go 的 Schemalabel_template与sink_identifier均为必填且创建后不可变ForceNewresource_types必填且数量限制在 150 之间取值由awstypes.ResourceType枚举校验。验收断言仓库测试 links_data_source_test.go 中的testAccObservabilityAccessManagerLinksDataSource_basic对上述配置执行了两条核心断言arns.# 1确保数据源恰好枚举到 1 个链接arns.0符合区域 ARN 正则arn:aws:oam:region:account:link/.校验返回的 ARN 结构与 OAM 链接的标准 ARN 格式一致。这两条断言同时验证了数据源的枚举完整性与ARN 格式正确性你在自己的配置中也可以参考同样的校验思路。注意事项与最佳实践区域隔离aws_oam_links只返回当前或region指定的区域内的链接。跨区域盘点时需为每个区域分别定义数据源。账户隔离该数据源返回的是当前凭据所属账户的链接。监控账户侧的链接需要通过监控账户的 Provider如awsalternate另建数据源查询。配合depends_on使用在同一配置中先创建aws_oam_link再立即读取数据源时务必显式声明依赖确保刷新时序正确。与单数数据源搭配若需要某个具体链接的详细信息标签、label_template、link_configuration、sink_arn、resource_types 等请改用aws_oam_link数据源按link_identifier精确查询aws_oam_links适合「全量盘点 数量统计 批量引用」的场景。引用方式arns为无序 Set若需要在确定性顺序下遍历可结合sort()函数处理后再使用。相关文档与源码导航数据源官方文档本文主体website/docs/d/oam_links.html.markdown数据源实现internal/service/oam/links_data_source.go数据源验收测试internal/service/oam/links_data_source_test.goLink 资源实现了解链接创建约束internal/service/oam/link.go单数数据源aws_oam_linkinternal/service/oam/link_data_source.goSink 资源实现internal/service/oam/sink.go同类枚举数据源aws_oam_sinksinternal/service/oam/sinks_data_source.goOAM 服务包说明internal/service/oam/README.md掌握aws_oam_links数据源后你便可以在 Terraform 配置中以声明式方式完整实现「跨账户可观测性链接的建立与盘点」并将链接 ARN 集合作为输入传递给下游资源或输出到运维系统实现基础设施与观测体系的一体化管理。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →