본문 바로가기

인프라

AWS CLI: describe-rules --listener-arn

블루 그린 배포를 위해 GitHub Actions yaml을 작성하던 중 로드밸런서의 현재 대상그룹 ARN 값이 필요하게 되었다.

ALB Listener arn은 깃헙 시크릿으로 전달받아 알 수 있기에 describe-rules을 사용하면 될 것 같다.

aws elbv2 describe-rules --listener-arn <LISTENER_ARN>
{
    "Rules": [
        {
            "RuleArn": "",
            "Priority": "default",
            "Conditions": [],
            "Actions": [
                {
                    "Type": "forward",
                    "Order": 1,
                    "ForwardConfig": {
                        "TargetGroups": [
                            {
                                "TargetGroupArn": "",
                                "Weight": 0
                            },
                            {
                                "TargetGroupArn": "",
                                "Weight": 1
                            }
                        ],
                        "TargetGroupStickinessConfig": {
                            "Enabled": false,
                            "DurationSeconds": 3600
                        }
                    }
                }
            ],
            "IsDefault": true
        }
    ]
}

여기서 현재 활성화된 TG의 arn을 구해야하기에 Weight값이 0보다 큰 TG를 구하면 된다.

다음과 같이 —query로 원하는 값을 뽑아내면

aws elbv2 describe-rules \
  --listener-arn <LISTENER_ARN> \
  --query "Rules[].Actions[?Type=='forward'].ForwardConfig.TargetGroups[]"
[
    [
        {
            "TargetGroupArn": "arn:aws",
            "Weight": 0
        },
        {
            "TargetGroupArn": "arn:aws",
            "Weight": 1
        }
    ]
]

이렇게 응답을 받을 수 있다.

나는 Blue-Green Deploy에서 타겟그룹을 한 번에 한 개만 연결할 것이기 때문에 타겟그룹 1개만 연결해둔 상태로 describe-rules를 실행했는데, 타겟그룹이 2개일 때랑 응답 양식이 조금 달랐다.

  • 타겟그룹 1개
~ $ aws elbv2 describe-rules --listener-arn arn:aws
{
    "Rules": [
        {
            "RuleArn": "arn:aws",
            "Priority": "default",
            "Conditions": [],
            "Actions": [
                {
                    "Type": "forward",
                    "TargetGroupArn": "arn:aws",
                    "Order": 1,
                    "ForwardConfig": {
                        "TargetGroups": [
                            {
                                "TargetGroupArn": "arn:aws",
                                "Weight": 1
                            }
                        ],
                        "TargetGroupStickinessConfig": {
                            "Enabled": false,
                            "DurationSeconds": 3600
                        }
                    }
                }
            ],
            "IsDefault": true
        }
    ]
}
  • 타겟그룹 2개 이상
~ $ aws elbv2 describe-rules --listener-arn arn:aws
{
    "Rules": [
        {
            "RuleArn": "arn:aws",
            "Priority": "default",
            "Conditions": [],
            "Actions": [
                {
                    "Type": "forward",
                    "Order": 1,
                    "ForwardConfig": {
                        "TargetGroups": [
                            {
                                "TargetGroupArn": "arn:aws",
                                "Weight": 1
                            },
                            {
                                "TargetGroupArn": "arn:aws",
                                "Weight": 1
                            }
                        ],
                        "TargetGroupStickinessConfig": {
                            "Enabled": false,
                            "DurationSeconds": 3600
                        }
                    }
                }
            ],
            "IsDefault": true
        }
    ]
}

타겟그룹이 1개만 존재할 때는 Actions의 TargetGroupArn 필드가 존재하지만

타겟그룹이 2개 이상일 때는 존재하지 않는다.

공식문서에서는 다음과 같이 설명하고있다:

https://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-rules.html#output

TargetGroupArn -> (string)

The Amazon Resource Name (ARN) of the target group. Specify only when Type is forward and you want to route to a single target group. To route to one or more target groups, use ForwardConfig instead.

대상 그룹의 Amazon Resource Name(ARN)입니다.
트래픽을 단일 대상 그룹으로 라우팅하려는 경우에만, Type이 forward일 때 이 값을 지정합니다. 하나 이상의 대상 그룹으로 라우팅하려면, 대신 ForwardConfig를 사용하세요.

즉, Type이 forward고 단일 타겟그룹만 있다면 이 필드로 ARN을 얻으면 될 것 같다.

나는 GitHub Actions에서 현재 활성화된 타겟그룹의 ARN이 필요했기에 다음과 같이 사용했다.

TG_ACTIVE=$(aws elbv2 describe-rules \
                       --listener-arn arn:aws:elasticloadbalancing:ap-northeast-2... \
                       --query "Rules[].Actions[].TargetGroupArn" \
                       --output text)

 

  • GPT 첨삭 Ver:
TG_ACTIVE=$(aws elbv2 describe-rules \
			--listener-arn arn:aws:elasticloadbalancing:ap-northeast-2... \
			--query "Rules[?IsDefault].Actions[0].TargetGroupArn" \
			--output text)

 

'인프라' 카테고리의 다른 글

AWS: IAM Billing 읽기 권한  (0) 2025.10.21
Blue-Green Deployment (자동화)  (0) 2025.10.18
AWS: IAM 사용자 생성  (0) 2025.10.18
Blue-Green Deployment (기본)  (0) 2025.10.17
무중단 배포(Zero-Downtime Deployment)  (0) 2025.10.17