FEATURED · 精选文章

使用 aws_dx_router_configuration 数据源获取 AWS Direct Connect 路由器配置指南

发布时间 / 2026/9/18 19:00:44
来源 / 创域科博编辑部
栏目 / 资讯中心
使用 aws_dx_router_configuration 数据源获取 AWS Direct Connect 路由器配置指南 使用 aws_dx_router_configuration 数据源获取 AWS Direct Connect 路由器配置指南【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsTerraform AWS Provider 提供的aws_dx_router_configuration数据源用于按 Direct Connect 虚拟接口Virtual Interface和路由器类型Router Type检索 AWS 生成的下游路由器配置说明即customer_router_config文本。本文基于 terraform-provider-aws 仓库中的官方文档、Go 源码实现与测试用例系统讲解该数据源的参数、返回属性、已知 RouterType 列表及底层调用原理帮助你直接在 Terraform 配置中获取并落地路由器配置模板。数据源概览aws_dx_router_configuration是 Terraform AWS Provider 中 Direct Connect 子类目subcategory: Direct Connect下的只读数据源。它的核心作用不是创建资源而是调用 AWS Direct Connect 的DescribeRouterConfigurationAPI为指定的虚拟接口和路由器类型生成一份可直接交给网络工程师执行的路由器配置指令。官方文档对该数据源的定位表述为Terraform data source for retrieving Router Configuration instructions for a given AWS Direct Connect Virtual Interface and Router Type即为给定的 AWS Direct Connect 虚拟接口和路由器类型检索路由器配置指令。从源码注册信息看该数据源在 internal/service/directconnect/service_package_gen.go 中以aws_dx_router_configuration为类型名、Router Configuration为名称注册属于 SDKv2 架构的数据源SDKDataSource注解实现位于 router_configuration_data_source.go。使用前提在配置该数据源之前需要先满足以下前提已经存在一个 AWS Direct Connect 虚拟接口其 ID 形如dxvif-abcde123。虚拟接口可以由本仓库中的aws_dx_private_virtual_interface、aws_dx_public_virtual_interface或aws_dx_transit_virtual_interface资源创建也可以是在 AWS 控制台或其他方式预先创建的既有虚拟接口。知道目标路由器或交换机的类型标识符router_type_identifier例如CiscoSystemsInc-2900SeriesRouters-IOS124。注意当前没有 AWS API 可以查询完整的router_type_identifier列表因此需要从文档提供的已知 RouterType 列表见下文中选取或从 AWS 控制台对应界面获取。基本用法最小可用的 Terraform 配置如下直接摘自官方文档data aws_dx_router_configuration example { virtual_interface_id dxvif-abcde123 router_type_identifier CiscoSystemsInc-2900SeriesRouters-IOS124 }执行terraform plan或terraform apply后数据源会把 AWS 返回的路由器配置指令写入customer_router_config属性同时将路由器的详细信息写入router块。更贴近真实业务的写法是让虚拟接口 ID 来自其他资源或数据源的引用而不是硬编码resource aws_dx_private_virtual_interface example { connection_id aws_dx_connection.example.id name example-vif vlan 4094 address_family ipv4 bgp_asn 65352 } data aws_dx_router_configuration example { virtual_interface_id aws_dx_private_virtual_interface.example.id router_type_identifier CiscoSystemsInc-2900SeriesRouters-IOS124 } output customer_router_config { value data.aws_dx_router_configuration.example.customer_router_config }通过 output 输出即可在terraform output customer_router_config中直接拿到完整的路由器配置文本交给网络团队使用。参数说明Argument Reference该数据源支持的参数如下参数类型必填说明regionstring可选数据源执行管理的区域。默认使用 provider 配置中设置的 Regionvirtual_interface_idstring必填Direct Connect 虚拟接口的 ID形如dxvif-xxxxrouter_type_identifierstring必填路由器类型标识符例如CiscoSystemsInc-2900SeriesRouters-IOS124关于router_type_identifier有一个值得注意的细节从 AWS API Reference 的标注看该参数似乎可选但实际调用 API 时缺少该参数会导致请求失败。源码中对此有明确注释router_configuration_data_source.gorouter_type_identifier: { Type: schema.TypeString, // even though the API Reference shows this as optional, the API call will fail without this argument Required: true, },因此该参数在 Provider 中被强制设为Required这也是以实际实现为准、而非以 API 文档表面描述为准的典型例子。关于region参数Direct Connect 的DescribeRouterConfiguration属于区域级服务数据源默认使用 provider 配置的区域如需跨区域查询可显式传入region覆盖。已知 RouterType 列表由于没有公开 API 可以枚举全部路由器类型官方文档整理了目前已知的RouterType对象可直接从中选取routerTypeIdentifier字段值作为router_type_identifier参数{ routerTypes: [ {platform:2900 Series Routers,routerTypeIdentifier:CiscoSystemsInc-2900SeriesRouters-IOS124,software:IOS 12.4,vendor:Cisco Systems, Inc.,xsltTemplateName:customer-router-cisco-generic.xslt,xsltTemplateNameForMacSec:}, {platform:3700 Series Routers,routerTypeIdentifier:CiscoSystemsInc-3700SeriesRouters-IOS124,software:IOS 12.4,vendor:Cisco Systems, Inc.,xsltTemplateName:customer-router-cisco-generic.xslt,xsltTemplateNameForMacSec:}, {platform:7200 Series Routers,routerTypeIdentifier:CiscoSystemsInc-7200SeriesRouters-IOS124,software:IOS 12.4,vendor:Cisco Systems, Inc.,xsltTemplateName:customer-router-cisco-generic.xslt,xsltTemplateNameForMacSec:}, {platform:Nexus 7000 Series Switches,routerTypeIdentifier:CiscoSystemsInc-Nexus7000SeriesSwitches-NXOS51,software:NX-OS 5.1,vendor:Cisco Systems, Inc.,xsltTemplateName:customer-switch-cisco-nexus-generic.xslt,xsltTemplateNameForMacSec:}, {platform:Nexus 9K Series Switches,routerTypeIdentifier:CiscoSystemsInc-Nexus9KSeriesSwitches-NXOS93,software:NX-OS 9.3,vendor:Cisco Systems, Inc.,xsltTemplateName:customer-switch-cisco-nexus-generic.xslt,xsltTemplateNameForMacSec:customer-switch-cisco-nexus-generic-macsec.xslt}, {platform:M/MX Series Routers,routerTypeIdentifier:JuniperNetworksInc-MMXSeriesRouters-JunOS95,software:JunOS 9.5,vendor:Juniper Networks, Inc.,xsltTemplateName:customer-router-juniper-generic.xslt,xsltTemplateNameForMacSec:customer-router-juniper-generic-macsec.xslt}, {platform:SRX Series Routers,routerTypeIdentifier:JuniperNetworksInc-SRXSeriesRouters-JunOS95,software:JunOS 9.5,vendor:Juniper Networks, Inc.,xsltTemplateName:customer-router-juniper-generic.xslt,xsltTemplateNameForMacSec:}, {platform:T Series Routers,routerTypeIdentifier:JuniperNetworksInc-TSeriesRouters-JunOS95,software:JunOS 9.5,vendor:Juniper Networks, Inc.,xsltTemplateName:customer-router-juniper-generic.xslt,xsltTemplateNameForMacSec:}, {platform:PA-3000 and 5000 series,routerTypeIdentifier:PaloAltoNetworks-PA3000and5000series-PANOS803,software:PAN-OS 8.0.3,vendor:Palo Alto Networks,xsltTemplateName:customer-router-palo-alto-generic.xslt,xsltTemplateNameForMacSec:}] }从上表可以归纳出如下使用要点厂商覆盖目前已知类型覆盖 Cisco Systems、Juniper Networks、Palo Alto Networks 三家主流网络设备厂商。设备形态既包含路由器Router也包含交换机Switch例如 Cisco Nexus 7000/9K 系列即属于交换机场景。XSLT 模板xsltTemplateName字段表示 AWS 用于生成配置的 XSLT 模板文件名部分类型如 Nexus 9K、Juniper M/MX还提供了对应的 MacSec 专用模板xsltTemplateNameForMacSec。MACsec 支持当xsltTemplateNameForMacSec非空时说明该路由器类型支持在 Direct Connect 链路上启用 MACsec 加密可结合仓库中的aws_dx_macsec_key_association等资源使用。这些字段与数据源返回的router块属性一一对应见下节可用于在 Terraform 中做条件判断或输出展示。返回属性Attribute Reference除了上述参数外数据源还会导出以下属性属性类型说明customer_router_configstring配置你的路由器所需的完整指令文本routerlist路由器类型详情块virtual_interface_namestring虚拟接口名称由源码补充router块内部包含以下属性属性说明platform路由器平台如2900 Series Routersrouter_type_identifier路由器类型标识符software路由器操作系统如IOS 12.4vendor路由器厂商如Cisco Systems, Inc.xslt_template_name路由器 XSLT 模板名称xslt_template_name_for_mac_sec用于 MacSec 的路由器 XSLT 模板名称注意文档中router块内的 MacSec 属性名写作xslt_template_name_for_mac_sec文档原文为xslt_template_name_for_mac实际源码 Schema 定义为xslt_template_name_for_mac_sec。在 Terraform 配置中引用时应使用源码中的准确属性名router.0.xslt_template_name_for_mac_sec。此外源码还额外将virtual_interface_name写回状态router_configuration_data_source.go因此在配置中也可以直接读取虚拟接口名称。底层实现原理理解该数据源的实现有助于判断其行为边界。核心读取逻辑位于 router_configuration_data_source.gofunc dataSourceRouterConfigurationRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics { routerTypeIdentifier : d.Get(router_type_identifier).(string) vifID : d.Get(virtual_interface_id).(string) id : fmt.Sprintf(%s:%s, vifID, routerTypeIdentifier) output, err : findRouterConfigurationByTwoPartKey(ctx, conn, routerTypeIdentifier, vifID) ... d.SetId(id) d.Set(customer_router_config, output.CustomerRouterConfig) if err : d.Set(router, flattenRouter(output.Router)); err ! nil { ... } d.Set(router_type_identifier, output.Router.RouterTypeIdentifier) d.Set(virtual_interface_id, output.VirtualInterfaceId) d.Set(virtual_interface_name, output.VirtualInterfaceName) ... }关键点如下复合 ID数据源的 ID 采用虚拟接口ID:路由器类型标识符的冒号拼接格式即dxvif-abcde123:CiscoSystemsInc-2900SeriesRouters-IOS124保证同一个虚拟接口搭配不同路由器类型时可区分。API 调用findRouterConfigurationByTwoPartKey构造DescribeRouterConfigurationInput其中RouterTypeIdentifier与VirtualInterfaceId均为必传字段随后调用conn.DescribeRouterConfigurationrouter_configuration_data_source.go。空结果兜底若 API 返回的output或output.Router为空会返回tfresource.NewEmptyResultError()即按资源不存在处理而不是返回空数据。这保证了数据源在虚拟接口或路由器类型无效时能给出明确的读取失败诊断。结果扁平化flattenRouter把 AWS SDK 的RouterType结构转换为 Terraform 的router列表块六个字段platform、router_type_identifier、software、vendor、xslt_template_name、xslt_template_name_for_mac_sec全部映射源码见 router_configuration_data_source.go。值得注意的还有一点SDK 返回的CustomerRouterConfig字段与VirtualInterfaceId/VirtualInterfaceName被直接写回状态说明 AWS 端返回的配置文本已经是结合了该虚拟接口具体信息如 VLAN、BGP ASN、对端 IP渲染完成的成品无需 Terraform 侧再做拼接。与测试用例的相互印证仓库提供了该数据源的验收测试acceptance test位于 router_configuration_data_source_test.go。测试要点可以作为实践参考测试名TestAccDirectConnectRouterConfigurationDataSource_basic测试数据源名为data.aws_dx_router_configuration.test。通过环境变量VIRTUAL_INTERFACE_ID传入真实虚拟接口 ID未设置时测试会跳过router_type_identifier固定使用CiscoSystemsInc-2900SeriesRouters-IOS124。测试断言覆盖了文档中的全部关键属性virtual_interface_id、router_type_identifier、virtual_interface_name断言非空以及router.0块的platform2900 Series Routers、softwareIOS 12.4、vendorCisco Systems, Inc.、xslt_template_namecustomer-router-cisco-generic.xslt和xslt_template_name_for_mac_sec空字符串。这段测试同时验证了两点一是该数据源属于需要真实 AWS 环境的集成测试依赖真实虚拟接口二是在本仓库当前实现中 Cisco 2900 系列路由器类型的 MacSec 模板名为空与文档中的已知 RouterType 列表完全一致。常见实践建议配置文本落盘可将customer_router_config通过local_file资源写入文件方便直接交付给网络团队resource local_file router_config { filename ${path.module}/router-config.txt content data.aws_dx_router_configuration.example.customer_router_config }多厂商模板并存在需要同时向多家设备厂商输出配置的场景下可以为每个厂商各声明一个数据源实例各自的router_type_identifier不同再配合count/for_each按需输出。结合 MacSec当路由器类型支持 MacSec 时可依据router.0.xslt_template_name_for_mac_sec是否非空来判断是否启用 MACsec 配置分支。错误定位若数据源读取报错优先核对virtual_interface_id是否真实存在、router_type_identifier是否属于上表列出的已知值——由于 API 不支持枚举拼写错误是常见失败原因。小结aws_dx_router_configuration数据源把获取 Direct Connect 路由器配置这一原本需要登录 AWS 控制台手工操作的流程转化为可在 Terraform 中声明式获取的能力。它的参数面简单两个必填参数 一个可选区域返回面完整配置文本 路由器详情块 虚拟接口名称实现上直接封装了DescribeRouterConfigurationAPI 并使用复合 ID 管理状态。配合本仓库的官方文档 website/docs/d/dx_router_configuration.html.markdown、源码实现与验收测试你可以放心地在生产 Terraform 配置中集成它实现路由器配置的自动化获取与交付。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻