본문 바로가기
aws

AWS API Gateway

by 초특급하품 2020. 5. 2.

lambda나 기타 서비스로 백엔드를 구축을 했으면, 이제 client에게 endpoint를 제공해야 한다. client 대상에 따라 특정 region, cloudfront edge, private VPC 중 한 곳에 생성한다. api gateway를 생성한 후에는 Resources 탭에서 REST API를 구성하고 deploy를 눌러 배포한다.

 

api gateway 역시 serverless로 lambda 같은 serverless로 백엔드를 구축할 때 자주 사용한다.

 

 

Deploy

작성한 API를 stage별로 나눠서 배포한다. stage별로 각 환경에 맞는 변수나 endpoint를 설정할 수 있다. 백엔드로 lambda를 사용하는 경우에는 환경별로 alias를 설정한다.

 

Canary

트래픽을 기존 버전에 비해 새로운 버전으로 몇 %를 보낼지를 설정해서 canary 배포도 가능하다. 

 

Swagger 

API Gateway에서 만든 method, request 등을 swagger 형식으로 export 할 수 있다. 

 

 

인증

IAM Permission

IAM 권한이 있는 주체가 요청을 할 경우 권한 검사를 할 수 있다. Sig v4을 헤더로 보내면 api gateway에서 IAM으로 verify 한다. IAM 기반의 인증 방법이기 때문에 aws 서비스 밖의 클라이언트에 대해서는 적용할 수 없다.

 

Lambda Authorizer

api gateway의 Authorizer로 lambda를 등록할 수 있다. api별로 authorizer를 지정할 수 있고, 직접 lambda를 만들 수 있는 만큼 OAuth, SAML, 3rd party 인증 등을 할 수 있다. 요청에 따라 token 기반, request 기반 두 가지로 분류된다.

Authorizer로 실행된 lambda는 token을 검증하고 IAM policy와 priciplaId를 반환함으로써 허용(allow)할지 거부(deny)할지 제어한다.

결괏값은 캐시 되어 불필요한 lambda 호출을 막아주고 최소한의 가격 방어도 해준다.

 

Cognito User Pools

클라이언트가 cognito에서 얻어온 token을 Authorization header로 요청하면, api gateway에서 cognito로 token을 verify 한다.

IAM Policy를 확인할 수 있는 위 두 개의 인증 방법과는 달리 authentication만 가능하다. (authorization은 백엔드에서 처리)

 

 

CORS

다른 도메인으로부터 요청을 처리하기 위해 OPTION preflight를 활성화시켜준다.

 

 

Monitoring

CloudWatch로 에러나 access log, request/response log 등을 설정할 수 있다.

특히 serverless로 인프라가 갖춰져 있기 때문에 x-ray를 daemon 걱정 없이 쉽게 사용할 수 있다. x-ray는 lambda와도 죽이 잘 맞기 때문에 이런 설정만으로도 훌륭한 tracing 환경을 만들 수 있다.

 

 

Limit

외부에서 호출하는 API call을 제한하기 위해 토큰 버킷 알고리즘을 사용한다.

 

Rate: 1초 동안 버킷에 토큰이 채워지는 속도

Burst: 최대 버킷 크기

버킷이 가득 차 있으면 버킷 크기만큼 동시에 처리할 수 있다. 처리하는 만큼 토큰을 사용해서 버킷은 줄어들고, rate의 속도로 다시 토큰을 채운다.

 

 

Mappng Template

클라이언트의 요청이 api gateway를 통과한 이후 백엔드 사이의 요청/응답에 대해 조작할 수 있다. parameter, body, header, response 등을 필터링하거나 변경, 추가할 수 있다. 조작은 VTL(Velocity Template Language) 언어를 사용한다.

 

 

Cache

백엔드로 요청을 보내기 전에 cache를 추가한다. 당연히 stage별로 구분되고, method별로 적용할 수 있다.

'aws' 카테고리의 다른 글

AWS fargate 사용법  (0) 2020.05.12
AWS X-Ray  (0) 2020.05.05
AWS Lambda  (0) 2020.04.27
AWS DynamoDB  (0) 2020.04.26
AWS ECS dynamic port mapping  (0) 2020.04.22

댓글