深入解析 Terraform AWS Provider 的 `aws_media_convert_queue` 数据源:读取 Elemental MediaConvert 队列信息

深入解析 Terraform AWS Provider 的 `aws_media_convert_queue` 数据源:读取 Elemental MediaConvert 队列信息 深入解析 Terraform AWS Provider 的aws_media_convert_queue数据源读取 Elemental MediaConvert 队列信息【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本指南以 HashiCorp Terraform AWS Provider 官方文档中aws_media_convert_queue数据源Data Source为核心完整讲解如何通过 Terraform 读取 AWS Elemental MediaConvert 队列的标识、ARN、状态与标签信息。读完本文你将掌握该数据源的全部参数与导出属性、底层 SDK 调用链路以及如何与aws_media_convert_queue资源组合实现创建即引用的典型场景。一、数据源概览它解决什么问题AWS Elemental MediaConvert 是一项媒体转码服务队列Queue用于管理转码作业Job的调度与并发。在实际基础设施管理中你经常需要引用已存在队列的 ARN例如配置转码作业、IAM 策略或事件通知而不是重复硬编码。aws_media_convert_queue数据源正是为此设计给定队列的唯一标识idTerraform 会向 MediaConvert 服务发起查询返回队列的 ARN、名称、当前状态以及全部标签供配置中的其他资源引用。官方文档对该数据源的定位表述为Retrieve information about a AWS Elemental MediaConvert Queue参见 website/docs/d/media_convert_queue.html.markdown。二、最小可用示例官方文档给出的最简用法只需一个必填参数iddata aws_media_convert_queue example { id tf-example-queue }执行terraform plan或terraform apply后即可通过data.aws_media_convert_queue.example.arn、.status等属性在配置中引用查询结果。注意该数据源隶属于Elemental MediaConvert子分类使用前请确保 AWS 账号已开通 MediaConvert 服务且 Terraform 执行环境具备读取队列所需的 IAM 权限对应 MediaConvertGetQueueAPI 操作。三、Argument Reference支持的查询参数数据源支持以下两个参数参数必填说明region可选队列所在的 AWS 区域。默认使用 provider 配置中设置的区域也可以通过 provider 的region或各资源级region覆盖。MediaConvert 采用区域化端点因此跨区域查询时必须显式指定。id必填队列的唯一标识符其值与队列的name相同。文档明确指出The same asname。四、Attribute Reference导出的属性查询成功后该数据源在参数之外还导出以下属性属性类型说明arnstring队列的 Amazon Resource NameARN。namestring队列名称与id相同。statusstring队列当前状态如ACTIVE或PAUSED。tagsmap资源上的标签映射包含从 providerdefault_tagsconfiguration block 继承的标签。一个常见的输出用法output queue_arn { value data.aws_media_convert_queue.example.arn } output queue_status { value data.aws_media_convert_queue.example.status } output queue_tags { value data.aws_media_convert_queue.example.tags }五、底层实现解析数据源是如何工作的在 Terraform AWS Provider 仓库中该数据源的完整实现位于 internal/service/mediaconvert/queue_data_source.go。阅读源码可以验证文档描述与真实行为完全一致5.1 Schema 定义实现采用 Terraform Plugin SDK v2通过SchemaFunc定义字段names.AttrARN: { Type: schema.TypeString, Computed: true }, names.AttrID: { Type: schema.TypeString, Required: true }, names.AttrName: { Type: schema.TypeString, Computed: true }, names.AttrStatus: { Type: schema.TypeString, Computed: true }, names.AttrTags: tftags.TagsSchemaComputed(),可以看到id是唯一 Required必填字段arn、name、status均为 Computed只读导出tags使用TagsSchemaComputed()——这正是文档中tags包含从 providerdefault_tags继承标签的源码级体现。5.2 读取流程dataSourceQueueRead是核心读取函数调用链如下conn : meta.(*conns.AWSClient).MediaConvertClient(ctx) id : d.Get(names.AttrID).(string) queue, err : findQueueByName(ctx, conn, id) ... name : aws.ToString(queue.Name) d.SetId(name) d.Set(names.AttrARN, queue.Arn) d.Set(names.AttrName, name) d.Set(names.AttrStatus, queue.Status)关键点通过AWSClient.MediaConvertClient(ctx)获取 MediaConvert 的 AWS SDK for Go v2 客户端调用findQueueByName按名称查询队列该函数定义于 internal/service/mediaconvert/queue.go内部封装了conn.GetQueueAPI 调用并对NotFoundException与空结果分别转换为retry.NotFoundError和tfresource.NewEmptyResultError查询成功后将返回的队列Name写回id印证文档所述id与name相同再依次填充arn、name、status。六、数据从哪来配套的aws_media_convert_queue资源数据源查询的对象通常由aws_media_convert_queue资源管理资源文档见 website/docs/r/media_convert_queue.html.markdown。掌握资源的全部参数有助于理解队列可查询的字段来源。6.1 资源参数一览参数必填默认值说明name是—队列唯一标识创建后不可更改ForceNew。concurrent_jobs否由服务端决定队列可并发处理的作业数上限。按需ON_DEMAND队列受账号配额约束预留RESERVED队列由预订计划决定。description否—队列描述。pricing_plan否ON_DEMAND计费计划可选ON_DEMAND或RESERVED创建后不可更改。reservation_plan_settings否—预留队列的详细计费计划见下文。status否ACTIVE队列状态可选ACTIVE或PAUSED。tags否—资源标签可与 providerdefault_tags合并。说明资源源码位于 internal/service/mediaconvert/queue.go其中pricing_plan默认值types.PricingPlanOnDemand、status默认值types.QueueStatusActive均通过Default字段声明并与文档一致。资源也支持terraform import按队列名称导入如terraform import aws_media_convert_queue.test tf-test-queue。6.2reservation_plan_settings子块仅当pricing_plan RESERVED时使用包含三个必填字段字段可选值说明commitmentONE_YEAR预订计划的承诺期限长度。renewal_typeAUTO_RENEW/EXPIRE预订期限到期后的续订方式。reserved_slots整数队列预留的转码槽位RTS数量。在源码中这三个字段分别通过enum.Validate[types.Commitment]()与enum.Validate[types.RenewalType]()做枚举校验并由expandReservationPlanSettings/flattenReservationPlan函数完成 Terraform 结构与 AWS SDK 类型之间的转换。七、典型组合用法创建队列并立即引用实际工程中最常见的模式是资源创建 数据源引用既能在同一配置内管理队列又能把 ARN 安全地传递给下游资源。数据源测试中也采用了这种模式见 internal/service/mediaconvert/queue_data_source_test.goresource aws_media_convert_queue example { name tf-example-queue description Video transcode queue for production concurrent_jobs 10 pricing_plan ON_DEMAND status ACTIVE tags { Environment production Team media } } data aws_media_convert_queue example { # id 与资源 name 一致直接引用资源属性即可保证同步 id aws_media_convert_queue.example.id } output example_queue_arn { value data.aws_media_convert_queue.example.arn } output example_queue_status { value data.aws_media_convert_queue.example.status }这样下游无论需要队列 ARN用于授权转码、构建作业配置还是状态用于自动化判断都可以从data.aws_media_convert_queue.example.*稳定获取。八、标签是如何读取的tags与tags_all的机制数据源的tags属性由tftags.TagsSchemaComputed()生成。标签的实际读取通过 MediaConvert 的ListTagsForResourceAPI 完成实现在 internal/service/mediaconvert/tags_gen.go 的listTags函数中——它以资源的 ARN 为标识与数据源 Schema 上的Tags(identifierAttributearn)注解对应发起请求input : mediaconvert.ListTagsForResourceInput{ Arn: aws.String(identifier), } output, err : conn.ListTagsForResource(ctx, input, optFns...)需要留意两个细节数据源导出的是tags含继承的default_tags而资源额外导出tags_all同样含继承标签两者语义在文档中均有明确区分若队列本身没有标签tags会是一个空 map不会导致数据源读取失败。九、测试验证数据源行为如何被保障仓库中的 internal/service/mediaconvert/queue_data_source_test.go 提供了数据源的验收测试TestAccMediaConvertQueueDataSource_basic。其核心断言如下resource.TestCheckResourceAttrPair(resourceName, names.AttrARN, dataSourceName, names.AttrARN), resource.TestCheckResourceAttrPair(resourceName, names.AttrName, dataSourceName, names.AttrName), resource.TestCheckResourceAttrPair(resourceName, acctest.CtTagsPercent, dataSourceName, acctest.CtTagsPercent),测试逻辑清晰可验证先创建资源aws_media_convert_queue.test再声明数据源data.aws_media_convert_queue.test且数据源id直接引用aws_media_convert_queue.test.id用TestCheckResourceAttrPair断言资源与数据源的arn、name完全一致——从验收层面再次证明数据源读取的就是同名队列对比tags.%标签数量一致确认标签读取链路工作正常。配套的资源级测试internal/service/mediaconvert/queue_test.go还覆盖了concurrent_jobs动态调整100→5、status在PAUSED/ACTIVE间切换、description更新、多标签增删以及pricing_plan RESERVED的预订计划场景为数据源可查询到的字段取值提供了完整佐证。十、使用注意事项区域一致性region参数默认继承 provider 配置跨区域查询队列时必须显式设置否则会因端点区域不匹配而查询失败。id即name查询标识就是队列名称无独立 UUID因此按资源属性id引用即可无需额外转换。只读语义数据源不会创建或修改任何 AWS 资源仅执行一次GetQueue读取对队列的管理应交给aws_media_convert_queue资源完成。权限要求执行读取需要具备mediaconvert:GetQueue及读取标签所需的mediaconvert:ListTagsForResource权限。综上aws_media_convert_queue数据源是一个轻量但可靠的队列信息读取入口。无论是对接转码作业配置、构建依赖 ARN 的基础设施编排还是自动化巡检队列状态你都可以基于本文的用法与源码依据放心使用。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考