iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
DevOps

從煉獄走到天堂的AWS DevOps 工具及應用開發大進擊系列 第 18

當火災發生時,勢必要分流人群,讓各個出口可以有效運用,讓人群疏散

  • 分享至 

  • xImage
  •  

分散流量

前面的章節,都是一台EC2或個別的Container去執行應用程式,雖然網站可以正常運作,但實際情況的時候,可能是網站有眾多人瀏覽,若只用一台很高規格的機器去運行維護網站,無形中就提高成本花費,且也有機會造成網站掛掉。
此篇,會接觸到AWS的新服務Elastic Load Balancing(ELB)之Application Load Balancer(ALB),流量只能走Layer 7的協議,去訪問網站,也可以達到負載分流,讓每個機器可以有效的平均使用。

按照慣例也是會採用CDK去建置,這邊會用昨日建置好的Fargate去attach ALB

運作原理

ALB可以設定Listener要透過HTTP或HTTPS協議,並設定規則訪問到Target Group,在Target Group可以去設定目標機器或Container。

Users -----------> ALB -----------> Target Group (EC2, ECS, Fargate)

在使用ALB的時候,會需要有兩個以上的Subnet,所以需要建立新的Subnet
https://ithelp.ithome.com.tw/upload/images/20211002/20140172RIthmbk91p.png
建立ALB

alb = elbv2.ApplicationLoadBalancer(self, "CDK-ALB", 
            vpc=vpc,
            internet_facing=True,
            vpc_subnets=ec2.SubnetSelection(
                subnets=[public_subnet, public_subnet2]
            ),
            security_group=sg,
            load_balancer_name="cdkALB"
        )

Internet_facing: True為可以對外使用

建立Target group,以及訪問協議

tg = elbv2.ApplicationTargetGroup(
            self,
            "CDK-TG",
            port= 80,
            protocol=elbv2.ApplicationProtocol.HTTP,
            vpc=vpc
        )

增加ALB Listener的規則,並加入Target group

listener = alb.add_listener(
            "Listener", 
            port=80,
            protocol=elbv2.ApplicationProtocol.HTTP,
            default_target_groups=[tg]
        )

listener.add_target_groups(
            "CDK-addTG",
            target_groups=[tg]
        )

在Fargate Service加入新的Subnet,且在Target group加入機器或Container,最後輸出ALB DNS

svc = ecs.FargateService(self, "fargate-svc",
            task_definition=task,
            cluster=cluster,
            security_groups=[sg],
            assign_public_ip=True,
            vpc_subnets=ec2.SubnetSelection(
                subnets=[public_subnet, public_subnet2]
            ),
            desired_count=4
        )

tg.add_target(svc)

core.CfnOutput(self, "PublicDNS", value="http://" + listener.load_balancer.load_balancer_dns_name)

結果

https://ithelp.ithome.com.tw/upload/images/20211002/20140172AnoIySqtTf.png
https://ithelp.ithome.com.tw/upload/images/20211002/20140172SF64I80sob.png

結論

前面章節也是可以在EC2或ECS前面加入ALB去做到流量的分流,也讓網站可以穩定的運行


上一篇
Fargate不是發糕不能吃
下一篇
多重影分身之術,讓你的分身去做事情
系列文
從煉獄走到天堂的AWS DevOps 工具及應用開發大進擊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言