CodeDeploy와 Elastic Load Balancing 통합 - AWS CodeDeploy

CodeDeploy와 Elastic Load Balancing 통합

CodeDeploy 배포 시, 로드 밸런서는 준비되지 않았거나, 현재 배포 중이거나, 더 이상 환경의 일부로 필요하지 않은 인스턴스로 인터넷 트래픽이 라우팅되지 않도록 합니다. 그러나 로드 밸런서의 정확한 역할은 블루/그린 배포에 사용되는지 아니면 인 플레이스(in-place) 배포에 사용되는지에 따라 다릅니다.

참고

블루/그린(Blue/Green) 배포에서는 Elastic Load Balancing 로드 밸런서를 반드시 사용해야 하고, 인 플레이스(In-place) 배포에서는 선택 사항입니다.

Elastic Load Balancing 유형

Elastic Load Balancing은 CodeDeploy 배포에서 사용할 수 있는 Classic Load Balancer, Application Load Balancer, Network Load Balancer의 세 가지 로드 밸런서 유형을 제공합니다.

Classic Load Balancer

전송 계층(TCP/SSL) 또는 애플리케이션 계층(HTTP/HTTPS)에서 라우팅 및 로드 밸런싱합니다. EC2-Classic 또는 VPC를 지원합니다.

Application Load Balancer

애플리케이션 계층(HTTP/HTTPS)에서 라우팅 및 로드 밸런싱하며 경로 기반 라우팅을 지원합니다. Virtual Private Cloud(VPC)에서 각 EC2 인스턴스 또는 컨테이너 인스턴스에서 포트로 요청을 라우팅할 수 있습니다.

참고

Application Load Balancer 대상 그룹의 대상 유형은 EC2 인스턴스에서 배포 시 instance이고, Fargate에서 배포 시 IP여야 합니다. 자세한 내용은 대상 유형을 참조하세요.

Network Load Balancer

패킷 콘텐츠가 아닌 TCP 패킷 헤더에서 추출된 주소 정보를 기반으로 한 전송 계층(TCP/UDP Layer-4)에서 라우팅 및 로드 밸런싱합니다. Network Load Balancer는 트래픽 급증을 처리하고, 클라이언트의 소스 IP를 유지하며, 로드 밸런서의 수명 동안 고정 IP를 사용할 수 있도록 합니다.

Elastic Load Balancing 로드 밸런서에 대해 자세히 알아보려면 다음 주제를 참조하세요.

블루/그린 배포

Elastic Load Balancing 로드 밸런서 뒤에서 인스턴스 트래픽을 다시 라우팅하는 것은 CodeDeploy 블루/그린 배포의 기본 사항입니다.

블루/그린 배포 중 로드 밸런서는 사용자가 지정한 규칙에 따라 최신 애플리케이션 개정이 배포된 배포 그룹(대체 환경)에서 새 인스턴스로 트래픽이 라우팅되도록 한 다음 이전 애플리케이션 개정이 실행 중인 이전 인스턴스(원본 환경)에서의 트래픽은 차단합니다.

대체 환경의 인스턴스가 로드 밸런서에 등록되면 원본 환경의 인스턴스는 등록 취소되고 선택한 경우 종료됩니다.

블루/그린(Blue/Green) 배포의 경우 배포 그룹에서 Classic Load Balancer, Application Load Balancer 또는 Network Load Balancer를 지정할 수 있습니다. CodeDeploy 콘솔 또는 AWS CLI를 사용하여 배포 그룹에 로드 밸런서를 추가합니다.

블루/그린 배포에서 로드 밸런서에 대한 자세한 내용은 다음 항목을 참조하십시오.

인 플레이스(in-place) 배포

인 플레이스(in-place) 배포 시 로드 밸런서는 배포 대상 인스턴스로 인터넷 트래픽이 라우팅되지 않도록 하고 해당 인스턴스에 대한 배포가 완료되면 인스턴스가 다시 트래픽을 처리할 수 있도록 합니다.

인 플레이스(in-place) 배포에서 로드 밸런서를 사용하지 않으면, 배포 프로세스 중 인터넷 트래픽이 인스턴스로 계속 보내질 수 있습니다. 그로 인해 고객에게 웹 애플리케이션이 끊기거나, 완료되지 않거나, 이전 상태로 표시되는 문제가 생길 수 있습니다. 인 플레이스(In-place) 배포에서 Elastic Load Balancing 로드 밸런서를 사용할 경우, 배포 그룹의 인스턴스가 로드 밸런서에서 등록 취소되고 최신 애플리케이션 버전으로 업데이트된 다음 배포가 성공하고 나면 동일한 배포 그룹의 일부로 로드 밸런서에 다시 등록됩니다. CodeDeploy는 인스턴스가 로드 밸런서 뒤에서 정상 상태가 될 때까지 최대 1시간을 기다립니다. 인스턴스가 대기 기간 동안 로드 밸런서에 의해 정상 상태로 표시되지 않으면 CodeDeploy는 배포 구성에 따라 다음 인스턴스로 이동하거나 배포에 실패합니다.

인 플레이스(In-place) 배포의 경우 Classic Load Balancer, Application Load Balancer 또는 Network Load Balancer를 지정할 수 있습니다. 로드 밸런서를 배포 그룹 구성의 일부로 지정하거나, CodeDeploy에서 제공하는 스크립트를 사용하여 로드 밸런서를 구현할 수 있습니다.

배포 그룹을 사용한 인 플레이스(In-place) 배포 로드 밸런서 지정

CodeDeploy 콘솔 또는 AWS CLI를 사용하여 배포 그룹에 로드 밸런서를 추가합니다. 인 플레이스(in-place) 배포를 위해 배포 그룹에 로드 밸런서를 지정하는 자세한 내용은 다음 항목을 참조하십시오.

스크립트를 사용한 인 플레이스(In-place) 배포 로드 밸런서 지정

배포 수명 주기 스크립트를 사용하여 인 플레이스(in-place) 배포를 위한 로드 밸런싱을 설정하려면 다음 절차의 단계를 수행합니다.

참고

인 플레이스 배포에 대한 로드 밸런서를 설정하는 스크립트를 사용 중일 때에만 CodeDeployDefault.OneAtATime 배포 구성을 사용해야 합니다. 동시 실행은 지원되지 않으며, CodeDeployDefault.OneAtATime 설정은 스크립트의 직렬 실행을 보장합니다. 배포 구성에 대한 자세한 내용은 CodeDeploy에서 배포 구성 작업 단원을 참조하십시오.

GitHub의 CodeDeploy 샘플 리포지토리에 CodeDeploy Elastic Load Balancing 로드 밸런서를 사용할 때 적용할 수 있는 지침과 샘플이 있습니다. 이 리포지토리에는 진행에 필요한 모든 코드를 제공하는 3가지 샘플 스크립트(register_with_elb.sh, deregister_from_elb.sh, common_functions.sh)가 포함되어 있습니다. 이러한 3개 스크립트에서 자리 표시자를 편집한 후 appspec.yml 파일에서 해당 스크립트를 참조하면 됩니다.

CodeDeploy에서 Elastic Load Balancing 로드 밸런서에 등록된 Amazon EC2 인스턴스에 대해 인 플레이스(In-place) 배포를 설정하려면 다음을 수행하세요.

  1. 인 플레이스(in-place) 배포에 사용할 로드 밸런서 유형의 샘플을 다운로드합니다.

  2. 대상 Amazon EC2 인스턴스마다 AWS CLI가 설치되어 있는지 확인합니다.

  3. 대상 Amazon EC2 인스턴스 각각에 최소한 elasticloadbalancing:* 및 autoscaling:* 권한을 가진 IAM 인스턴스 프로파일이 연결되어 있는지 확인합니다.

  4. 애플리케이션의 소스 코드 디렉터리에 배포 수명 주기 이벤트 스크립트 (register_with_elb.sh, deregister_from_elb.sh, common_functions.sh)를 포함합니다.

  5. 애플리케이션 수정 버전의 appspec.yml에서 ApplicationStart 이벤트 중에 register_with_elb.sh 스크립트, ApplicationStop 이벤트 중에 deregister_from_elb.sh 스크립트를 실행할 수 있도록 CodeDeploy에 대한 지침을 제공합니다.

  6. 인스턴스가 Amazon EC2 Auto Scaling 그룹에 포함된 경우 이 단계를 건너뛸 수 있습니다.

    common_functions.sh 스크립트:

    • Classic Load Balancer를 사용하는 경우, ELB_LIST=""에 Elastic Load Balancing 로드 밸런서의 이름을 지정하고 파일에서 다른 배포 설정에 필요한 사항을 수정합니다.

    • Application Load Balancer 또는 Network Load Balancer를 사용하는 경우, TARGET_GROUP_LIST=""에 Elastic Load Balancing 대상 그룹의 이름을 지정하고 파일에서 다른 배포 설정에 필요한 사항을 수정합니다.

  7. 애플리케이션의 소스 코드, appspec.yml, 배포 수명 주기 이벤트 스크립트를 하나의 애플리케이션 개정으로 번들링한 후 이 개정을 업로드합니다. 개정을 Amazon EC2 인스턴스로 배포합니다. 배포 진행 중에 배포 수명 주기 이벤트 스크립트는 로드 밸런서에서 Amazon EC2 인스턴스 등록을 취소하고 연결이 해제될 때까지 기다린 후, 배포가 완료되면 로드 밸런서에 Amazon EC2 인스턴스를 다시 등록합니다.