블루/그린, 선형, 카나리아 배포용 Application Load Balancer 리소스

블루/그린, 선형, 카나리아 배포용 Application Load Balancer 리소스

Application Load Balancer를 Amazon ECS 블루/그린 배포와 함께 사용하려면 파란색(blue)과 초록색(green) 서비스 개정판 사이에서 트래픽을 라우팅할 수 있는 특정 리소스를 구성해야 해요.

출처: 문서

본문

Application Load Balancer를 Amazon ECS 블루/그린 배포와 함께 사용하려면 blue와 green 서비스 개정판 사이에서 트래픽을 라우팅할 수 있는 특정 리소스를 구성해야 합니다.

대상 그룹(Target groups)

Elastic Load Balancing을 사용하는 블루/그린 배포의 경우 두 개의 대상 그룹을 만들어야 합니다.

  • blue 서비스 개정판(현재 프로덕션 트래픽)용 기본(primary) 대상 그룹
  • green 서비스 개정판(새 버전)용 대체(alternate) 대상 그룹

두 대상 그룹 모두 다음 설정으로 구성해야 합니다.

  • 대상 유형: IP(Fargate 또는 awsvpc 네트워크 모드의 EC2용)
  • 프로토콜: HTTP(또는 애플리케이션이 사용하는 프로토콜)
  • 포트: 애플리케이션이 수신 대기하는 포트(일반적으로 HTTP의 경우 80)
  • VPC: Amazon ECS 작업과 같은 VPC
  • 상태 확인 설정: 애플리케이션 상태를 올바르게 확인하도록 구성

블루/그린 배포 중에 Amazon ECS는 배포 단계에 따라 작업을 적절한 대상 그룹에 자동으로 등록합니다.

예: Application Load Balancer용 대상 그룹 만들기

다음 CLI 명령은 블루/그린 배포에서 Application Load Balancer와 함께 사용할 두 개의 대상 그룹을 만듭니다.

aws elbv2 create-target-group \
    --name blue-target-group \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-path / \
    --health-check-protocol HTTP \
    --health-check-interval-seconds 30 \
    --health-check-timeout-seconds 5 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2

aws elbv2 create-target-group \
    --name green-target-group \
    --protocol HTTP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-path / \
    --health-check-protocol HTTP \
    --health-check-interval-seconds 30 \
    --health-check-timeout-seconds 5 \
    --healthy-threshold-count 2 \
    --unhealthy-threshold-count 2

Application Load Balancer

다음 구성으로 Application Load Balancer를 만들어야 합니다.

  • 스킴: 요구 사항에 따라 인터넷 연결 또는 내부
  • IP 주소 유형: IPv4
  • VPC: Amazon ECS 작업과 같은 VPC
  • 서브넷: 서로 다른 가용 영역에 있는 최소 두 개의 서브넷
  • 보안 그룹: 리스너 포트의 트래픽을 허용하는 보안 그룹

Application Load Balancer에 연결된 보안 그룹에는 Amazon ECS 작업에 연결된 보안 그룹으로의 트래픽을 허용하는 아웃바운드 규칙이 있어야 합니다.

예: Application Load Balancer 만들기

다음 CLI 명령은 블루/그린 배포에 사용할 Application Load Balancer를 만듭니다.

aws elbv2 create-load-balancer \
    --name my-application-load-balancer \
    --type application \
    --security-groups sg-abcd1234 \
    --subnets subnet-12345678 subnet-87654321

리스너와 규칙(Listeners and rules)

블루/그린 배포의 경우 Application Load Balancer에서 리스너를 구성해야 합니다.

  • 프로덕션 리스너: 프로덕션 트래픽을 처리합니다(일반적으로 포트 80 또는 443).
    • 처음에는 트래픽을 기본 대상 그룹(blue 서비스 개정판)으로 전달합니다.
    • 배포 후에는 트래픽을 대체 대상 그룹(green 서비스 개정판)으로 전달합니다.
  • 테스트 리스너(선택 사항): 프로덕션 트래픽을 전환하기 전에 green 서비스 개정판을 검증하기 위한 테스트 트래픽을 처리합니다.
    • 다른 포트(예: 8080 또는 8443)에 구성할 수 있습니다.
    • 테스트 중 트래픽을 대체 대상 그룹(green 서비스 개정판)으로 전달합니다.

블루/그린 배포 중에 Amazon ECS는 배포 단계에 따라 트래픽을 적절한 대상 그룹으로 라우팅하도록 리스너 규칙을 자동으로 업데이트합니다.

예: 프로덕션 리스너 만들기

다음 CLI 명령은 포트 80에서 기본(blue) 대상 그룹으로 트래픽을 전달하는 프로덕션 리스너를 만듭니다.

aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \
    --protocol HTTP \
    --port 80 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/abcdef123456

예: 테스트 리스너 만들기

다음 CLI 명령은 포트 8080에서 대체(green) 대상 그룹으로 트래픽을 전달하는 테스트 리스너를 만듭니다.

aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \
    --protocol HTTP \
    --port 8080 \
    --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012

예: 경로 기반 라우팅용 리스너 규칙 만들기

다음 CLI 명령은 테스트를 위해 특정 경로의 트래픽을 green 대상 그룹으로 전달하는 규칙을 만듭니다.

aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \
    --priority 10 \
    --conditions Field=path-pattern,Values='/test/*' \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012

예: 헤더 기반 라우팅용 리스너 규칙 만들기

다음 CLI 명령은 테스트를 위해 특정 헤더가 있는 트래픽을 green 대상 그룹으로 전달하는 규칙을 만듭니다.

aws elbv2 create-rule \
    --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \
    --priority 20 \
    --conditions Field=http-header,HttpHeaderConfig='{Name=X-Environment,Values=[test]}' \
    --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012

서비스 구성(Service configuration)

Amazon ECS가 사용자를 대신해 클러스터의 로드 밸런서 리소스를 관리할 수 있는 권한이 있어야 합니다. 자세한 내용은 Amazon ECS infrastructure IAM role for load balancers를 참고하세요.

Elastic Load Balancing으로 블루/그린 배포를 위해 Amazon ECS 서비스를 만들거나 업데이트할 때 다음 구성을 지정해야 합니다. 사용자 입력을 여러분의 값으로 바꾸세요.

이 구성의 핵심 구성 요소는 다음과 같습니다.

  • targetGroupArn: 기본 대상 그룹(blue 서비스 개정판)의 ARN.
  • alternateTargetGroupArn: 대체 대상 그룹(green 서비스 개정판)의 ARN.
  • productionListenerRule: 프로덕션 트래픽용 리스너 규칙의 ARN.
  • roleArn: Amazon ECS가 Elastic Load Balancing 리소스를 관리할 수 있게 하는 역할의 ARN.
  • strategy: 블루/그린 배포를 활성화하려면 BLUE_GREEN으로 설정.
  • bakeTimeInMinutes: 프로덕션 트래픽이 전환된 후 blue와 green 서비스 개정판이 동시에 실행되는 기간.
  • TestListenerRule: 테스트 트래픽용 리스너 규칙의 ARN. 선택적 매개변수입니다.
{
    "loadBalancers": [
        {
            "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/primary-target-group/abcdef123456",
            "containerName": "container-name",
            "containerPort": 80,
            "advancedConfiguration": {
                "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:account-id:targetgroup/alternate-target-group/ghijkl789012",
                "productionListenerRule": "arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/load-balancer-name/abcdef123456/listener/ghijkl789012/rule/mnopqr345678",
                "roleArn": "arn:aws:iam::123456789012:role/ecs-elb-role"
            }
        }
    ],
    "deploymentConfiguration": {
        "strategy": "BLUE_GREEN",
        "maximumPercent": 200,
        "minimumHealthyPercent": 100,
        "bakeTimeInMinutes": 5
    }
}

배포 중 트래픽 흐름

Elastic Load Balancing을 사용하는 블루/그린 배포 중 트래픽은 시스템을 통해 다음과 같이 흐릅니다.

  • 초기 상태: 모든 프로덕션 트래픽이 기본 대상 그룹(blue 서비스 개정판)으로 라우팅됩니다.
  • Green 서비스 개정판 배포: Amazon ECS가 새 작업을 배포하고 대체 대상 그룹에 등록합니다.
  • 테스트 트래픽: 테스트 리스너가 구성되면 테스트 트래픽이 대체 대상 그룹으로 라우팅되어 green 서비스 개정판을 검증합니다.
  • 프로덕션 트래픽 전환: Amazon ECS가 프로덕션 리스너 규칙을 업데이트하여 트래픽을 대체 대상 그룹(green 서비스 개정판)으로 라우팅합니다.
  • 베이크 타임(Bake time): 프로덕션 트래픽이 전환된 후 blue와 green 서비스 개정판이 동시에 실행되는 기간.
  • 완료: 성공적인 배포 후 blue 서비스 개정판이 종료됩니다.

배포 중 문제가 감지되면 Amazon ECS는 트래픽을 기본 대상 그룹(blue 서비스 개정판)으로 다시 라우팅하여 자동으로 롤백할 수 있습니다.

더 알아보기 (Learn more)