서버 구상
현재 서버는 Elastic Beanstalk 기반으로 운영되고, 배포 시에는 새로운 인스턴스를 배치함으로서 배포할 때 마다 아이피 주소가 달라질 수 밖에 없습니다. 그래서 생각한 방법이 2가지가 있습니다.
- Elastic IP와 ec2 인스턴스를 연결하여 배포
- Lambda와 Elastic IP를 이용하여 배포
둘 다 장단점이 있는 서비스입니다. 제가 중요시했던 항목은 사용해보지 않은 서비스를 경험해 보는 것과 프로덕션 환경에서 사용할 것이기 때문에 안정성이 보장되어 있는 것, 두 가지 였습니다. 1번 환경은 비교적 저렴하게 구성할 수 있으나 안정성이 떨어지고, 2번은 비교적 가격이 있으나 아마존에서 자체 관리하는 서비스이기 때문에 안정성이 비교적 낫다고 판단하여, 2번 스택을 사용하기로 했습니다.
구상도는 VPC를 구성할 때 흔히 사용하는 구조를 참고했습니다.
간단히 용어 정리부터 하겠습니다.
VPC : 가상 사설 네트워크입니다.
Subnet : VPC 내부의 IP주소 묶음 입니다. VPC와 Subnet을 사용하여 서비스들의 그룹을 지정할 수 있습니다.
NAT Gateway : 프라이빗 서브넷에서 외부 인터넷에 접속하고, 외부 인터넷이 프라이빗 서브넷으로 접속하지 못하게 하는 인스턴스 입니다.
저희의 목표는 고정된 IP를 람다에 연결하는 것 이므로, Database servers 대신에 API Gateway를 대체할 것입니다. 또한 NAT Gateway는 인스턴스 기반 서비스이므로, Elastic IP를 연결할 수 있습니다. 그렇게 되면 외부로 접속하는 IP는 항상 고정이 됩니다.
구상 순서는 다음과 같습니다.
- VPC를 제작합니다.
- 인터넷 게이트웨이를 새로 생성 후 연결합니다.
- 프라이빗 서브넷과 퍼블릭 서브넷을 생성합니다. 여기서 NAME 태그로 구분하면 나중에 볼때 편합니다.
- NAT Gateway를 생성합니다. 퍼블릭 서브넷에 연결해 주고, Elastic IP를 할당합니다.
- 라우팅 테이블이 위 그림과 같이 필요합니다. 퍼블릭 서브넷은 0.0.0.0/0 -> 인터넷 게이트웨이, 프라이빗 서브넷은 0.0.0.0/0 -> NAT Gateway와 연결합니다.
- 람다 함수와 프라이빗 서브넷을 연결합니다. 저의 경우에는 serverless.yml 에 모든 설정을 담아 두었습니다.
비용
비용은 NAT 게이트웨이에 대한 비용이 추가됩니다. (람다 호출 횟수 제외) 작성일 기준 시간당 0.059달러가 들어갑니다. 그리고 Elastic IP에 대한 추가 비용이 있다면, 이 또한 과금됩니다.
해당 글의 원문은 아래 링크에 있습니다.