[초심자] Application Load Balancer 생성 시 자주 하는 실수들
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Application Load Balancer를 생성할 때 자주하는 실수에 대해서 정리해 봤습니다.
ALB는 Private Subnet? Public Subnet?
처음 Application Load Balancer를 생성할 때 자주 실수하는 부분이 Private Subnet을 선택할지, Public Subnet을 선택할지에 대한 부분이라고 생각합니다.
Load Balancer를 생성할 때「체계」에서 인터넷 경계와 내부를 선택할 수 있습니다. 여기서 Public Subnet을 선택하야 하는지, Private Subnet을 선택해야하는지에 따라 스키마가 달라진다고 보면 됩니다. 하지만 종종 Private Subnet에 있는 EC2 웹 서버에 접근하기 위해 Private Subnet을 선택하는 실수를 하기도 합니다.
그럼 Public과 Private는 어떻게 구분해?
Load Balancer를 생성하면 선택한 Subnet에 Load Balancer Node가 생성됩니다. 인터넷을 통해 웹 서버에 접근해야 하는 경우 Private Subnet을 선택해버리면 Load Balancer Node가 Private Subnet에 생성되기 때문에 외부와 통신할 수 없는 상황이 발생하여 웹 서버에 접근할 수 없습니다.
「매핑」에서 가용영역과 Subnet을 선택할 수 있습니다. 웹서버에 접근하기 위해「인터넷 경계」를 선택하고 Public Subnet을 선택하면 되지만, Private Subnet을 선택하면 다음과 같은 경고 문구가 나타납니다.(반대로 내부를 선택하고 Public Subnet을 선택해도 경고 문구가 나타납니다.)
즉 외부 인터넷으로 들어온 클라이언트의 요청을 받아 라우팅을 하고, 내부는 VPC안의 클라이언트 요청만 라우팅한다고 보시면 됩니다.
health checks failed 문제
아마 Load Balancer를 생성할 때 가장 자주 봤던 에러가 health checks failed 일거라고 생각합니다.
여기서 가장 흔히 볼 수 있는 health checks failed 2가지를 정리해 봤습니다.
EC2를 생성하고, Load Balancer를 생성했지만 타겟 그룹에서「health checks failed」라고 나옵니다. 여기서 우선 확인해야할 부분은 80번 포트 번호로 EC2 웹서버가 통신이 가능한 상황인지 확인을 해야합니다. Apache가 설치되어 있지 않다면 위와 같이「health checks failed」에러가 나오는 경우도 있기 때문에 EC2에서 Apache가 설치되어 있는지 확인 할 필요가 있습니다.
이어서 Apache를 설치했음에도「Health checks failed with these codes: [403]」라는 에러가 뜨게 됩니다. 해당 에러는 현재 타겟 그룹에 등록된 패스에 index.html 파일이 없을 경우 나타나는 에러입니다.
cp /usr/share/httpd/noindex/index.html /var/www/html/index.html
간단하게 아파치 경로에 있는 index.html을 웹 경로에 복사해서 넣어줍니다.
다시 타겟 그룹으로 돌아오면 healthy로 변경된 것을 확인할 수 있습니다. 그 외에도 에러가 발생하는 상황은 많지만 처음에는 이정도만 숙지해도 문제없이 Load Balancer를 만들 수 있지 않을까 생각합니다.