Lambda 서비스에 Elastic IP 연결하기

tre2man
roubit.me
Published in
3 min readAug 7, 2022

현재 진행중인 프로젝트에서 SMS 서비스를 추가하는 중입니다. 저희는 ‘알리고’ 라는 서비스를 이용하려고 하는데, 메시지를 보내기 위해서는 특정 IP를 화이트리스트에 추가해서 사용하는 방식이였습니다. 하지만 아마존 서비스는 Elastic IP를 연결하지 않으면 outbound IP는 항상 다르다는 문제가 있습니다. 😢 그래서 이 문제를 해결하기 위한 구상을 해 보았습니다.

서버 구상

현재 서버는 Elastic Beanstalk 기반으로 운영되고, 배포 시에는 새로운 인스턴스를 배치함으로서 배포할 때 마다 아이피 주소가 달라질 수 밖에 없습니다. 그래서 생각한 방법이 2가지가 있습니다.

  1. Elastic IP와 ec2 인스턴스를 연결하여 배포
  2. 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는 항상 고정이 됩니다.

구상 순서는 다음과 같습니다.

  1. VPC를 제작합니다.
  2. 인터넷 게이트웨이를 새로 생성 후 연결합니다.
  3. 프라이빗 서브넷과 퍼블릭 서브넷을 생성합니다. 여기서 NAME 태그로 구분하면 나중에 볼때 편합니다.
  4. NAT Gateway를 생성합니다. 퍼블릭 서브넷에 연결해 주고, Elastic IP를 할당합니다.
  5. 라우팅 테이블이 위 그림과 같이 필요합니다. 퍼블릭 서브넷은 0.0.0.0/0 -> 인터넷 게이트웨이, 프라이빗 서브넷은 0.0.0.0/0 -> NAT Gateway와 연결합니다.
  6. 람다 함수와 프라이빗 서브넷을 연결합니다. 저의 경우에는 serverless.yml 에 모든 설정을 담아 두었습니다.

비용

비용은 NAT 게이트웨이에 대한 비용이 추가됩니다. (람다 호출 횟수 제외) 작성일 기준 시간당 0.059달러가 들어갑니다. 그리고 Elastic IP에 대한 추가 비용이 있다면, 이 또한 과금됩니다.

해당 글의 원문은 아래 링크에 있습니다.

--

--