如何从Lambda函数连接Amazon MSK集群并获取对应连接字符串?
作为Kafka生产者的Lambda连接MSK集群,不需要使用ZookeeperConnectString,该串仅用于MSK集群内部运维管理场景,客户端生产/消费消息需要使用MSK提供的Broker端点连接串。
你可以通过两种方式获取可用的连接串:
方式1:AWS CLI手动查询
MSK集群部署完成后,执行以下命令即可返回所有类型的连接端点:
aws kafka get-bootstrap-brokers --cluster-arn <替换为你的MSK集群ARN>
返回结果会包含明文、TLS加密、SASL认证等不同协议的连接串,根据你集群开启的访问协议选择即可。
方式2:在Serverless配置中直接引用(更适配你当前的部署流程)
你可以直接通过CloudFormation内置函数获取MSK的连接串,要么部署后导出查看,要么直接注入到Lambda的环境变量中,不需要手动查询:
# 示例serverless.yml配置 resources: Resources: # 你原来的MSK配置保持不变 MSK: Type: AWS::MSK::Cluster Properties: ClusterName: kafkaOne KafkaVersion: 2.2.1 NumberOfBrokerNodes: 3 BrokerNodeGroupInfo: InstanceType: kafka.t3.small ClientSubnets: - Ref: PrivateSubnet1 - Ref: PrivateSubnet2 - Ref: PrivateSubnet3 # 新增Outputs导出连接串,部署完成后会在控制台输出 Outputs: MSKBootstrapServers: Value: !Join [',', !GetAtt MSK.BootstrapBrokerStringTls] Export: Name: MSKBootstrapServers # 如果要直接注入到Lambda环境变量,在函数配置中添加即可 functions: yourKafkaProducerFunc: handler: index.handler environment: KAFKA_BOOTSTRAP_SERVERS: !Join [',', !GetAtt MSK.BootstrapBrokerStringTls] # 注意必须将Lambda部署到和MSK同VPC的私有子网 vpc: subnetIds: - Ref: PrivateSubnet1 - Ref: PrivateSubnet2 - Ref: PrivateSubnet3 securityGroupIds: - Ref: LambdaSecurityGroup
额外注意事项
- Lambda关联的安全组需要开放到MSK集群对应端口的出站规则:明文访问端口为9092,TLS加密访问端口为9094
- MSK集群的安全组需要开放来自Lambda安全组的对应端口入站规则
- 如果后续升级MSK的Kafka版本,注意保持Lambda中Kafka客户端版本和集群版本兼容
内容的提问来源于stack exchange,提问作者daesu
相关产品推荐
相关产品推荐

