안 쓰는 AWS ELB 정리 자동화

‍최정민·2023년 6월 8일
1

1.들어가며

AWS ELB(Elastic Load Balancing)는 AWS 환경을 사용하면서 안 쓸수가 없을 정도로 필수적인 서비스입니다. 그만큼 많이 사용하고, 많이 생성하게 됩니다.

AWS ELB의 경우 사용하지 않더라도 삭제하지 않으면, 금액이 나오는 서비스입니다.
즉 생성한 후, 사용하지 않는다면 금액이 발생하게 됩니다.
그러므로 안 쓰는 AWS ELB는 주기적인 삭제가 필요합니다.
이 글에서는 안 쓰는 AWS ELB를 삭제하는 python 스크립트를 소개하고, 해당 스크립트를 활용하는 방법까지 소개해드립니다.
ALB, NLB, CLB를 서울리전에서 하나 설치했을 때 금액

2. 로직

  • 안쓴다고 판단
    • ELB에 Listener로 Target Group이 없음 → ELB 삭제
    • ELB에 Listener로 등록된 Target Group에 Target이 없음 → ELB, Target Group삭제
  • 확인 필요
    • ELB에 Listener로 등록된 Target Group에 Health 상태인 Target이 없음 → 정보 출력

3. Python Code

  • python aws sdk(boto3) 사용
  • elb 관련 권한 필요
import json
from unicodedata import name
import boto3

def lambda_handler(event, context):
    client=boto3.client('elbv2')
    response=client.describe_load_balancers(
    )
    for lb in response['LoadBalancers']:
        tags=client.describe_tags(
            ResourceArns=[
               lb['LoadBalancerArn'] 
            ]
        ) 
        tgs=client.describe_target_groups(LoadBalancerArn=lb['LoadBalancerArn'])
        TG_COUNT=0
        Target_COUNT=0
        Delete_TG=[]
        for tg in tgs["TargetGroups"]:
            TG_COUNT+=1
            healths=client.describe_target_health(TargetGroupArn=tg["TargetGroupArn"])
            
            if "TargetHealthDescriptions" in healths:
                HEALTH_COUNT=0
                COUNT=0
                for health in healths['TargetHealthDescriptions']:
                    COUNT+=1
                    if health['TargetHealth']['State']=="healthy":
                        HEALTH_COUNT+=1


                
                if HEALTH_COUNT==0 and COUNT ==0:
                    Delete_TG.append(tg)
                    
                else:
                    Target_COUNT+=1
                
                #LB에 Listener로 Target Group  등록되어있고 Target도 존재하나 전부 Health x
                if HEALTH_COUNT==0 and COUNT > 0:
                    print("Target exist but ALL UNHEALTH (",HEALTH_COUNT,"/",COUNT, ") TG: ",tg["TargetGroupName"], "ALB: ",lb['LoadBalancerName'])
                    print("========================================")
                    
        #LB에 Listener로 Target Group이 등록되어있지않음
        if TG_COUNT==0:
            print("Delete ALB (",lb['LoadBalancerName'],") - targetGroup 존재 x") 
            response = client.delete_load_balancer(
                LoadBalancerArn=lb['LoadBalancerArn']
            )
            print("========================================")
                    
        #LB에 Listener로 Target Group이 등록되어있지만 Target 존재 x
        elif Target_COUNT==0:
            response = client.delete_load_balancer(
                        LoadBalancerArn=lb['LoadBalancerArn']
                    )
            print("Delete ALB (",lb['LoadBalancerName'],") - target이 존재하는 targetGroup 존재 x")
            for tg in Delete_TG:
                print("Delete Target Group (", tg["TargetGroupName"], ") ALB(",lb['LoadBalancerName'],")")
                response = client.delete_target_group(
                    TargetGroupArn=tg["TargetGroupArn"]
                )
                
            print("========================================")

4. 결과

5. 활용방안

AWS Lambda(python) + EventBridge(cron)로 주기적 실행

  • 자동으로 Lambda가 실행되며, 안 쓰는 ELB 삭제

6. 마무리 하며

클라우드 환경에서 운영을 하다보면 생각보다 안쓰는 리소스들로 인한 금액이 많아지는 것 같습니다. 이런 리소스들을 사람이 일일히 확인하는 것은 힘들다고 생각합니다. 리소스 확인 및 삭제를 자동화 한다면, 조금 더 기존 리소스들을 운영하는데 신경을 쏟을 수 있다고 생각합니다.

profile
Junior DevOps Engineer

0개의 댓글