API Gateway 의 분기 처리

제공

개요


POC 단계를 지나, Alpha or Beta 서비스 준비를 진행하며 프로젝트에도 개발과 운영에 대해 환경 분리를 해야하는 경우가 생김.

현 프로젝트는 백엔드 처리를 대부분 서버리스 서비스인 Lambda 와 API Gateway 로 처리하고 있는 상태이므로, 기존과 같이 서브넷으로 분리하는 방식이 아닌, Lambda 의 Versioning 과 Alias 기능을 활용하여 두 Phase 에 대한 분기를 진행하려 함.

그리고 API Gateway 에서도 Lambda 의 Alias 를 변수로 지정할 수 있는 기능이 있어 이를 활용할 예정임.

아래의 문서에서는 실제 적용에 앞서, 해당 기능을 테스트하며 발생한 이슈와 진행 과정을 정리하였음.

사전 설명


Stage Variables

https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/http-api-stages.stage-variables.html

API Gateway 에는 스테이지 변수라는 기능이 있음.

해당 기능은 스테이지에 변수를 지정하면, 통합(integration)에서 해당 변수를 받아 타겟을 지정할 수 있는 기능임.

REST 와 HTTP 모두 동일하게 지원하는 기능이며, REST 에서는 네이티브하게 동작하지만, HTTP 에서는 약간의 최적화 작업이 필요함.

API Stage

API Gateway 에서는 스테이지를 설정하면 스테이지별로 url 이 별도로 주어지며, 이 url 을 통해 스테이지를 구분하도록 되어있음.

HTTP API 는 처음 생성된 default 스테이지에 대해서는 루트 경로를 사용하지만, 이하 생성되는 스테이지들은 스테이지 명이 도메인 뒤에 경로로서 붙게됨.

하지만 HTTP API 는 내부 처리 없이 다이렉트로 값을 전달하는 최소의 기능만 하는 API 이므로, 그냥 사용하게 될 경우 여러 문제들이 발생하게 됨.

보통 API 에 지정한 routes 들은 실제 요청을 받는 경로로 생성하며, 편의상 phase 나 alias 에 따른 경로를 모두 생성하지 않을 수 있음.

일반적인 의도에서의 API Gateway 와 Lambda 의 연결은 서비스 간의 통합이지 웹서버 간의 요청을 주고 받는 관계라고 생각하지 않기 때문일 수 있음.

그런데 HTTP API 는 이를 직관적으로 분기해주는 것이 아닌, 전처리 없이 그대로 경로를 보내게 되므로, 아래와 같이 도메인 이하의 모든 경로로 요청을 하게 됨.

따라서 이를 해결하기 위해 몇가지 작업들이 추가되어야 함.

작업 과정


API Gateway

먼저 스테이지를 추가해준다. 그리고 Stage variables 에 각각 Key 와 Value 를 지정해줌.

아래와 같이 통합을 새로 생성하여 Lambda Function 타겟에 ${stageVariables.파라미터명} 을 추가한다.

그리고 생성된 통합에서 아래와 같이 Parameter mapping 을 하나 추가해준다.

그리고 해당 통합을 routes 에 연결해준다.

그리고 우측 정보화면을 보면, Invoke permissions 라는 항 목이 있는데, 기본적으로 API Gateway 에 Lambda 를 통합으로 연결하면 permission 이 자동으로 추가되지만, 위와 같이 스테이지 변수로 추가한 경우에는 해당 함수 바로 찾을 수가 없으므로, 자동 추가가 되지 않는다.

따라서 해당 permission 을 수동으로 추가해줘야 Lambda 실행 권한을 얻을 수 있음.

해당 정책은 CLI 로 추가해도 되고, AWS 웹콘솔에서 직접 추가해줘도 됨.

Function Name 항목의 변수는 각 alias 를 수동으로 지정해줘야 하고, Source Arn 의 경우도 상황에 맞게  route 를 변경해줘야 함.

Lambda

Lambda Permission 설정의 경우, AWS 웹콘솔을 예시로 들면 아래와 같음.

먼저 추가하려는 alias 로 이동해서, Permissions 항목에서 Add permissions 를 실행함.

여기서 앞서 얻은 permission 정보를 아래와 같이 입력해줌.

Source Arn 의 경우, 보안 상 큰 문제가 없다면 와일드카드로 추가하는 것이 편함. 경로는 반드시 ‘/’ 로 끝나지 않도록 작성함.

문제없이 추가되었다면, 아래와 같이 트리거가 추가됨. 이 작업을 연결된 Alias 에 모두 수동으로 진행해줘야 함.


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다