[AWS] First configuration for service using ALB

DaBeen Yi
4 min readJun 10, 2021

--

Configure overall structure through AWS services

데이터 센터 이전을 코 앞에 앞두고 우리 서비스의 일부분 구성을 처음으로 맡아봤다.

(사실 정식으로 주도했다기 보다는 내가 먼저 구성해봄으로써 우리 회사 서비스 구조를 좀 더 잘 파악하라는 팀장님의 의도가 담겨 있었다. 어짜피 나중에 팀장님 그리고 다른 동료들이랑 한번 더 리뷰 후 재구성 할 예정이었음)

암튼 큰 틀만 가지고 설명을 하자면 우리 서비스는 아래와 같이 구성되어있다.

왼쪽부터 설명하자면

Route53:

도메인을 생성하고, 해당 도메인에 ALB DNS 이름을 CNAME으로 등록한다.

예시) a.test.com → test.elb.amazonaws.com
* 덧, Root domain은 CNAME 설정이 불가능하다. (Amazon 공식 문서에 나와있음.) 대신 Root domain에는 Alias 설정을 통해 AWS의 다른 서비스와 연결할 수 있다.

ALB:

CLB, NLB, ALB, GLB 중 우리 서비스에 가장 적합한 ALB를 선택하였다.

가용성 확보를 위해 AZ는 3군데로 지정하였다. 이렇게되면 내가 지정한 AZ의 서브넷 내 에 ALB 인스턴스가 생성된다.

여기서 한가지 주의할 점은 로드밸런서를 internet facing으로 생성하게 되면 이 AZ존에서 선택하는 Subnet이 Public이어야한다는 것이다. 따라서 우리의 경우는 dmz라는 Public 서브넷을 별도로 생성하여 해당 서브넷에 ALB를 위치시켰다.

한가지 더!

우리는 서비스를 HTTPS(tcp/443)으로만 제공할 예정이기에 ALB 생성 시, Listener를 tcp/443으로만 설정해두었고 이에 따라 인증서도 ACM(Amazon Certificates Manager)에 등록해두었다. (그리고 너무 당연한 말이지만 해당 인증서를 ALB에서 사용하도록 했다.)

WAF:

기본적인 DoS 공격과 Geo 기반의 IP 차단을 위해 WAF를 적용했다. 정책은 AWS에서 제공하는 기본 정책으로만 구성했다.

Nginx:

웹서버는 Nginx로 구성하였고, health check는 tcp/80으로 진행하였다. (어짜피 외부랑 연결되는 구간이 아니라 포트를 80으로 열어도 상관없어서 이렇게 진행했다.)

즉, 외부에서 접근이 필요한 ALB만 tcp/443으로 포트를 제한해두고 내부는 tcp/80으로 통신하도록 설정해둠.

그리고 역시나 가용성 확보를 위해 2대의 nginx를 구성했고 ALB에서는 이 2대의 nginx에 RR로 트래픽을 보내도록 했다.

트래픽이 RR로 들어오는지는 두 nginx 서버에 접속하여 tail -f /var/log/nginx/* 명령어로 실시간 로그를 통해 확인하였다. (a.test.com 페이지 refresh 시, 각 서버에 번갈아가며 로그가 기록됨을 확인)

Nginx 설정은 아직 익숙치 않아서 기존에 사용 중인 다른 Nginx 서버 설정을 참고하였다.

많이 어설프고 아주아주 작은 부분이긴 하지만 그래도 나 혼자 우리 회사 서비스의 일부분을 구성해보았다. 네트워크만 했을 때는 내가 직접 무엇인가를 구성하고 생성?한다는 듯한 느낌을 받아보지 못했는데, 내가 내 손으로 뭔가 구성하고 서비스가 돌아가게 한다는 것이 이토록 즐거운 일이라는걸 깨달았다!

네트워크의 ㄴ도 모르는 처지에서 다시 시스템의 ㅅ도 모르는 처지가 되어버렸지만 언젠간 이 포스팅을 코웃음치며 볼 날이 오기를 바라면서 오늘의 포스팅은 여기까지!

🍰

--

--