블루/그린 배포에 대한 Application Load Balancer 리소스 - Amazon Elastic Container Service

블루/그린 배포에 대한 Application Load Balancer 리소스

Amazon ECS 블루/그린 배포에서 Application Load Balancer를 사용하려면 블루 및 그린 서비스 개정 간 트래픽 라우팅을 허용하는 특정 리소스를 구성해야 합니다.

제한 사항

Application Load Balancer를 사용한 블루/그린 배포에는 현재 다음과 같은 제한 사항이 적용됩니다.

  • 전달되지 않는 작업으로 구성된 여러 작업 유형을 포함하는 Application Load Balancer 리스너를 사용하는 경우 블루/그린 배포는 지원되지 않습니다. Application Load Balancer 리스너 규칙에 전달 작업과 비전달 작업(예: 리디렉션, 고정 응답 또는 인증 작업)이 혼합되어 포함된 경우 배포에 실패합니다.

대상 그룹

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

  • 블루 서비스 개정의 기본 대상 그룹(현재 프로덕션 트래픽)

  • 그린 서비스 개정(새 버전)의 대체 대상 그룹

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

  • 대상 유형: IP(awsvpc 네트워크 모드를 사용하는 Fargate 또는 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

리스너 및 규칙

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

  • 프로덕션 리스너: 프로덕션 트래픽 처리(일반적으로 포트 80 또는 443)

    • 처음에 기본 대상 그룹으로 트래픽 전달(블루 서비스 개정)

    • 배포 후 대체 대상 그룹으로 트래픽 전달(그린 서비스 개정)

  • 테스트 리스너(선택 사항): 프로덕션 트래픽을 전환하기 전에 테스트 트래픽을 처리하여 그린 서비스 개정 검증

    • 다른 포트(예: 8080 또는 8443)에서 구성 가능

    • 테스트 중에 대체 대상 그룹(그린 서비스 개정)으로 트래픽 전달

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

예 프로덕션 리스너 생성

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

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에서 생성합니다.

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 명령은 테스트를 위해 특정 경로에 대한 트래픽을 그린 대상 그룹으로 전달하는 규칙을 생성합니다.

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 명령은 테스트를 위해 특정 헤더를 포함한 트래픽을 그린 대상 그룹으로 전달하는 규칙을 생성합니다.

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

서비스 구성

Amazon ECS에서 사용자를 대신해 클러스터의 로드 밸런서 리소스를 관리하도록 허용할 권한이 있어야 합니다. 자세한 내용은 로드 밸런서에 대한 Amazon ECS 인프라 IAM 역할 섹션을 참조하세요.

Elastic Load Balancing을 사용하여 블루/그린 배포에 대한 Amazon ECS 서비스를 생성하거나 업데이트하는 경우 다음 구성을 지정해야 합니다.

모든 사용자 입력을 사용자의 값으로 바꿉니다.

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

  • targetGroupArn: 기본 대상 그룹 ARN(블루 서비스 개정).

  • alternateTargetGroupArn: 대체 대상 그룹 ARN(그린 서비스 개정).

  • productionListenerRule: 프로덕션 트래픽에 대한 리스너 규칙 ARN.

  • roleArn: Amazon ECS에서 Elastic Load Balancing 리소스를 관리하도록 허용하는 역할의 ARN.

  • strategy: 블루/그린 배포를 활성화하려면 BLUE_GREEN으로 설정합니다.

  • bakeTimeInMinutes: 프로덕션 트래픽이 이동한 후 블루 및 그린 서비스 개정이 모두 동시에 실행되는 기간.

  • 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을 사용하는 블루/그린 배포 중에 트래픽은 다음과 같이 시스템을 통해 흐릅니다.

  1. 초기 상태: 모든 프로덕션 트래픽이 기본 대상 그룹(블루 서비스 개정)으로 라우팅됩니다.

  2. 그린 서비스 개정 배포: Amazon ECS는 새 태스크를 배포하고 대체 대상 그룹에 등록합니다.

  3. 트래픽 테스트: 테스트 리스너가 구성된 경우 테스트 트래픽이 대체 대상 그룹으로 라우팅되어 그린 서비스 개정을 검증합니다.

  4. 프로덕션 트래픽 전환: Amazon ECS는 트래픽을 대체 대상 그룹(그린 서비스 개정)으로 라우팅하도록 프로덕션 리스너 규칙을 업데이트합니다.

  5. 베이크 소요 시간: 프로덕션 트래픽이 이동한 후 블루 및 그린 서비스 개정이 모두 동시에 실행되는 기간.

  6. 완료: 배포에 성공하면 블루 서비스 개정이 종료됩니다.

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