AWS API Gateway
- 클라이언트가 액세스 가능하도록 공개적인 REST API를 만들 수 있는 서버리스 서비스
- 람다 + 게이트웨이 = 완전관리형 서버리스
- 실시간 스트리밍 - 웹소켓 프로토콜 지원으로 실시간 스트리밍 가능
- 버저닝 - API 버저닝 가능 (v1, v2.. )
- 다양한 환경 지원 (dev, test, prod..)
- 인증, 권한 부여 목적으로 보안 처리 가능
- API 키를 통해 게이트웨이의 요청 수에 따라 쓰로틀링 가능
- Swagger, Open API 3.0등 표준을 통해 API 정의 가능
- API 게이트웨이 수준에서 요청/응답을 변환 및 무효화 통한 유효성 검사 가능
- SDK, API 규격 생성 가능
- API 응답 캐싱 가능
- 람다와 통합
- 람다 함수 실행
- 람다를 REST API로 쉽게 내보낼 수 있음
- HTTP와 통합
- HTTP 엔드포인트를 내보낼 수 있음
- 온프레미스 HTTP API, ALB를 API로 내보낼 수 있음
- 용도 : API 게이트웨이를 사용한 속도제한, 캐싱, 사용자인증, API 키를 활용한 쓰로틀링 등
- AWS 서비스와 통합
- ex 1) API 게이트웨이에서 바로 SQS에 메시지 전송
- ex 2) API 게이트웨이에서 바로 Kinesis Data Streams로 요청 전송 -> Kinesis Data Firehose -> S3 버킷
AWS API Gateway - 배포방식 (엔드포인트 유형)
- Edge-Optimized (default)
- 글로벌 클라이언트에 이용
- 모든 CloudFront Edge Location을 통해 요청을 라우팅하므로 지연시간 짧음
- API 게이트웨이는 생성한 한 리전에만 남으나 모든 CloudFront Edge Location에서 액세스 가능
- Regional
- CloudFront Edge Location 사용 X
- 모든 사용자가 API 게이트웨이를 만든 리전 내에 위치할 것으로 예상할 때 사용
- CloudFront 배포를 자체적으로 만들 수 있음 (Edge-Optimized와 동일한 방식 / 캐싱 전략, 분산 전략 등 더 많은 제어 가능)
- Private
- VPC 내에서만 액세스 가능 (interface VPC endpoint (ENI) 사용)
- 액세스 정의에 리소스 정책 사용 가능
AWS API Gateway - 통합 방식
- MOCK
- 백엔드로 요청을 전송하지 않고 응답이 반환 (mock 데이터)
- 개발 및 테스트 용도
- HTTP / AWS (Lambda & AWS Services)
- 통합 요청 / 응답을 모두 구성하는 방식
- 요청 / 응답 매핑 템플릿을 사용해 데이터 매핑 구성 가능 (쿼리 문자열 매개변수 이름 변경, 본문 콘텐츠 수정, 헤더 추가/수정)
- Velocity Template Language (VTL)을 통해 for 루프, if문 등 처리
- Content-Type은 application/json 또는 application/xml 설정
- Client -> API Gateway -> SQS Queue 처리 시 요청 구성 / SQS 큐가 이해할 수 있도록 API 호출에 대해 변경, 이름변경, 재정렬 수행
- AWS_PROXY (Lambda Proxy)
- 클라이언트의 요청이 람다의 입력이 됨 (람다로 프록싱)
- 요청 / 응답 수정 불가
- 요청 / 응답 로직에 대해 함수만 동작
- HTTP_PROXY
- 요청이 직접 전달 (HTTP 백엔드로 프록싱)
- 백엔드 응답 시 응답을 클라이언트에게 전달
- HTTP 헤더 추가 가능 (ex, API 키 추가)
- ex) Client -> API Gateway -- API Key 추가 --> ALB
Reference