본문 바로가기
개발/AWS

AWS API Gateway 살펴보기(HTTP API, REST API 생성)

by 궁즉변 변즉통 통즉구 2022. 3. 4.
반응형

AWS API Gateway

  • Amazon API Gateway는 규모와 관계없이 REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스로 API의 '관문' 역할
  • API서버와 Client 사이에서 API들을 관리해주는게 API Gateway 
  • API에 대한 단일 진입점으로 사용자 요청을 각 API 서버로 라우팅해주고, API에 대한 로깅, 엑세스 제어, 모니터링, 인증 처리 가능

제공 API 유형

  • HTTP API : API 프록시 기능정도만 필요할 때 적합, 단순/저렴
  • REST API: API 관리 기능, 요청/응답에 대한 제어가 필요할 경우 적합, 복잡/비쌈
  • WebSocket API: 웹소켓 용도

* HTTP API vs REST API 선택:
   https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/http-api-vs-rest.html

 

 

1. Lambda 사용해서 HTTP API 생성하기

- Lambda 메뉴 들어가서 '함수 생성' 클릭

 

- [함수 이름] 간단히 입력 , [런타임]은 Node.js 로 하고 생성

 

- HelloWorld 함수가 기본 작성되어 있고 내용 확인 편의를 위해 body부분만 JSON.stringify(event)로 변경 후 'Test' 클릭해서 테스트만 한번 진행

 

- 테스트 결과 확인하고 람다는 완료

 

- API Gateway 메뉴로 이동해서 [유형선택] HTTP API에서 구축 선택

 

- 통합 생성 및 구성에서 [통합]에는 Lambda하고 위에서 생성한 함수 선택,  [API이름]은 간단히 입력

- 다음 [경로 구성]에서 메소도 GET, [리소스 경로] /hello, [통합 대상]에는 Lambda함수 선택

- 배포 Stage는 기본 $default로 두고 그냥 다음 

- 다음 '검토 및 생성'에서 다음 후 생성 확인

 

- 클릭해서 상세를 보면 하단 [스테이지]에서 '$default' 스테이지의 'URL 호출'에서 URL 확인 가능

- 위의 URL + 위에서 경로로 설정한 "/hello?param1=value1"를 붙여서 호출하면 람다함수 결과 리턴 됨

- (참고)Lambda 메뉴에서 위에서 생성한 함수를 보면 'API 게이트웨어' 트리거 자동 추가되어 있음 확인


2. Lambda 사용해서 REST API 생성하기

- API Gateway 메뉴로 이동해서 [유형선택] REST API에서 구축 선택

 

- 프로토콜 REST, 새 API 선택, API 이름 넣고 우측 하단 '생성' 버튼 클릭

[엔드포인트 유형]
지역: 특정 리전(ap-northeat-2) 안에서 사용
최적화된 에지: CloudFront를 사용 (일반적인 인터넷 상)
프라이빗 - AWS 내 VPC에서만 접근 가능

 

- API 설정화면으로 이동 됨(HTTP API보다 제공 기능이 많아서 그런지 복잡해 보임)

 

- 상단 '[작업] > 리소스 생성' 클릭

 

- hello 로 입력하고 생성

 

- 생성된 리소스(/hello) 선택하고 [작업] > 메서드 생성 클릭

- Get 선택하고, 체크버튼(v) 클릭

- Lambda함수로 설정 선택하고 Lambda함수 이름 입력,  API 파라메타 등을 그대로 Lambda event로 전달하기 위해 [Lambda 프록시 통합 사용] 체크

- 좌측 테스트 클릭

- '테스트' 버튼 클릭해서 호출 테스트하면 결과가 우측에 나옴

- [작업] > API 배포 클릭

- 배포 스테이지에서 "새 스테이지" 선택하고 이름 입력

 

- 상단에 'URL 호출'에 + "/hello" 붙여서 테스트

- 호출 결과 확인

 


3. REST API 파라메터 매핑 테스트

- 우측 [통합 요청] 클릭

 

- [Lambda 프록시 통합 사용] 체크 해제

- 동일한 화면 하단 [매핑 템플릿] 아래와 같이 선택하고, Content-Type은 "application/json" 입력, 우측 템플릿 생성에서는 'Empty' 선택하고 아래와 같이 코드 입력

- API Gatewary호출 시 쿼리 파라메터로 "param1"을 넘기면 데이터를 "myParam"으로 매핑하여 Lambda로 호출하겠다는 의미

#set($inputRoot = $input.path('$'))
{ 
  "myParam": "$input.params('param1')"
}

- [메소드 요청] 클릭

- "param1"이라는 쿼리 파라미터 등록

- API Gateway 테스트 화면에서 [쿼리 문자열] 부분에 "param1=value1" 입력 후 테스트. 우측 결과 Lambda에서 받은 이벤트 내용(응답 본문 body)에 "myParam"으로 value1이 설정된 것 확인 가능

- 다시 배포 후 Postman으로 호출해도 동일한 결과 나옴

 

반응형

댓글