ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

使用 Terraform AWS Provider 的 `aws_medialive_input` 数据源:读取 AWS Elemental MediaLive 输入详情

2026/9/19 7:28:53 拓冰建站 浏览量
使用 Terraform AWS Provider 的 `aws_medialive_input` 数据源:读取 AWS Elemental MediaLive 输入详情 使用 Terraform AWS Provider 的aws_medialive_input数据源读取 AWS Elemental MediaLive 输入详情【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws导读aws_medialive_input是 terraform-provider-aws 提供的官方数据源Data Source用于按 ID 读取一个已存在的 AWS Elemental MediaLive Input输入的完整配置与运行状态。本文基于 website/docs/d/medialive_input.html.markdown 官方文档展开结合 internal/service/medialive 目录下的数据源实现与验收测试源码系统讲解该数据源的参数、全部导出属性、底层调用链与典型实战用法帮助你在 Terraform 配置中安全复用其他模块创建的 MediaLive 输入资源而无需重新定义或重复管理。数据源概览MediaLive Input 是 AWS Elemental MediaLive 频道Channel的视频/音频输入端点支持 PUSH推流与 PULL拉流两种模式。在 Terraform 中输入既可以由aws_medialive_input资源直接管理也可以通过aws_medialive_input数据源按 ID 引用一个既有的输入——例如该输入由另一个 Terraform 工作区、CloudFormation 栈或控制台创建。数据源的核心价值在于只读取、不管理。它不会创建、修改或删除任何资源只负责把指定 Input 的 ARN、类型、状态、关联频道、标签等信息注入当前配置供引用如传给aws_medialive_channel的input_attachments。从源码看该数据源基于 Terraform Plugin Framework 实现input_data_source.go 中通过// FrameworkDataSource(aws_medialive_input, nameInput)注解注册其Read实现会调用底层DescribeInputAPI 获取数据后通过fwflex.Flatten将 API 响应扁平化到模型结构再写入 Terraform 状态。参数说明Argument Reference数据源仅接受两个参数参数是否必填说明id必填MediaLive Input 的 ID即创建资源后返回的id形如1234567的数字标识。region可选该数据源所属的 AWS 区域。默认使用 provider 配置 中设置的 Region仅当输入创建在其他区域、需要跨区域读取时显式指定。region参数对应源码模型中的framework.WithRegionModelinput_data_source.go它被嵌入到数据源模型最前方使得每个读取操作都携带区域上下文。最小可用配置如下data aws_medialive_input example { id aws_medialive_input.example.id }上面的写法直接引用同目录下aws_medialive_input资源创建后的id是最常见的同配置内先建后查场景。导出属性Attribute Reference除了两个参数外数据源还会导出以下只读属性覆盖了DescribeInputAPI 返回的全部关键信息属性类型含义arnstringInput 的 ARNAmazon 资源名称。attached_channelslist(string)当前挂载Attach到该 Input 的 MediaLive 频道 ID 列表。destinationslist(object)PUSH 类型输入的推送目标设置每个目标包含ip、port、url以及vpc含availability_zone与network_interface_id子字段。input_classstring输入类别如STANDARD/SINGLE_PIPELINE。input_deviceslist(object)设备输入MediaLive Device设置子字段为id。input_partner_idslist(string)该输入的所有伙伴输入partner inputsID 列表用于冗余/主备成对输入场景。input_source_typestring输入的源类型如STATIC/DYNAMIC。media_connect_flowslist(object)关联的 MediaConnect Flow 列表子字段为flow_arn。namestringInput 名称。role_arnstring创建及运行期间输入所扮演的 IAM 角色 ARN。security_groupslist(string)关联的输入安全组Input Security GroupID 列表。sourceslist(object)PULL 类型输入的源 URL 配置子字段为password_param、url、username。statestring输入当前状态如CREATING、DETACHED、ATTACHED、DELETING。tagsmap(string)附加在 Input 上的全部标签键值对。typestring输入类型如UDP_PUSH、RTMP_PUSH、RTMP_PULL、URL_PULL、MP4_FILE等。嵌套对象结构说明从数据源模型定义input_data_source.go可以看到三个嵌套对象的具体字段destinations→dsDestinationip、port、url、vpcvpc内为availability_zone、network_interface_idmedia_connect_flows→dsMediaConnectFlowflow_arnsources→dsInputSourcepassword_param引用 AWS Secrets Manager 中凭据的参数名、url、username。这些结构体字段与aws_medialive_input资源中对应的配置块destinations、media_connect_flows、sources见 input.go一一对应因此你可以在数据源与资源之间无缝迁移引用关系。完整实战示例场景一读取同配置内创建的输入并传给频道最典型的用法是资源创建 数据源读取 供频道引用三件套# 输入安全组放行推流源 IP resource aws_medialive_input_security_group example { whitelist_rules { cidr 10.0.0.8/32 } tags { Name example-input-sg } } # 创建 UDP PUSH 类型输入 resource aws_medialive_input example { name example-input input_security_groups [aws_medialive_input_security_group.example.id] type UDP_PUSH tags { Name example-input } } # 通过数据源读取该输入的完整信息 data aws_medialive_input example { id aws_medialive_input.example.id } output input_arn { value data.aws_medialive_input.example.arn } output input_state { value data.aws_medialive_input.example.state } output input_sources { value data.aws_medialive_input.example.sources }这一用法与仓库验收测试中的配置完全一致TestAccMediaLiveInputDataSource_basicinput_data_source_test.go先创建输入安全组与UDP_PUSH类型输入再以id aws_medialive_input.test.id方式声明数据源并断言数据源的arn、name、input_class、input_devices、input_partner_ids、input_source_type、security_groups、sources、state、type与资源侧一致同时校验destinations.#等于 2。场景二跨配置引用既有输入当输入由其他工作区管理时通过terraform_remote_state或直接硬编码 ID 读取data aws_medialive_input existing { id 1234567 # 替换为实际 Input ID } # 供其他资源引用 # resource aws_medialive_channel main { # ... # input_attachments { # input_id data.aws_medialive_input.existing.id # ... # } # }场景三跨区域读取若输入创建于eu-west-1而当前 provider 默认区域为us-east-1可显式指定regiondata aws_medialive_input eu { id 1234567 region eu-west-1 }底层实现一次读取的完整调用链数据源的Read方法input_data_source.go执行流程如下通过d.Meta().MediaLiveClient(ctx)获取 MediaLive 服务客户端从配置中读取id调用findInputByIDinput.go构造medialive.DescribeInputInput{InputId: ...}并执行conn.DescribeInput。若返回NotFoundException则包装为retry.NotFoundError若响应为空则返回EmptyResultError调用fwflex.Flatten将DescribeInputOutput扁平化写入数据源模型通过setTagsOut处理标签数据源模型中的tags字段是tftags.Map计算属性最后resp.State.Set写回状态。值得注意数据源的读取与aws_medialive_input资源的ReadresourceInputRead见 input.go共用同一个findInputByID查询函数因此两者导出的字段集合高度一致。这也解释了为什么数据源能拿到attached_channels、input_partner_ids这类资源创建后由 AWS 侧回填的计算属性——它们都来自DescribeInput的响应体。标签读取行为该数据源在Tags注解下注册了只读的tags属性input_data_source.go。仓库中的标签专项测试input_data_source_tags_gen_test.go覆盖了以下行为数据源tags精确反映输入上的实际标签未打标签时返回空 map与 provider 级default_tags叠加时数据源返回合并后的全部标签含 provider 默认标签与资源标签非重叠场景两者共存配置ignore_tags时数据源导出的tags会剔除被忽略的键但完整的标签集合tags_all语义仍可通过内部expectFullInputDataSourceTags校验获得该检查以arn作为标签标识属性见 input_data_source_tags_gen_test.go。因此在数据源侧读取tags时需要注意它遵循 provider 的ignore_tags过滤规则若需要绝对完整的标签视图建议同时读取对应资源侧的tags_all。使用建议与注意事项id是唯一查找键数据源不支持按名称或其他条件搜索必须持有 Input ID。若只有名称可先通过aws_medialive_inputs若可用或data.aws_medialive_input配合其他信息定位。destinations属性名注意官方文档正文中曾误写为destionations实际合法属性名为destinations请以本文及 数据源 Schema 定义 为准。状态判断state属性可用于条件逻辑例如仅在ATTACHED时创建下游资源但注意 MediaLive 输入创建是异步的资源侧创建完成后数据源读取到的一瞬间仍可能处于中间态业务上如需强一致应结合aws_medialive_channel的依赖关系编排。跨区域限制region参数仅支持单区域读取若配置了多个 provider 别名也可以直接用对应 provider 的数据源块实现等效效果。只读原则数据源永远不会触发资源的增删改适合作为只读引用层隔离不同 Terraform 工作区之间的管理职责。小结aws_medialive_input数据源把 AWS Elemental MediaLive Input 的完整描述含 ARN、类型、状态、PUSH 目标、PULL 源、MediaConnect Flow、输入安全组、设备与标签以只读方式注入 Terraform 配置。其实现与aws_medialive_input资源共用DescribeInput查询链路字段对齐、行为一致。无论是同配置内的建后读、跨工作区的引用既有输入还是跨区域的按 ID 拉取详情它都是连接 MediaLive 输入与频道配置之间最简洁、最可靠的桥梁。更多细节可继续阅读仓库中的 官方文档、数据源实现 与 验收测试。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考