上一篇我们完成了API Gateway的SSL终止配置。这次继续升级基础设施——给Web应用加上HTTPS,同时引入应用负载均衡器(ALB)处理流量分发。
ALB的部署有个硬性要求:必须跨两个可用区运行。这会改变原有的网络拓扑结构,带来额外的配置复杂度。作为补偿,多可用区的架构也让我们能轻松演示如何用单台ALB挂载两台EC2实例——当然,扩展到更多实例也是同样的逻辑。
![]()
完整代码已开源在GitHub的v6-ssl-load-balancer目录,可以克隆后跟着操作。
整个流程分为五步:改造网络模块实现双可用区、用ACM申请SSL证书、创建ALB并配置后端代理、更新Route53把域名指向负载均衡、最后修改EC2上的演示应用。
网络层改造是第一步。在modules/network/main.tf里,先用data "aws_availability_zones" "available"拉取当前区域的所有可用区列表,然后用count = 2循环创建两个公网子网:
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 4, 2 + count.index)这段用CIDR函数自动分配网段,availability_zone则从刚才的数据源里按索引取值。同时需要创建Internet Gateway和路由表,把0.0.0.0/0的出站流量导向网关,这样子网里的实例才能访问公网。
路由表创建后还要关联到子网。这里同样用count循环,把两个公网子网依次挂到路由表上:
resource "aws_route_table_association" "public" { count = 2; subnet_id = aws_subnet.public[count.index].id; route_table_id = aws_route_table.public.id }
网络层就绪后,下一步是申请SSL证书。AWS Certificate Manager(ACM)可以免费申请,而且会自动续期。证书需要验证域名所有权,这里用DNS验证方式,在Route53里添加一条CNAME记录即可。
证书状态变为"ISSUED"后,就可以创建ALB了。ALB需要指定至少两个子网(正是我们前面创建的两个),还要关联安全组——通常开放80和443端口。监听器配置分两层:HTTP监听器(80端口)做强制跳转HTTPS,HTTPS监听器(443端口)绑定ACM证书,后端目标指向EC2实例。
目标组(Target Group)负责健康检查和流量分发。配置里要指定协议(HTTP)、端口(80)、以及健康检查路径(比如/health)。EC2实例注册到目标组后,ALB会自动剔除不健康的节点。
最后更新Route53的A记录,把域名指向ALB的DNS名称。注意要用alias记录而不是普通CNAME,这样能跟随ALB的IP变化,还免去了额外的DNS查询开销。
为了演示负载均衡效果,两台EC2可以跑略有不同的应用版本——比如返回不同的主机名或颜色标识。刷新页面时,ALB会把请求轮流分发到两台机器,从响应内容就能看出切换。
这套架构的扩展性很明确:需要更多算力时,复制EC2实例的配置,修改count数值,重新apply即可。ALB会自动把新实例纳入目标组,无需改动监听规则。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.