ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] 한 ec2 인스턴스로 여러 서비스 배포하기 - 2 (컨테이너 배포 이후의 프로세스)
    Infra/aws 2024. 7. 20. 14:11

     

    지난 포스트에서 작성한 배포 프로세스에서는 한 ec2 인스턴스에 여러 컨테이너를 올리는 작업이었다.

     

    그럼 이제 위의 그림에서 백엔드 파트의 ELB 설정 혹은 NGINX 를 사용한 리버스 프록시를 통해

    배포된 컨테이너로 DNS 주소를 라우팅하는 과정을 기록하려 한다.

     

    먼저 ELB 는 뭘까?

     

     

    AWS ELB (Elastic Load Balancing)은 클라우드 환경에서 여러 대의 EC2 인스턴스나 다양한 서비스들 사이에 트래픽을 분산시켜주는 서비스다.

    ELB는 사용자의 요청을 여러 EC2 인스턴스로 자동으로 분배하여 각 인스턴스의 부하를 고르게 분산시켜

    서비스의 가용성과 신뢰성을 높이는 역할을 한다.

    ELB의 종류

    나는 Application LoadBalancer 를 사용했는데 

     

    주요 기능

    • 부하 분산: ELB는 트래픽을 받아 여러 EC2 인스턴스로 분산시켜 요청을 처리한다. 이는 각 인스턴스의 부하를 균등하게 분산시켜 서비스의 응답 시간을 최적화하고 장애 발생 시에도 서비스 중단을 최소화하는 데 도움을 준다.
    • 자동 확장: ELB는 Auto Scaling 그룹과 통합하여 트래픽이 증가할 경우 자동으로 인스턴스를 추가하고 감소할 경우 인스턴스를 줄이는 등의 확장과 축소를 관리한다. 이를 통해 서비스의 수요에 따라 리소스를 동적으로 조정할 수 있다.
    • 고가용성: ELB는 AWS 내부에서 관리되며 여러 가용 영역에 걸쳐 서비스를 제공하므로 단일 가용 영역의 장애가 발생해도 서비스의 지속성을 보장한다.
    • SSL : HTTPS 요청을 받아 SSL 연결을 해제하고 평문으로 변환하여 백엔드 EC2 인스턴스로 전달할 수 있다. 이는 보안 통신을 위한 인증서 관리를 단순화한다.
    • Health Checks: ELB는 정기적으로 각 인스턴스의 상태를 체크하고 문제가 있는 인스턴스에 대한 트래픽을 분산하지 않는다. 이를 통해 장애 발생 시 빠르게 장애 복구를 할 수 있다.

    여기서 SSL 의 경우 대상 그룹을 지정할 때 줄 수 있었다. ACM 에서 관리하는 인증서를 설정하여 SSL 설정을 줬다. (인증서 가져오기로 가져오거나, ACM에서 등록)

     

     

    인터넷 경계와 IPv4 를 설정한다.

     

     

    사용할 VPC를 골라준다. 
    내가 라우팅할 EC2 인스턴스가 있는 VPC 를 골라야 한다.

     

    이후 보안그룹과 리스너를 설정하면 된다. 

    어차피 80 과 443 만 그니까 HTTP 와 HTTPS 만 받을 것이기에 default 로 해도 크게 상관은 없지만

    도메인의 요구사항에 맞게 변동될 일이 있으니 가급적 새로 만들어서 쓰도록 하자.

     

    이후 리스너 설정에서 갈린다.

     

    1. acm 인증서만 있어서 로드밸런서에서 TLS 세팅을 해야하는 경우

     

    HTTPS 프로토콜을 받아 대상 그룹에게 전달하도록 한다.

     

     

    그리고 인증서는 로드밸런서에서 들고 있게 한다. 

     

    이후 대상 그룹을 생성하는데 

     

     

    EC2 인스턴스를 대상으로 지정할 것이니 인스턴스 지정해주고

     

     

    HTTP 프로토콜로 대상 그룹에 전달한다.

    VPC도 동일하게 지정해준 후

     

    내가 지정한 healthcheck 경로를 지정한다.

    스프링 어플리케이션이라면 스프링 액추에이터를 활용한 헬스체크 경로를 설정해주면 된다!

     

    2. 자체 인증서 파일이 있어 NGINX 에서 TLS 세팅을 하고 있는 경우

    그렇다면 로드밸런서에서 HTTP 요청으로 ec2인스턴스에게 전달해주면 된다.

    리스너 HTTP 프로토콜로 지정
    대상 그룹 HTTP 프로토콜로 지정

     

    그리고 이 트래픽을 EC2 인스턴스로 전달하고 싶다면

    헬스체크를 지정해야 하는데 이는 내 인스턴스의 WAS 서버에서 해줄 수 도 있고

    Nginx 웹서버가 해줄 수도 있다.

    Nginx 에서 해주기 위한 방법은

     

    이렇게 경로를 지정했다고 치면

     

    server {
        listen 80;
    
        location /health {
            return 200 'OK';
        }
    }

     

    헬스체크 용 로케이션을 생성해두면 된다.

     

    이후 route53 으로 도메인 연결을 해주면 되는데 이는 동일하다.

     

     

    A 레코드를 생성해주면 마무리 된다!!!

     

    'Infra > aws' 카테고리의 다른 글

    [AWS] private subnet에 있는 ec2 인스턴스의 ip 확인하기  (2) 2024.10.09
    [AWS] VPC 란 무엇인가  (1) 2024.05.23
Designed by Tistory.