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

Amazon ECS 블루/그린 배포에 대한 Network Load Balancer 리소스

Amazon ECS 블루/그린 배포에서 Network Load Balancer를 사용하려면 블루 및 그린 서비스 개정 간 트래픽 라우팅을 허용하는 특정 리소스를 구성해야 합니다. 이 섹션에서는 필수 구성 요소 및 해당 구성에 대해 설명합니다.

구성에 Network Load Balancer가 포함된 경우 Amazon ECS는 다음 수명 주기 단계에 10분 지연을 추가합니다.

  • PRE_SCALE_UP

  • TEST_TRAFFIC_SHIFT

  • PRODUCTION_TRAFFIC_SHIFT

이 지연은 구성된 트래픽 가중치와 데이터 플레인의 실제 트래픽 라우팅 간 불일치를 일으킬 수 있는 Network Load Balancer 타이밍 문제를 고려합니다.

대상 그룹

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

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

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

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

  • 대상 유형: ip(awsvpc 네트워크 모드를 사용하는 Fargate 또는 EC2의 경우)

  • 프로토콜: TCP(또는 애플리케이션이 사용하는 프로토콜)

  • 포트: 애플리케이션이 수신 대기하는 포트(일반적으로 HTTP의 경우 80)

  • VPC: Amazon ECS 태스크와 동일한 VPC

  • 상태 확인 설정: 애플리케이션 상태를 올바르게 확인하도록 구성됨

    TCP 상태 확인을 위해 Network Load Balancer는 대상과 TCP 연결을 설정합니다. 연결에 성공하면 대상이 정상 상태로 간주됩니다.

    HTTP/HTTPS 상태 확인의 경우 Network Load Balancer는 대상에 HTTP/HTTPS 요청을 보내고 응답을 확인합니다.

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

예 Network Load Balancer에 대한 대상 그룹 생성

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

aws elbv2 create-target-group \ --name blue-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP aws elbv2 create-target-group \ --name green-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP

Network Load Balancer

다음 구성을 사용하여 Network Load Balancer를 생성해야 합니다.

  • 스키마: 요구 사항에 따라 인터넷 연결 또는 내부

  • IP 주소 유형: IPv4

  • VPC: Amazon ECS 태스크와 동일한 VPC

  • 서브넷: 서로 다른 가용 영역에서 두 개 이상의 서브넷

Application Load Balancer와 달리 Network Load Balancer는 전송 계층(계층 4)에서 작동하며 보안 그룹을 사용하지 않습니다. 대신 Amazon ECS 태스크와 연결된 보안 그룹이 리스너 포트에서 Network Load Balancer로부터 수신되는 트래픽을 허용하는지 확인해야 합니다.

예 Network Load Balancer 생성

다음 AWS CLI 명령은 블루/그린 배포에 사용할 Network Load Balancer를 생성합니다.

aws elbv2 create-load-balancer \ --name my-network-load-balancer \ --type network \ --subnets subnet-12345678 subnet-87654321

블루/그린 배포 사용에 관한 고려 사항

블루/그린 배포에 대해 Network Load Balancer를 사용하는 경우 다음 사항을 고려하세요.

  • 계층 4 작업: Network Load Balancer는 전송 계층(계층 4)에서 작동하며 애플리케이션 계층(계층 7) 콘텐츠를 검사하지 않습니다. 즉, 라우팅 결정에 대해 HTTP 헤더 또는 경로를 사용할 수 없습니다.

  • 상태 확인: Network Load Balancer 상태 확인은 TCP, HTTP 또는 HTTPS 프로토콜로 제한됩니다. TCP 상태 확인의 경우 Network Load Balancer는 연결을 설정할 수 있는지만 확인합니다.

  • 연결 보존: Network Load Balancer는 보안 및 로깅 목적으로 유용할 수 있는 클라이언트의 소스 IP 주소를 보존합니다.

  • 고정 IP 주소: Network Load Balancer는 각 서브넷에 대한 고정 IP 주소를 제공합니다. 이는 화이트리스트에 추가할 때 또는 클라이언트가 고정 IP 주소에 연결해야 하는 경우에 유용할 수 있습니다.

  • 테스트 트래픽: Network Load Balancer는 콘텐츠 기반 라우팅을 지원하지 않으므로 테스트 트래픽을 프로덕션 트래픽과 다른 포트로 전송해야 합니다.

리스너 및 규칙

Network Load Balancer를 사용하는 블루/그린 배포의 경우 다음과 같이 리스너를 구성해야 합니다.

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

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

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

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

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

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

Application Load Balancer와 달리 Network Load Balancer는 콘텐츠 기반 라우팅 규칙을 지원하지 않습니다. 대신 트래픽은 리스너 포트 및 프로토콜에 기반하여 라우팅됩니다.

다음 AWS CLI 명령은 Network Load Balancer에 대한 프로덕션 및 테스트 리스너를 생성합니다.

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

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 80 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456 aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 8080 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456

서비스 구성

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

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

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

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

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

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

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

  • testListenerRule: (선택 사항) 테스트 트래픽에 대한 리스너 ARN

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

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

  • bakeTimeInMinutes: 프로덕션 트래픽을 전환하기 전에 그린 서비스 개정을 배포한 후 대기하는 시간

{ "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456", "containerName": "container-name", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456", "productionListenerRule": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/1234567890123456", "testListenerRule": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/2345678901234567", "roleArn": "arn:aws:iam::123456789012:role/ecs-nlb-role" } } ], "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 5 } }

배포 중 트래픽 흐름

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

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

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

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

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

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

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

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