본문 바로가기

DevOps/AWS

[AWS] ELB 셋팅하기 - 보안그룹/ 리스너 및 라우팅 / 헬스 체크

 보안 그룹

1. AWS EC2 보안 그룹에서 보안 그룹 생성하기

 

  • ELB의 특성상 인바운드 규칙에 80(HTTP), 443(HTTPS) 포트로 모든 IP에 대해 요청을 받을 수 있게 설정해야 한다.

 

2. ELB 만드는 창으로 돌아와서 보안 그룹 등록하기

 

 

 1. 대상 그룹(Target Group) 설정하기

리스너 및 라우팅 설정은 ELB로 들어온 요청을 어떤 EC2 인스턴스에 전달할 건지를 설정하는 부분이다.


1)

ELB로 들어온 요청을 어떤 곳으로 전달해야 하는데, 여기서 ‘어떤 곳’을 대상 그룹(Target Group)이라고 표현한다. 즉, ELB로 들어온 요청을 어디로 보낼 지 대상 그룹을 만들어야 한다.

 

2) 대상 유형 선택하기

 

 

EC2에서 만든 특정 인스턴스로 트래픽을 전달할 것이기 때문에 인스턴스 옵션을 선택한다.

 

3) 프토토콜, IP 주소 유형, 프로토콜 버전 설정

 

 

ELB가 사용자로부터 트래픽을 받아 대상 그룹에게 어떤 방식으로 전달할 지 설정하는 부분이다.

위 그림은 HTTP(HTTP1), 80번 포트, IPv4 주소로 통신을 한다는 걸 뜻한다.

이 방식이 흔하게 현업에서 많이 쓰이는 셋팅 방법이다.

 

 

4) 상태 검사 설정하기

 

ELB의 부가 기능으로 상태 검사(= Health Check, 헬스 체크) 기능이 있다. 이 기능은 굉장히 중요한 기능 중 하나이므로 확실하게 짚고 넘어가자.

 

실제 ELB로 들어온 요청을 대상 그룹에 있는 여러 EC2 인스턴스로 전달하는 역할을 가진다. 그런데 만약 특정 EC2 인스턴스 내에 있는 서버가 예상치 못한 에러로 고장났다고 가정해보자. 그럼 ELB 입장에서 고장난 서버한테 요청(트래픽)을 전달하는 게 비효율적인 행동이다.

 

이런 상황을 방지하기 위해 ELB는 주기적으로(기본 30초 간격) 대상 그룹에 속해있는 각각의 EC2 인스턴스에 요청을 보내본다. 그 요청에 대한 200번대(HTTP Status Code) 응답이 잘 날라온다면 서버가 정상적으로 잘 작동되고 있다고 판단한다. 만약 요청을 보냈는데 200번대의 응답이 날라오지 않는다면 서버가 고장났다고 판단해서, ELB가 고장났다고 판단한 EC2 인스턴스로는 요청(트래픽)을 보내지 않는다.

 

이러한 작동 과정을 통해 조금 더 효율적인 요청(트래픽)의 분배가 가능해진다.

위에서 설정한 값을 해석해보자면, 대상 그룹의 각각의 EC2 인스턴스에 GET /health(HTTP 프로토콜 활용)으로 요청을 보내게끔 설정한 것이다. 정상적인 헬스 체크 기능을 위해 EC2 인스턴스에서 작동하고 있는 백엔드 서버에 Health Check용 API를 만들어야 한다. 뒤에서 곧 만들 예정이다.

 

 

5) 대상 등록하기

 

 

 

6) ELB 만드는 창으로 돌아와서 대상 그룹(Target Group) 등록하기

 

위 설정을 해석하자면 ELB에 HTTP를 활용해 80번 포트로 들어온 요청(트래픽)을 설정한 대상 그룹으로 전달하겠다는 의미이다.

 

 

7) 로드 밸런서 생성하기

 

나머지 옵션들은 그대로 두고 로드 밸런서를 생성하면 된다.

 

 

 2. Health Check API 추가하기

app.js

const express = require('express');
const app = express();
const port = 80;

app.get('/', (req, res) => {
  res.send(`Hello World!`);
})

// GET /health 요청에 대해 상태코드 200으로 응답하는 API
app.get('/health', (req, res) => {
  res.status(200).send("Success Heatlth Check");
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

 

위의 샘플 프로젝트처럼 ELB의 상태 검사(= Health Check, 헬스 체크)에 응답할 수 있는 API를 추가하자. 그런 뒤에 EC2 인스턴스의 서버를 업데이트 시켜주자.

 

 3. 로드밸런서 주소를 통해 서버 접속해보기