ALLSSU

Amazon API Gateway 프라이빗 통합(Amazon VPC 리소스 연결)

VPC에서만 API Gateway를 통신하고, API Gateway에서 VPC를 통신하는 방법.

2022년 8월 8일 월 21:40

architecture

👆VPC 내부에 있는 EKS에서 API Gateway를 호출하고, API Gateway에서 VPC Link와 연결된 NLB를 통해서 EKS의 Ingress(ALB)를 통신하는 그림

Amazon API Gateway는 AWS에서 관리하는 퍼블릭 네트워크 영역에 생성된다. 우리가 관리하는 VPC(Virtual Private Network) 내부에서만 API Gateway를 호출하거나, API Gateway에서 VPC 리소스로 네트워킹을 하기 위해서는 다음과 같은 작업이 필요하다.

API Gateway Private API (VPC → API Gateway)

API Gateway의 엔드포인트 유형은 세가지가 있는데, Amazon VPC에서만 호출할 수 있는 API Gateway는 VPC 엔드포인트가 포함된 Private API를 통해서 만들 수 있다. Private API 엔드포인트는 API Gateway REST API만 선택 가능하므로, 현재까지는 HTTP API에서 VPC → API Gateway 네트워킹을 하는 것은 불가능하다.

REST API와 HTTP API 중에서 선택

Private API 생성

Private API를 만들기 위한 사전조건으로, API Gateway 통합을 위한 VPC 엔드포인트(execute-api)를 생성해야한다.

VPC 엔드포인트가 생성되었다면, API Gateway를 생성할 때 엔드포인트 유형을 Private으로 생성하고 VPC 엔드포인트를 연결하면 된다. 이렇게 하면 엔드포인트를 연결한 VPC에서만 API Gateway와 통신할 수 있다.

여러개의 VPC에서 각각 엔드포인트를 만들고 하나의 API Gateway(Private API)에서 엔드포인트들과 연결하면, 여러 VPC에서 사용하는 API Gateway도 만들 수 있다.

API Gateway VPC Link (API Gateway → VPC)

API Gateway에서 VPC 내부 리소스를 통신하려면 NLB와 VPC Link를 만들고 내부 리소스(ALB 등)와 연결하면 된다.

VPC Link 생성

VPC Link는 VPC당 하나만 생성한다. VPC Link는 AWS Account 하나당 5개까지만 생성 가능한데, AWS Account당 VPC 생성한도도 5개다. VPC 한개 당 VPC Link는 하나만 생성한 후에 VPC Link를 사용하고 싶은 API Gateway의 라우팅에 연결해주면 된다.

VPC Link(NLB)에서 VPC 리소스(ALB) 연결

API Gateway의 REST API 기준으로, VPC Link를 사용하기 위해서는 NLB(Network Load Balancer) 한개가 필수로 있어야 한다. NLB는 TCP 통신을 하기 때문에, 리스너에서 프로토콜과 포트번호를 지정해서 VPC 내부 리소스와 연결해야한다. NLB에서 VPC 리소스를 연결 할 때는 대상 그룹 (Target Group)을 통해서 인스턴스를 지정하거나 IP주소를 연결하거나, Lambda 함수를 연결할 수 있는데, 2021년 09월에 ALB를 대상으로 지정할 수 있는 옵션이 출시되었다. API Gateway VPC Link를 포함한 Private Link들을 위해서 만들어진 기능으로, API Gateway에서는 NLB를 통해 ALB만 연결하면 되므로 VPC 리소스들과 연결하기가 무척 편해졌다.

VPC 내부 리소스들은 컴퓨팅 서버 (EC2, Fargate)의 서비스 트래픽 노출을 위해 인그레스(Ingress)나 Load Balancer 등을 사용하게 된다. EC2 인스턴스를 직접 생성하거나 Elastic Beanstalk과 같은 리소스들을 이용한다면 ALB를 생성해서 트래픽을 로드밸런싱 하면 되고, EKS를 사용하고 있다면 AWS Load Balancer Controller을 통해서 ALB를 인그레스로 사용할 수 있다. 결론적으로, ALB를 사용해서 VPC Link(NLB)에서 ALB로 통신하게 되면 VPC를 쉽게 연결 할 수 있게 된다 (API Gateway → VPC Link → NLB Listener → Target Group → Internal ALB)

API Gateway에서 VPC 링크 사용하기

자습서: API Gateway 프라이빗 통합으로 REST API 빌드

API Gateway에서 리소스별로 메소드 통합 유형으로 VPC링크를 지정하고, 엔드포인트 URL에 NLB의 포트가 포함된 엔드포인트(ex. http://nlb주소:8000)를 입력한다. API Gateway에서 연결하는 비즈니스 서비스마다 리소스 매핑을 다시 할 필요가 없다면, VPC 링크에서 Proxy 통합으로 지정하면 된다. 이렇게 하면 하나의 리소스로 하나의 서비스와 연결이 가능해진다.

API Gateway VPC Link의 관리

서비스 중인 ALB를 API Gateway와 연결한다고 가정했을 때, 기존 ALB에서 TLS를 사용하고 있었다면 TLS를 사용할 필요가 없이(도메인 관리도 필요 없이) API Gateway에서 NLB(VPC Link)를 통해 대상(Target)만 관리해주면 된다. 이 때, NLB의 Port마다 서비스의 ALB를 매핑해줘야 되는 약간의 불편함이 생긴다. 예를 들면 MSA1 그룹은 81XX Port, MSA2 그룹은 82XX Port와 같은 구분으로, 많은 서비스를 운영하기 위해서는 포트단위로 서비스 영역 구분이 필요할 것 같다.

Reference

Understanding VPC links in Amazon API Gateway private integrations

Amazon API Gateway 기반 VPC Link 활용 방법