Amazon ECS blue/green, linear, canary 배포를 위한 Network Load Balancer 리소스
Amazon ECS blue/green, linear, canary 배포를 위한 Network Load Balancer 리소스
Amazon ECS blue/green 배포에서 Network Load Balancer(NLB)를 사용하기 위해 구성해야 하는 대상 그룹, 로드 밸런서, 리스너, 서비스 구성과 트래픽 흐름을 알아봐요.
출처: 문서
본문
Amazon ECS blue/green 배포에서 Network Load Balancer를 사용하려면 blue와 green 서비스 리비전 사이의 트래픽 라우팅을 가능하게 하는 특정 리소스를 구성해야 해요. 이 섹션은 필수 구성 요소와 그 구성을 설명해요.
구성에 Network Load Balancer가 포함되면 Amazon ECS는 다음 수명 주기 단계에 10분 지연을 추가해요:
TEST_TRAFFIC_SHIFTPRODUCTION_TRAFFIC_SHIFT
이 지연은 데이터 플레인에서 구성된 트래픽 가중치와 실제 트래픽 라우팅 사이의 불일치를 유발할 수 있는 Network Load Balancer 타이밍 문제를 고려한 것이에요.
대상 그룹 (Target groups)
Network Load Balancer를 사용한 blue/green 배포에는 두 개의 대상 그룹을 만들어야 해요:
- blue 서비스 리전(현재 프로덕션 트래픽)용 기본 대상 그룹(primary target group)
- green 서비스 리비전(새 서비스 리비전)용 대체 대상 그룹(alternate target group)
두 대상 그룹 모두 다음 설정으로 구성해야 해요:
- 대상 유형:
ip(Fargate 또는awsvpc네트워크 모드의 EC2) - 프로토콜: TCP (또는 애플리케이션이 사용하는 프로토콜)
- 포트: 애플리케이션이 수신 대기하는 포트 (HTTP는 일반적으로 80)
- VPC: Amazon ECS 태스크와 같은 VPC
- 상태 검사 설정: 애플리케이션 상태를 제대로 확인하도록 구성
- TCP 상태 검사의 경우 Network Load Balancer는 대상과 TCP 연결을 설정해요. 연결이 성공하면 대상은 건강한 것으로 간주돼요.
- HTTP/HTTPS 상태 검사의 경우 Network Load Balancer는 대상에 HTTP/HTTPS 요청을 보내고 응답을 확인해요.
blue/green 배포 중에 Amazon ECS는 배포 단계에 따라 태스크를 적절한 대상 그룹에 자동으로 등록해요.
예시: Network Load Balancer용 대상 그룹 만들기
다음 AWS CLI 명령은 blue/green 배포에서 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를 만들어야 해요:
- Scheme: 요구 사항에 따라 Internet-facing 또는 internal
- IP 주소 유형: IPv4
- VPC: Amazon ECS 태스크와 같은 VPC
- 서브넷: 서로 다른 가용 영역에 있는 최소 2개의 서브넷
Application Load Balancer와 달리 Network Load Balancer는 전송 계층(Layer 4)에서 작동하며 보안 그룹을 사용하지 않아요. 대신 Amazon ECS 태스크와 연결된 보안 그룹이 리스너 포트에서 Network Load Balancer의 트래픽을 허용하도록 해야 해요.
예시: Network Load Balancer 만들기
다음 AWS CLI 명령은 blue/green 배포에서 사용할 Network Load Balancer를 만들어요.
aws elbv2 create-load-balancer \
--name my-network-load-balancer \
--type network \
--subnets subnet-12345678 subnet-87654321
blue/green 배포에서 NLB 사용 시 고려 사항
blue/green 배포에 Network Load Balancer를 사용할 때 다음을 고려하세요.
- Layer 4 작동 - Network Load Balancer는 전송 계층(Layer 4)에서 작동하며 애플리케이션 계층(Layer 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는 콘텐츠 기반 라우팅을 지원하지 않으므로 테스트 트래픽은 프로덕션 트래픽과 다른 포트로 보내야 해요.
리스너와 규칙 (Listeners and rules)
Network Load Balancer를 사용한 blue/green 배포에는 리스너를 구성해야 해요:
- 프로덕션 리스너 (Production listener) - 프로덕션 트래픽을 처리해요(일반적으로 포트 80 또는 443).
- 처음에는 기본 대상 그룹(blue 서비스 리비전)으로 트래픽을 전달
- 배포 후에는 대체 대상 그룹(green 서비스 리비전)으로 트래픽을 전달
- 테스트 리스너 (Test listener, 선택 사항) - 프로덕션 트래픽을 이동하기 전에 green 서비스 리비전을 검증하기 위한 테스트 트래픽을 처리해요.
- 다른 포트(예: 8080 또는 8443)에 구성할 수 있어요
- 테스트 중에는 대체 대상 그룹(green 서비스 리비전)으로 트래픽을 전달
Application Load Balancer와 달리 Network Load Balancer는 콘텐츠 기반 라우팅 규칙을 지원하지 않아요. 대신 트래픽은 리스너 포트와 프로토콜을 기반으로 라우팅돼요.
다음 AWS CLI 명령은 Network Load Balancer에 대한 프로덕션과 테스트 리스너를 만들어요. user-input을 사용자 값으로 바꾸세요.
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
서비스 구성 (Service configuration)
Amazon ECS가 사용자를 대신해 클러스터의 로드 밸런서 리소스를 관리할 수 있는 권한이 있어야 해요. 자세한 내용은 Amazon ECS infrastructure IAM role for load balancers 참고.
Network Load Balancer와 함께 blue/green 배포용 Amazon ECS 서비스를 만들거나 업데이트할 때는 다음 구성을 지정해야 해요. user-input을 사용자 값으로 바꾸세요. 이 구성의 핵심 구성 요소는:
- targetGroupArn - 기본 대상 그룹(blue 서비스 리비전)의 ARN
- alternateTargetGroupArn - 대체 대상 그룹(green 서비스 리비전)의 ARN
- productionListenerRule - 프로덕션 트래픽용 리스너의 ARN
- testListenerRule - (선택 사항) 테스트 트래픽용 리스너의 ARN
- roleArn - Amazon ECS가 Network Load Balancer 리소스를 관리할 수 있게 하는 역할의 ARN
- strategy -
BLUE_GREEN으로 설정해 blue/green 배포를 활성화 - bakeTimeInMinutes - 프로덕션 트래픽이 이동된 후 blue와 green 서비스 리비전이 동시에 실행되는 기간
{
"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
}
}
배포 중 트래픽 흐름 (Traffic flow during deployment)
Network Load Balancer를 사용한 blue/green 배포 중 트래픽은 다음과 같이 시스템을 통해 흐릅니다:
- 초기 상태 - 모든 프로덕션 트래픽이 기본 대상 그룹(blue 서비스 리비전)으로 라우팅돼요.
- green 서비스 리비전 배포 - Amazon ECS가 새 태스크를 배포하고 대체 대상 그룹에 등록해요.
- 테스트 트래픽 - 테스트 리스너가 구성되어 있으면 테스트 트래픽이 대체 대상 그룹으로 라우팅되어 green 서비스 리비전을 검증해요.
- 프로덕션 트래픽 이동 - Amazon ECS가 프로덕션 리스너를 업데이트해 대체 대상 그룹(green 서비스 리비전)으로 트래픽을 라우팅해요.
- 베이크 시간 (Bake time) - 프로덕션 트래픽이 이동된 후 blue와 green 서비스 리비전이 동시에 실행되는 기간.
- 완료 - 성공적인 배포 후 blue 서비스 리비전이 종료돼요.
배포 중 문제가 감지되면 Amazon ECS는 기본 대상 그룹(blue 서비스 리비전)으로 트래픽을 다시 라우팅해 자동으로 롤백할 수 있어요.