블루 그린 배포를 위해 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 |