아래 포스팅에서 이어지는 글입니다.
[AWS] 3-Tier-Architecture 구축 #2 - VPC
아래 포스팅에서 이어지는 글입니다. [AWS] 3-Tier-Architecture 구축 #1 - 설계 Django로 만든 프로젝트를 AWS에서 3 Tier Architecture로 구현하는 실습을 해보려고 한다. 먼저 3 Tier Architecture에 대해 알아보자.
jjung0326.tistory.com
이번 포스팅에서는 AWS NAT Gateway를 어떻게 연결했는지 살펴보려고 한다.
그런데 AWS NAT Gateway 서비스는 생성만 해도 시간당 0.059USD의 비용이 부과되고, 데이터 처리 시 GB당 0.059USD가 추가로 부과되는 (학생이 쓰기엔 아주) 비싼 상품이다. 허허
다행인건 NAT Gateway 서비스 대신, EC2 인스턴스를 사용해 NAT Gateway 역할을 하도록 만들어줄 수 있다고 한다 (이하 NAT Instance).
NAT Instance를 사용하면 EC2 인스턴스에 대한 비용만 내면 되기 때문에 비용을 1/3 수준으로 절감할 수 있고, 프리티어 요금제를 쓴다면 무료로도 이용할 수 있게 된다!
먼저 NAT Gateway를 생성하는 방법을 알아보고, NAT Instance를 만드는 방법도 밑에 같이 포스팅해보겠다.
AWS NAT Gateway 생성 해보기
'VPC > NAT 게이트웨이'에서 NAT 게이트웨이를 생성해줄 수 있다.
- NAT Gateway에 EIP를 연결하고 public subnet에 생성해준다.
- '연결 유형'을 프라이빗으로 하면 외부와 통신이 안되기 때문에 퍼블릭으로 설정해주어야 한다.
NAT Routing Table 설정
NAT Gateway에 대한 Routing Table을 설정해주어야한다.
먼저 nat-table이라는 이름을 가지는 새 라우팅 테이블을 생성해주자.
생성된 Routing Table에 전체 IP(0.0.0.0/0)에 대해 NAT Gateway를 타겟하도록 설정해준다.
해당 Routing Table에 내부 private subnet들을 모두 연결해준다.
이렇게 NAT Gateway 생성을 완료해보았다.
하지만 처음에서 얘기한대로 NAT Gateway를 사용하는 대신 비용을 절감하기 위해 NAT Instance를 사용해보고자 한다.
NAT Gateway 대신 NAT Instance 구축하기
1. NAT Gateway 삭제
먼저 위에서 생성했던 NAT Gateway를 삭제한다.
이때 NAT Gateway를 생성할 때 연결했던 EIP도 릴리즈해주어야 한다.
(연결된 인스턴스가 중지상태인 EIP, 혹은 인스턴스에 연결되어있지 않은 EIP는 비용이 청구될 수 있다!!)
2. NAT 인스턴스 만들기
EC2 인스턴스를 새로 생성해준다. 나는 public-nat-instance라는 이름으로 생성해주었다.
이때 NAT용 인스턴스를 만들기 위해선 반드시 NAT용 AMI(Amazon Machine Image)을 적용해주어야 한다.
나는 첫번째로 나오는 이미지를 선택해주었다.
네트워크 설정에서 서브넷은 반드시 IGW가 연결되어있는 퍼블릭 서브넷으로 설정해주어야한다!
보안그룹은 위와 같이 추가로 열어주었다.
설정이 끝나면 인스턴스를 생성해주면 된다!
3. NAT 인스턴스의 소스/대상 확인변경 끄기
NAT 인스턴스는 소스 또는 대상이 그 자체가 아닐 때 트래픽을 송수신할 수 있어야하기 때문에 소스/대상 확인변경 설정을 Disabled로 변경해야한다.
4. NAT 인스턴스에 EIP 주소 할당
NAT 인스턴스에 EIP 주소를 할당하여 고정 IP 주소를 할당한다.
(EIP를 부여하지 않으면 인스턴스를 재부팅 할때 마다 IP 주소가 변경된다.)
아까 생성해준 public-nat-instance라는 이름의 태그를 가지는 EIP를 생성해준다.
생성한 EIP를 public-nat-instance 인스턴스에 연결해주면 NAT 인스턴스에 EIP가 부여된다.
5. Private 서브넷 Routing Table 설정
이제 0.0.0.0/0으로 향하는 트래픽을 NAT Instance를 통해 들어올 수 있도록 Routing Table에 추가해주면 된다.
nat-instance-routing이라는 이름의 라우팅테이블을 생성해준다.
'서브넷연결 > 서브넷 연결 편집'에서 생성한 라우팅 테이블에 private에 해당하는 subnet들을 연결해준다.
'라우팅 > 라우팅 편집'에서 아까 생성한 public-nat-instance를 대상에 추가해준다.
이렇게 NAT Gateway를 사용하는 대신 NAT Instance를 생성하는 것 까지 알아보았다.
하지만 NAT 인스턴스가 항상 좋은것은 아니다.
NAT Instance는 고가용성 측면에서 부족하다. Instance에 장애가 나는 경우, private subnet들의 인터넷 접은이 모두 막히게 되는 문제가 발생할 수 있다. 또한 EC2 인스턴스를 사용하기 때문에 해당 단일 지점에서 병목현상이 발생할 수도 있다.
물론 EC2 인스턴스이기 때문에 Autoscaling등을 적용해 확장을 해주면 되지만, 이 또한 지속적 관리가 필요하다.
나는 개인 토이프로젝트에 적용하는 용도로 쓰기 때문에 NAT Instance를 사용해도 충분하다고 판단했지만, 실사용시에는 다방면에서 고려해볼 필요가 있을 것 같다.
AWS 공식 홈페이지에 NAT Gateway와 NAT Instance의 기능비교한 표를 참고하자. (https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-nat-comparison.html)
'AWS' 카테고리의 다른 글
[AWS] 서버리스로 서버없이 간단한 웹 애플리케이션 만들기 (0) | 2023.06.26 |
---|---|
[AWS] 3-Tier-Architecture 구축 #4 - Bastion Host와 WEB 계층 (0) | 2023.06.15 |
[AWS] 3-Tier-Architecture 구축 #2 - VPC (0) | 2023.06.14 |
[AWS] 3-Tier-Architecture 구축 #1 - 설계 (0) | 2023.06.14 |
[AWS] Windows에서 EC2 인스턴스 접속하기 (0) | 2023.06.13 |