尧图精选

Terraform AWS Provider 数据源 aws_datapipeline_pipeline 完全指南:读取 AWS Data Pipeline 管道信息

🕒 发布时间:2026/9/18 18:59:35 📁 来源:尧图网络
Terraform AWS Provider 数据源 aws_datapipeline_pipeline 完全指南读取 AWS Data Pipeline 管道信息【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws导读aws_datapipeline_pipeline是 Terraform AWS Provider 提供的 Data Pipeline 服务数据源用于按 Pipeline ID 查询指定 AWS Data Pipeline 管道的名称、描述与标签信息。在 terraform-provider-aws 项目中它配合 aws_datapipeline_pipeline 资源 使用可帮助你在配置中引用现有管道元数据或在管道资源与下游资源之间建立依赖关系。读完本文你将掌握该数据源的参数、导出属性、底层实现原理与标签行为并能写出可直接落地的 Terraform 配置。数据源概览它解决什么问题AWS Data Pipeline 是 AWS 的托管式数据工作流编排服务。在基础设施即代码IaC实践中你通常有两类需求管理管道创建、更新、删除管道对应资源aws_datapipeline_pipeline读取管道按 ID 获取管道现状以便在配置中引用name、description、tags等只读信息对应本文的数据源aws_datapipeline_pipeline。数据源的核心价值在于只需一个pipeline_id参数Terraform 即可在plan/apply阶段调用 AWS Data Pipeline API 读取管道元数据无需把名称、描述、标签硬编码在配置里。官方文档对它的定位是 Provides details about a specific DataPipeline Pipeline即提供特定管道管道的详细信息。参数详解Argument Reference数据源的 Schema 定义在 internal/service/datapipeline/pipeline_data_source.go 中其中pipeline_id是唯一必填参数参数类型必填说明pipeline_idstring必填目标管道的 ID。AWS Data Pipeline 的管道 ID 形如df-1234567890可通过aws_datapipeline_pipeline资源的id属性或控制台获取regionstring可选数据源生效的 AWS 区域。省略时默认使用 Provider 配置中的区域即provider aws的region参数最小可用配置官方文档给出的最小示例为data aws_datapipeline_pipeline example { pipeline_id pipelineID }将pipelineID替换为真实的管道 ID 即可查询。更贴近实战的配置资源与数据源联动真实项目中管道通常由 Terraform 管理数据源直接引用资源的id从而保证pipeline_id永远与资源状态同步无需硬编码resource aws_datapipeline_pipeline test { name tf-pipeline-default } data aws_datapipeline_pipeline test { pipeline_id aws_datapipeline_pipeline.test.id } # 在输出中引用数据源导出的属性 output pipeline_name { value data.aws_datapipeline_pipeline.test.name }这种写法的标准用法同样出现在项目的测试模板 internal/service/datapipeline/testdata/tmpl/pipeline_data_source.gtpl 与生成型测试配置 internal/service/datapipeline/testdata/Pipeline/data.tags/main_gen.tf 中后者把pipeline_id aws_datapipeline_pipeline.test.id与带tags的资源放在一起验证可见资源创建 数据源读取是官方认可的惯用法。属性引用Attribute Reference数据源在返回时除入参pipeline_id、region外还会导出以下只读属性属性类型说明namestring管道的名称descriptionstring管道的描述信息tagsmap(string)分配给该管道的标签键值对集合id在数据源上下文中即为pipeline_id。从 pipeline_data_source.go 的读取逻辑可以看到数据源将 API 返回结果逐一写入状态d.SetId(pipelineId) d.Set(names.AttrName, v.Name) d.Set(names.AttrDescription, v.Description) setTagsOut(ctx, v.Tags)也就是说id、name、description、tags四个值都来自 AWSDescribePipelines接口的实时响应而非配置声明。底层实现原理数据源是如何读数的数据源的完整读取链路如下全部代码位于 internal/service/datapipeline/pipeline_data_source.go获取客户端meta.(*conns.AWSClient).DataPipelineClient(ctx)从 Provider 连接池中取出 Data Pipeline 的 AWS SDK v2 客户端组装输入取出pipeline_id构造datapipeline.DescribePipelinesInput{PipelineIds: []string{pipelineId}}调用查找函数调用包内共用的findPipeline(ctx, conn, pipelineId)该函数定义在 pipeline.go实现逻辑为调用DescribePipelines然后在返回的PipelineDescriptionList中按PipelineId匹配目标管道并返回*awstypes.PipelineDescription错误处理若查询失败通过sdkdiag.AppendErrorf返回格式为describing DataPipeline Pipeline (%s): ...的诊断错误terraform plan/apply会直接报错中止写回状态将id、name、description写入 State标签则通过setTagsOut写入读取上下文。值得注意的是findPipeline是资源与数据源共用的查找函数资源aws_datapipeline_pipeline的 Read见 pipeline.go也复用它并且会额外判断PipelineNotFoundException与PipelineDeletedException在管道被删除时自动把id置空并从 State 移除。数据源版本则不做删除兜底因为数据源的语义是必须存在否则报错。区域region参数的来源region参数属于 AWS Provider 的通用约定数据源声明了region可选字段但实际网络请求使用的是 Provider 级联解析出的区域。这一点在官方文档中表述为 Defaults to the Region set in the provider configuration即不传region时跟随provider aws的区域配置。标签行为tags 与 default_tags / ignore_tags 的交互数据源 Schema 中标签字段tags使用tftags.TagsSchemaComputed()只读、由 API 计算得出。这意味着数据源不会修改管道标签只负责如实反映 AWS 侧现状。标签读取的底层实现在 internal/service/datapipeline/tags.go 中ListTags根据资源类型Pipeline调用listPipelineTags后者复用findPipeline获取PipelineDescription并从中提取Tags。整个 Data Pipeline 服务包的标签代码由 generate.go 中的go:generate指令自动生成涵盖AddTags/RemoveTags/UpdateTags等操作但数据源侧只读。从数据源的标签测试 internal/service/datapipeline/pipeline_data_source_tags_gen_test.go 可以归纳出三条关键行为普通标签资源上设置的tags会原样出现在数据源的tags属性中MapExact精确匹配Provider 默认标签当provider配置了default_tags时数据源的tags会同时包含Provider 级默认标签与资源级标签见TestAccDataPipelinePipelineDataSource_Tags_DefaultTags_nonOverlappingignore_tagsProvider 配置了ignore_tags时被忽略的键不会出现在数据源tags中但通过expectFullPipelineDataSourceTags检查可以看到这些标签在 AWS 侧仍真实存在只是 Terraform 不管理。另外TestAccDataPipelinePipelineDataSource_Tags_nullMap与..._Tags_emptyMap两个用例确认无标签或显式null时tags为空的 Map而不是null。质量保障验收测试如何验证数据源项目对该数据源配备了完整的接收测试acceptance tests主要位于 internal/service/datapipeline/pipeline_data_source_test.goTestAccDataPipelinePipelineDataSource_basic创建aws_datapipeline_pipeline.test资源再以pipeline_id aws_datapipeline_pipeline.test.id引用数据源用TestCheckResourceAttrPair断言数据源的pipeline_id、name、description与资源一一对应并用ExpectKnownValue验证tags为空 Map测试模板配置testAccPipelineDataSourceConfig_basic正是前文资源 数据源组合示例的来源标签相关的 5 个测试用例pipeline_data_source_tags_gen_test.go覆盖普通标签、null、空 Map、default_tags 非重叠、ignore_tags 重叠等场景。运行这些测试需要真实的 AWS 凭证命令形如make testacc TESTSTestAccDataPipelinePipelineDataSource_basic PKGdatapipeline具体测试框架与前置条件可参考仓库文档 docs/running-and-writing-acceptance-tests.md。使用注意事项pipeline_id必须真实存在数据源在Read阶段调用DescribePipelines如果管道 ID 不存在或已被删除Terraform 会报错并阻止执行这与资源在管道缺失时静默移除 State的行为不同ID 格式AWS Data Pipeline 的管道 ID 以df-开头如df-1234567890引用资源id是最稳妥的方式避免手抄出错标签只读数据源不提供写标签的能力修改标签请使用aws_datapipeline_pipeline资源的tags参数Provider 的default_tags与ignore_tags会直接影响数据源tags的输出内容配套资源如需同时管理管道的 Pipeline Definition管道定义可查阅 pipeline_definition_data_source.go 及对应的aws_datapipeline_pipeline_definition资源文档website/docs/r/datapipeline_pipeline_definition.html.markdown区域覆盖跨区域场景下显式传入region可覆盖 Provider 默认区域但需保证该区域内有对应管道。小结aws_datapipeline_pipeline数据源是一个参数极简、语义清晰的查询型数据源必填pipeline_id可选region导出name、description、tags。其实现复用资源层findPipeline查找函数并直接透传 AWSDescribePipelines响应标签读取则复用服务包级ListTags机制与 Provider 的default_tags/ignore_tags体系无缝衔接。无论是查询现存管道、还是在配置中引用管道元数据它都是 Data Pipeline 场景下值得优先使用的读取入口。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →