Terraform AWS Provider 数据源 aws_msk_bootstrap_brokers 完全指南:获取 MSK 集群引导 Broker 端点

Terraform AWS Provider 数据源 aws_msk_bootstrap_brokers 完全指南:获取 MSK 集群引导 Broker 端点 Terraform AWS Provider 数据源 aws_msk_bootstrap_brokers 完全指南获取 MSK 集群引导 Broker 端点【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_msk_bootstrap_brokers是 Terraform AWS Provider 中用于获取 Amazon Managed Streaming for Apache KafkaMSK集群引导端点bootstrap broker列表的数据源。本指南以 官方数据源文档 为主体结合仓库源码与测试用例系统讲解其用法、全部输出属性、底层 API 调用原理与实战注意事项读完你将能够为任意 MSK 集群含 Serverless 与 DUAL 双栈网络精准取回各接入方式下的 broker 端点并直接用于客户端引导连接。数据源概览bootstrap brokers 是什么Kafka 客户端要连接一个 Kafka 集群必须先通过一组引导服务器bootstrap servers发现集群内的 broker 拓扑。MSK 会在集群创建后为不同接入方式分别生成一组hostname:port端点例如普通明文、TLS、SASL/IAM、SASL/SCRAM、公网访问、VPC connectivity 以及 IPv6 双栈等组合。aws_msk_bootstrap_brokers数据源的作用就是把根据集群 ARN 查询并整理这些端点的过程封装成一次只读的数据查询供 Terraform 配置内直接引用。它与aws_msk_cluster、aws_msk_serverless_cluster等资源天然配合集群资源创建完成后通过该数据源拿到端点再注入到下游 Kafka 客户端配置、ECS 任务定义或 EC2 user-data 中即可完成基础设施即代码式的客户端引导。基本用法在 Terraform 配置中声明该数据源唯一必填参数是目标集群的 ARNdata aws_msk_bootstrap_brokers example { cluster_arn aws_msk_cluster.example.arn }完整可运行示例结合仓库中 bootstrap_brokers_data_source_test.go 的验收测试配置一个完整的最小示例含 MSK 集群本身如下resource aws_msk_cluster example { cluster_name example-msk-cluster kafka_version 3.8.x number_of_broker_nodes 3 broker_node_group_info { client_subnets aws_subnet.example[*].id instance_type kafka.t3.small security_groups [aws_security_group.example.id] storage_info { ebs_storage_info { volume_size 10 } } } tags { Name example-msk-cluster } } data aws_msk_bootstrap_brokers example { cluster_arn aws_msk_cluster.example.arn } # 将明文引导端点注入客户端引导参数 output bootstrap_brokers { value data.aws_msk_bootstrap_brokers.example.bootstrap_brokers }数据源本身是只读操作不创建任何资源它将查询到的端点集合以逗号分隔字符串的形式暴露为属性供output、template、user_data等任意下游引用。参数Argument Reference参数类型必填说明cluster_arnstring是broker 所属 MSK 集群的 ARN。在源码中该参数由schema.TypeString定义并标记为Required: true同时通过verify.ValidARN做了 ARN 格式校验传入非 ARN 值会直接报错见 bootstrap_brokers_data_source.goregionstring否数据源所属区域默认取 provider 配置 中设置的区域仅当数据源需要在与 provider 不同的区域查询集群时显式指定输出属性Attribute Reference除参数本身外数据源还导出以下 13 个计算属性。它们与 MSKGetBootstrapBrokersAPI 的返回字段一一对应全部为逗号分隔的hostname:port端点字符串属性内容bootstrap_brokers一个或多个hostname:port对适用于以明文方式引导连接 Kafka 集群默认接入方式bootstrap_brokers_public_sasl_iam公网接入下的 SASL/IAM 端口对用于 IAM 认证的公网访问bootstrap_brokers_public_sasl_scram公网接入下的 SASL/SCRAM 端口对bootstrap_brokers_public_tls公网接入下的 TLS 端口对bootstrap_brokers_sasl_iamVPC 内 SASL/IAM 端口对bootstrap_brokers_sasl_scramVPC 内 SASL/SCRAM 端口对bootstrap_brokers_tlsVPC 内 TLS 端口对bootstrap_brokers_vpc_connectivity_sasl_iamVPC connectivity 接入方式下的 SASL/IAM 端口对bootstrap_brokers_vpc_connectivity_sasl_scramVPC connectivity 接入方式下的 SASL/SCRAM 端口对bootstrap_brokers_vpc_connectivity_tlsVPC connectivity 接入方式下的 TLS 端口对bootstrap_brokers_ipv6网络类型为DUAL双栈时明文端点的 IPv6 主机名或 IP 地址与端口对bootstrap_brokers_sasl_iam_ipv6双栈集群下 SASL/IAM 认证的 IPv6 端点对bootstrap_brokers_sasl_scram_ipv6双栈集群下 SASL/SCRAM 认证的 IPv6 端点对bootstrap_brokers_tls_ipv6双栈集群下 TLS 认证的 IPv6 端点对实际返回哪些属性取决于集群自身的配置只有启用了公网访问public_access、VPC connectivity 或DUAL网络类型的集群对应的public_*、vpc_connectivity_*、*_ipv6属性才会有值未启用的属性为空字符串。这一点从 bootstrap_brokers_data_source.go 中所有属性均为Computed: true的 schema 定义可以印证——它们是只读计算结果不是用户输入。底层实现剖析一次数据源读取发生了什么从源码看该数据源的完整读取链路如下见 bootstrap_brokers_data_source.go通过meta.(*conns.AWSClient).KafkaClient(ctx)取得当前 provider 配置下的 Kafka SDK v2 客户端从 Terraform state 中读取cluster_arn调用findBootstrapBrokersByARN(ctx, conn, clusterARN)发起查询以集群 ARN 作为资源 IDd.SetId(clusterARN)将返回的每个端点字符串经sortEndpointsString排序后写入对应属性。查询函数findBootstrapBrokersByARN该函数定义在 cluster.go本质上是对 MSKGetBootstrapBrokersAPI 的封装func findBootstrapBrokersByARN(ctx context.Context, conn *kafka.Client, arn string) (*kafka.GetBootstrapBrokersOutput, error) { input : kafka.GetBootstrapBrokersInput{ ClusterArn: aws.String(arn), } return findBootstrapBrokers(ctx, conn, input) } func findBootstrapBrokers(ctx context.Context, conn *kafka.Client, input *kafka.GetBootstrapBrokersInput) (*kafka.GetBootstrapBrokersOutput, error) { output, err : conn.GetBootstrapBrokers(ctx, input) if errs.IsA*types.NotFoundException { return nil, retry.NotFoundError{LastError: err} } if err ! nil { return nil, err } if output nil { return nil, tfresource.NewEmptyResultError() } return output, nil }值得注意的细节请求只携带ClusterArn一个字段一次调用即可取回全部接入方式的端点对NotFoundException做了显式转换retry.NotFoundError并把nil响应转换为空结果错误这使数据源在集群不存在时能给出清晰、可重试的错误语义数据源读取出错时错误信息会带上集群 ARN 以方便定位reading MSK Cluster (%s) bootstrap brokers: ...。端点排序sortEndpointsStringMSK API 返回的端点顺序并不保证稳定因此 provider 在写入属性前统一做了排序。实现位于 sort.gofunc sortEndpointsString(s string) string { parts : strings.Split(s, endpointSeparator) // endpointSeparator , slices.Sort(parts) return strings.Join(parts, endpointSeparator) }即按逗号切分、字典序排序、再以逗号拼接。这样无论底层 API 返回顺序如何同一集群查询多次得到的属性值都是确定性的避免 Terraform 因顺序变化产生无意义的 diff。同一个 Finder 被多处复用findBootstrapBrokersByARN并非该数据源独享而是整个 MSK 服务包的共享工具cluster.go 在aws_msk_cluster资源的读取流程中调用因此集群资源本身也会导出bootstrap_brokers、bootstrap_brokers_tls等属性见 cluster.gocluster_data_source.go 在aws_msk_cluster数据源中复用同一查询与排序逻辑serverless_cluster.go 为aws_msk_serverless_cluster取回bootstrap_brokers_sasl_iamServerless 集群仅支持 IAM 认证cluster_list.go 与 serverless_cluster_list.go 在批量列表场景下也会逐个调用。因此无论你通过aws_msk_cluster资源、aws_msk_cluster数据源还是本数据源获取端点底层都走同一条GetBootstrapBrokers链路结果一致、可互相印证。测试验证属性一一对应的验收用例仓库为数据源提供了完整的验收测试bootstrap_brokers_data_source_test.go。测试TestAccKafkaBootstrapBrokersDataSource_basic会真实创建aws_msk_cluster.test然后用resource.TestCheckResourceAttrPair将数据源的 13 个输出属性与集群资源上对应的 13 个属性逐一比对resource.TestCheckResourceAttrPair(dataSourceName, bootstrap_brokers, resourceName, bootstrap_brokers), resource.TestCheckResourceAttrPair(dataSourceName, bootstrap_brokers_public_sasl_iam, resourceName, bootstrap_brokers_public_sasl_iam), // ... 其余 11 个属性同理这组断言同时验证了两件事数据源取回的端点与集群资源读取的端点完全一致schema 中所有计算属性都能正确写入 state。如果你扩展了 MSK 相关功能可以以此测试为模板补充新的属性断言。实战建议与常见问题按认证方式选择属性客户端配置时应根据集群实际启用的认证方式选择对应端点。明文接入用bootstrap_brokersTLS 用bootstrap_brokers_tlsIAM 认证用bootstrap_brokers_sasl_iamSCRAM 认证用bootstrap_brokers_sasl_scram。属性返回空字符串通常意味着该接入方式未在集群上启用属于预期行为而非错误。公网与 VPC connectivity只有为集群配置了公网访问Public Access或 VPC connectivity 时bootstrap_brokers_public_*、bootstrap_brokers_vpc_connectivity_*才非空结合对应安全组与网络配置使用。IPv6 双栈集群网络类型为DUAL的集群请使用*_ipv6系列属性它们返回 IPv6 形式的 DNS 名或 IP 地址与端口对。Serverless 集群aws_msk_serverless_cluster只暴露bootstrap_brokers_sasl_iamServerless 场景下客户端应固定使用 IAM 认证端点。确定性输出provider 已对端点做排序归一化同一集群反复 apply 不会产生 diff你可以在output或user_data中安全地依赖这些字符串。cluster_arn必须为合法 ARN参数在 schema 层就通过verify.ValidARN校验传错格式会在 plan/apply 阶段直接报错便于尽早发现问题。延伸阅读数据源定义与读取实现internal/service/kafka/bootstrap_brokers_data_source.go底层查询与错误处理internal/service/kafka/cluster.go端点排序实现internal/service/kafka/sort.go验收测试与完整示例配置internal/service/kafka/bootstrap_brokers_data_source_test.go关联数据源文档website/docs/d/msk_bootstrap_brokers.html.markdownMSK 服务包内其他数据源如aws_msk_cluster、aws_msk_kafka_version、aws_msk_configuration可参考 internal/service/kafka 目录【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考