尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
深入解析 Terraform AWS Provider 的 aws_elb 数据源:读取 Classic Load Balancer 配置
深入解析 Terraform AWS Provider 的 aws_elb 数据源读取 Classic Load Balancer 配置【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_elb是 terraform-provider-aws 中用于读取 AWS Classic Elastic Load Balancer简称 Classic ELB下称 ELB运行时配置的数据源。当模块以负载均衡器名称作为输入、需要进一步获取其安全组、子网、监听器、健康检查与 DNS 信息时用它替代硬编码值是最直接的方式。读完本篇你将掌握该数据源的完整参数与全部导出属性理解其底层 AWS API 调用链与源码实现细节并能在模块化 Terraform 工程中正确使用它。数据源定位Classic ELB 还是 ALB/NLBaws_elb数据源专门面向 AWS 于 2015 年前后发布的 Classic Elastic Load Balancer第一代负载均衡服务。在 AWS 推出 Application Load BalancerALB与 Network Load BalancerNLB之后Terraform 社区通常将它们统称为 v2 负载均衡器。如果你需要读取的是 ALB 或 NLB 的信息应改用aws_lb数据源aws_elb仅适用于 Classic ELB。数据源文档开篇即给出典型动机当一个模块将 LB 作为输入变量接收、需要据此确定其关联的安全组等信息时该数据源非常有用。例如一个应用模块接收lb_name字符串作为输入内部通过aws_elb数据源拿到该 ELB 的全部运行时属性从而推导出安全组、可用区、子网等依赖关系而无需在调用方与模块之间层层传递这些值。最小可用示例数据源的全部使用方式围绕name参数展开。文档给出的最小示例variable lb_name { type string default } data aws_elb test { name var.lb_name }执行terraform plan或terraform apply时Provider 会调用 AWS 的DescribeLoadBalancers与DescribeLoadBalancerAttributesAPI按name精确匹配一个 Classic ELB并将结果写入状态。随后在配置中即可引用data.aws_elb.test.dns_name、data.aws_elb.test.security_groups等导出属性。若指定的名称不存在数据源读取会直接失败并返回形如reading ELB Classic Load Balancer (...) : ...的错误对应源码中的错误包装逻辑见 load_balancer_data_source.go因此name对应的 ELB 必须真实存在。Argument Reference参数说明数据源支持以下参数参数必填说明name是负载均衡器的唯一名称。底层对应 AWS API 的LoadBalancerName用于精确匹配。region否数据源所在的 AWS 区域默认使用 Provider 配置中设置的区域。注意一个值得说明的细节虽然文档层面列出了region参数但从当前仓库中数据源的 schema 定义load_balancer_data_source.go看schema 中只显式声明了name为必填属性其余均为Computed。实际读取时使用的是 Provider 连接meta.(*conns.AWSClient).ELBClient(ctx)所对应的区域——也就是说区域由 Provider 配置统一决定这也与Defaults to the Region set in the provider configuration的说明一致。Attribute Reference完整导出属性数据源文档明确说明返回的属性与aws_elb资源完全一致。结合资源文档与数据源源码 schemadata.aws_elb.*完整导出以下属性基础标识与网络属性属性类型说明idstringELB 的名称与name相同。namestringELB 的名称。arnstringELB 的 Amazon Resource Name。dns_namestringELB 的 DNS 名称用于接入流量解析。zone_idstringELB 的规范 hosted zone ID常配合 Route 53 Alias 记录使用。internalbool是否为内网internalELB。availability_zonesset(string)ELB 服务流量的可用区列表EC2-classic 场景。subnetsset(string)ELB 挂载的子网 ID 列表VPC 场景。security_groupsset(string)分配给 ELB 的安全组 ID 列表。instancesset(string)ELB 后端实例池中的实例 ID 列表。监听器与健康检查属性类型说明listenerset监听器配置块列表每个块包含instance_port、instance_protocol、lb_port、lb_protocol、ssl_certificate_id。health_checklist健康检查配置块包含healthy_threshold、unhealthy_threshold、target、interval、timeout。行为特性与安全属性属性类型说明cross_zone_load_balancingbool是否开启跨可用区负载均衡。idle_timeoutint连接允许空闲的秒数。connection_drainingbool是否开启连接排空。connection_draining_timeoutint连接排空允许的秒数。desync_mitigation_modestringHTTP 反同步缓解模式取值monitor、defensive默认、strictest。access_logslist访问日志配置块包含bucket、bucket_prefix、interval、enabled。source_security_groupstring可用于后端应用实例入站规则的安全组名称Classic 或默认 VPC 场景。source_security_group_idstring后端应用实例入站规则使用的安全组 ID仅 VPC 中的 ELB 可用。tags/tags_allmap资源标签映射。tags_all包含从 Providerdefault_tags继承的标签。这些导出属性与资源的对应关系完全一致例如资源侧ssl_certificate_id仅在lb_protocol为 HTTPS 或 SSL 时合法数据源读取的listener块也会原样呈现这些字段。源码级剖析数据源是如何读取 ELB 的数据源注册与 Schema数据源在 load_balancer_data_source.go 中通过注解// SDKDataSource(aws_elb, nameClassic Load Balancer)声明由 Provider 的代码生成机制注册到aws_elb地址。其实现是典型的 Plugin SDK v2schema.Resourcename为Required其余 20 余个字段全部标记为Computed意味着该数据源只读、不做任何写操作。读取流程与 API 调用链核心读取逻辑dataSourceLoadBalancerReadload_balancer_data_source.go按以下顺序工作按名称查找 ELB调用findLoadBalancerByNameload_balancer.go其内部发起DescribeLoadBalancers请求并将AccessPointNotFoundException映射为retry.NotFoundError——这是 Provider 把资源不存在统一表达为 NotFound 的标准做法随后通过tfresource.AssertSingleValueResult断言唯一结果。读取属性配置发起DescribeLoadBalancerAttributes请求取得LoadBalancerAttributes访问日志、连接排空、跨可用区、空闲超时、反同步缓解等。手工构造 ARN通过arn.ARN结构体拼接elasticloadbalancing服务的 ARN资源段为loadbalancer/名称分区、区域、账号 ID 均取自 Provider 客户端上下文。补齐安全组 IDAWS 的DescribeLoadBalancers响应只返回源安全组名称与属主不返回安全组 ID。源码在lb.VPCId存在时会进一步调用 EC2 客户端的FindSecurityGroupByNameAndVPCIDAndOwnerID反向查找source_security_group_idload_balancer_data_source.go。处理访问日志的不可删除语义注释明确指出 AWS API 不允许删除access_logs、只能禁用它。源码通过d.GetChange(access_logs)对比配置与远端状态只有配置中存在访问日志块且远端已启用时才写入状态从而避免把外部 API 创建的日志配置误判为 drift相关历史 issue 详见源码注释。读取标签调用listTags获取标签并通过IgnoreAWS().IgnoreConfig(ignoreTagsConfig)过滤后写入tags。回填健康检查健康检查只有一个lb.HealthCheck.Target非空时通过flattenHealthCheck写入。字段展开函数数据源用到的展开函数集中在 flex.goflattenAccessLogL17-L42将 API 的AccessLog对象映射为bucket、bucket_prefix、interval、enabled四个字段flattenHealthCheckL56-L73映射healthy_threshold、unhealthy_threshold、target、timeout、intervalflattenInstancesL75-L79把 API 的Instance列表投影为实例 ID 字符串列表flattenListenerDescriptionsL132 起将每个监听器映射为instance_port、instance_protocol、lb_port、lb_protocol、ssl_certificate_id并统一转为小写协议名。而desync_mitigation_mode这类位于AdditionalAttributes中的扩展属性则在读取循环中按常量elb.http.desyncmitigationmode定义于 consts.go逐一匹配后写入状态。实测验证数据源如何被测试覆盖仓库为数据源提供了完整的验收测试TestAccELBLoadBalancerDataSource_basicload_balancer_data_source_test.go。该测试先创建一个完整的 VPC、两个子网、一个安全组与一个内部 ELB再通过data aws_elb test { name aws_elb.test.name }读取它并断言cross_zone_load_balancing、internal等布尔属性与预期一致idle_timeout精确等于资源侧的30subnets.#、security_groups.#数量正确desync_mitigation_mode默认值为defensive标签tags.Name、tags.TestName完整回传dns_name、zone_id非空数据源的arn与资源侧aws_elb.test.arn完全一致TestCheckResourceAttrPair。测试中特意将 ELB 名称控制在 32 个字符以内代码注释ELB name 必须小于 32 字符这正是 Classic ELB 的命名约束。这段测试既是对数据源行为的权威验证也是模块内通过数据源反查 ELB 属性这一用法的可直接复制的示例。实战建议与注意事项模块输入用名称而非属性在模块边界传递lb_name字符串模块内部用aws_elb数据源展开安全组、DNS、子网等派生属性可避免模块接口膨胀也方便对已存在非 Terraform 管理的 ELB 做只读集成。区分数据源与资源aws_elb资源负责创建与管理 ELB完整参数见 aws_elb 资源文档数据源只负责读取。若需要管理而非查询应使用资源。source_security_group_id的适用性该属性仅对 VPC 内的 ELB 生效且需要额外一次 EC2 API 查询EC2-classic 场景下应使用source_security_group。区分 ELB 家族数据源同目录下还有 aws_elb_hosted_zone_id 与 aws_elb_service_account 两个配套数据源分别用于获取 ELB 的 Route 53 hosted zone ID 与访问日志写入账号 ID常与aws_elb组合使用ALB/NLB 场景请改用 aws_lb 数据源。资源属性参照数据源返回的所有属性与aws_elb资源完全一致若需了解各属性的取值范围如desync_mitigation_mode的合法值、ssl_certificate_id的 ECDSA 曲线限制可直接查阅该资源文档。小结aws_elb数据源是 Classic ELB 生态中只读集成的关键入口以name为唯一必填参数返回与资源侧完全一致的完整属性集。其底层由DescribeLoadBalancersDescribeLoadBalancerAttributes两条 AWS API 驱动辅以 EC2 安全组反查、ARN 手工拼接、标签过滤与访问日志语义处理等细节实现并由验收测试严格保证行为正确。无论是对既有 ELB 做只读查询还是在模块化工程中传递 LB 依赖它都是可靠且标准的选择。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

ants三种池型怎么选?Pool、PoolWithFunc与泛型PoolWithFuncGeneric实战对比指南

ants三种池型怎么选?Pool、PoolWithFunc与泛型PoolWithFuncGeneric实战对比指南

ants三种池型怎么选?Pool、PoolWithFunc与泛型PoolWithFuncGeneric实战对比指南 【免费下载链接】ants 🐜🐜🐜 ants is the most powerful and reliable pooling solution for Go. 项目地址: https://gitcode.com/gh_mirrors/an…

📅 2026/9/19 5:08:08
SeaTunnel Email Sink 连接器详解:将数据以附件形式发送邮件

SeaTunnel Email Sink 连接器详解:将数据以附件形式发送邮件

SeaTunnel Email Sink 连接器详解:将数据以附件形式发送邮件 【免费下载链接】seatunnel SeaTunnel is a multimodal, high-performance, distributed, massive data integration tool. 项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel 本文以 S…

📅 2026/9/19 5:08:08
yarn.lock 地址不对怎么办?从 signature 哈希到依赖锁定机制全解析

yarn.lock 地址不对怎么办?从 signature 哈希到依赖锁定机制全解析

1. 从一个诡异的签名串说起:yarn.lock 里的地址为什么会对不上第一次看到signatureb05c505286f606b32d69ab58ee3e7bf4这串东西挂在photobooth/yarn.lock后面,很多人第一反应是"这是不是某个校验和写错了"。我当初也是这么想的,直到…

📅 2026/9/19 5:03:08
MORE NEWS

更多资讯

📰

装备体系作战试验分布式仿真系统:架构选型、模型集成与排错验证

简介:这份PDF文献面向从事军用仿真、装备体系作战试验与分布式系统开发的研究人员和工程技术人员,系统阐述了面向装备体系作战试验的分布式仿真系统设计思路。内容围绕体系结构与功能组成展开,重点分析仿真模型集成技术、对象模型建模与组装方…

📰

高通Chromatix 7 ISP调优实战:从环境搭建到模块参数详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

汽车零部件物流系统集成与实时协同技术实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

多租户AI智能客服系统架构实战:从Dify到Spring AI的隔离与编排

1. 项目背景与整体设计思路先说结论:这个项目解决的核心问题,是"怎么让一套客服系统同时服务多家企业客户,并且每个客户看到的东西完全隔离"。所谓多租户,本质上是把一套软件实例的算力、存储、模型资源拆成多个逻辑隔离…

📰

AI大模型就业黄金期:岗位需求与转型指南

1. 为什么说现在是AI大模型就业的黄金窗口期最近两年AI大模型技术呈现爆发式增长,从ChatGPT到文心一言,各类大模型产品如雨后春笋般涌现。根据行业调研数据显示,2023年全球AI大模型相关岗位需求同比增长超过300%,而具备相关技能的…

📰

MATLAB实现一维信号分类的CNN实战指南

1. 项目背景与核心价值在信号处理领域,传统方法往往依赖手工提取特征,而卷积神经网络(CNN)能够自动学习信号中的关键特征模式。这个MATLAB项目实现了一维信号的二分类和多分类任务,特别适合处理EEG脑电信号、振动传感器数据、音频波形等时序信…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬