내용으로 건너뛰기

Amazon CodeDeploy Blue/Green 배포에서 Auto Scaling Group을 사용할 때 발생하는 AUTOSCALING_VALIDATION_ERROR(Target group not attached to the Auto Scaling group)의 원인과 대응 방안

4분 분량
콘텐츠 수준: 중급
2

본 기사에서는 Amazon CodeDeploy의 Blue/Green 배포에서 Auto Scaling Group(ASG)을 사용할 때, Green ASG 생성 과정에서 발생하는 AUTOSCALING_VALIDATION_ERROR 오류의 원인을 분석하고 대응 방안을 설명합니다.

많은 고객들이 무중단 배포를 위해 Amazon CodeDeploy의 Blue/Green 배포 방식을 Auto Scaling Group(ASG)과 함께 사용하고 있습니다.

CodeDeploy는 ASG를 대상으로 하는 Blue/Green 배포에서 기존에 서비스 중인 ASG(Blue)를 그대로 사용하지 않고, 이를 복제하여 새로운 ASG(Green)를 생성한 뒤 신규 버전의 애플리케이션을 배포하는 방식으로 동작합니다. 배포가 정상적으로 완료되면 트래픽이 Green으로 전환되고, 이후 기존 Blue ASG가 종료됩니다.

이 과정에서 CodeDeploy는 Blue ASG의 구성(시작 템플릿, 스케일링 정책 등)을 복제하는데, 복제 시점의 내부 동작 순서와 원본 ASG에 설정된 스케일링 정책의 종류에 따라 배포가 검증 단계에서 실패하는 경우가 있습니다.

본 기사에서는 실제 배포 사례에서 확인된 AUTOSCALING_VALIDATION_ERROR 오류를 중심으로, 해당 오류가 발생하는 원인과 이를 회피하기 위한 대응 방안을 정리합니다.

본 기사는 배포 방식이 BLUE_GREEN, 배포 대상으로 EC2 Auto Scaling Group을 사용하며, GreenFleetProvisioningOption이 COPY_AUTO_SCALING_GROUP인 환경을 기준으로 설명합니다.


이슈 : Green ASG 생성 단계에서 발생하는 AUTOSCALING_VALIDATION_ERROR (Target group not attached to the Auto Scaling group)

Blue/Green 배포를 실행하면 아래와 같이 배포가 시작 직후 짧은 시간 내에 실패하며, AUTOSCALING_VALIDATION_ERROR 오류가 발생할 수 있습니다.

errorInformation
  code    : AUTOSCALING_VALIDATION_ERROR
  message : The following validation error occurred: Target group not attached to the Auto Scaling group
            (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; ...)

메시지만 보면 "Target Group이 ASG에 연결되어 있지 않다"는 내용이나, 배포 그룹에 등록된 원본(Blue) ASG에는 Target Group이 정상적으로 연결되어 있는 경우가 많습니다.

원인 분석 : Green ASG 복제 순서와 스케일링 정책 지표

이 오류의 원인을 파악하기 위해서는 CloudTrail 이벤트를 통해 실제로 어떤 API 호출에서 오류가 발생했는지 확인하는 것이 효과적입니다.

CloudTrail을 확인해보면 해당 오류는 CodeDeploy가 신규로 생성한 Green ASG(CodeDeploy_<배포그룹명>_<배포ID>)에 대해 PutScalingPolicy API를 호출하는 시점에 발생하며, 적용하려던 정책이 ALBRequestCountPerTarget을 지표로 사용하는 Target Tracking Policy임을 확인할 수 있습니다.

{
    "eventSource": "autoscaling.amazonaws.com",
    "eventName": "PutScalingPolicy",
    "errorCode": "ValidationException",
    "errorMessage": "Target group not attached to the Auto Scaling group",
    "requestParameters": {
        "autoScalingGroupName": "CodeDeploy_<배포그룹명>_<배포ID>",
        "policyName": "Target Tracking Policy_...",
        "policyType": "TargetTrackingScaling",
        "estimatedInstanceWarmup": 300,
        "targetTrackingConfiguration": {
            "predefinedMetricSpecification": {
                "predefinedMetricType": "ALBRequestCountPerTarget",
                "resourceLabel": "app/.../targetgroup/..."
            },
            "targetValue": 900,
            "disableScaleIn": false
        },
        "enabled": true
    },
    "sourceIPAddress": "codedeploy.amazonaws.com",
    "userAgent": "codedeploy.amazonaws.com"
}

이러한 호출이 발생하는 이유는 CodeDeploy가 Blue/Green 배포를 위해 원본 ASG를 복제(COPY_AUTO_SCALING_GROUP)하여 Green ASG를 생성, 기존 Blue ASG를 대체하는 일련의 과정으로 인해 발생하는데 이때 내부 동작 순서는 대략적으로 아래와 같습니다.

1. CreateAutoScalingGroup          (min: 0, desired: 0, max: n)
2. PutScalingPolicy
3. PutScheduledUpdateGroupAction
4. EnableMetricsCollection
5. SuspendProcesses
6. UpdateAutoScalingGroup          (min: n, desired: m)

여기서 주목해야 할 부분은 두 가지입니다.

첫째, Green ASG는 처음 생성될 때 min: 0, desired: 0 상태로 생성됩니다. 이는 배포 진행 전 빈 ASG를 먼저 만들고, 이후 단계에서 인스턴스 수를 조정(UpdateAutoScalingGroup)하기 위한 의도된 동작입니다.

둘째, ASG의 기본 구성을 복제한 이후 기존 ASG에 구성되어있는 부가 설정을 가져와 적용하는데, 이때 스케일링 정책을 적용하는 PutScalingPolicy, PutScheduledUpdateGroupAction등의 동작이 Target Group이 신규 ASG에 완전히 연결되기 이전 시점에 수행됩니다.

여기서 ScalingPolicy에 사용되는 지표중 하나인 ALBRequestCountPerTarget 지표는 이름 그대로 ASG에 연결된 Application Load Balancer Target Group의 대상당 요청 수를 기준으로 동작하는 지표입니다. 따라서 아직 Target Group이 연결되지 않은 Green ASG에 이 지표를 사용하는 Target Tracking Policy를 적용하려고 하면, Auto Scaling 서비스는 참조할 Target Group이 없으므로 Target group not attached to the Auto Scaling group 검증 오류를 반환하게 됩니다.

즉, 이 오류는 ASG 복제 과정의 API 호출 순서상 Target Group이 연결되어있지 않으면 주입 불가능한 지표를 PutScalingPolicy 시점에 복제하려고 시도하기 때문에 발생하는 것입니다.

대응 방법 : Target Group에 의존하지 않는 ASG 자체 지표 사용

이 오류를 회피하기 위해서는 Blue/Green 배포 환경에서 Target Tracking Policy의 지표로 ALBRequestCountPerTarget과 같이 Target Group 연결에 의존하는 지표 대신, ASG 자체에서 수집되는 지표를 사용하시는 것을 권장드립니다. [1]

Target Tracking Policy에서 사용 가능한 사전 정의 지표(Predefined Metric) 중 아래 지표들은 Target Group의 연결 여부와 무관하게 동작하므로 동일한 이슈를 회피할 수 있습니다.

  • ASGAverageCPUUtilization
  • ASGAverageNetworkIn
  • ASGAverageNetworkOut

원본(Blue) ASG의 Target Tracking Policy를 위 지표 중 하나를 사용하도록 변경하면, 복제된 Green ASG에도 동일한 정책이 적용되므로 PutScalingPolicy 단계에서의 검증 오류를 회피할 수 있습니다.


결론 및 정리

Amazon CodeDeploy의 Blue/Green 배포시 원본(Blue) ASG를 복제하여 Green ASG를 생성하는 방식을 사용하시는 경우, 이 복제 과정의 내부 동작 순서를 이해하면 배포 실패 원인을 보다 명확하게 파악 및 이해할 수 있습니다.

AUTOSCALING_VALIDATION_ERROR (Target group not attached to the Auto Scaling group)는 Green ASG 복제 시 PutScalingPolicy가 Target Group 연결 이전에 수행되는 순서상의 특성과, ALBRequestCountPerTarget처럼 Target Group에 의존하는 지표를 사용하는 스케일링 정책이 함께 존재할 때 발생합니다. 이 경우 ASGAverageCPUUtilization, ASGAverageNetworkIn, ASGAverageNetworkOut과 같이 ASG 자체 지표를 사용하는 정책으로 변경하여 회피할 수 있습니다.

이러한 CodeDeploy 배포 과정의 오류는 오류 코드와 CloudTrail 이벤트를 함께 확인하면 어떤 단계에서 어떤 API 호출로 인해 실패했는지 정확히 진단할 수 있으므로, 배포 실패 시 오류 코드와 CloudTrail 이벤트를 우선적으로 확인하시는 것을 권장드립니다.


참고 자료

[1] Target tracking scaling policies for Amazon EC2 Auto Scaling | https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/as-scaling-target-tracking.html

AWS
지원 엔지니어

게시됨 2달 전62회 조회

댓글 없음