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으로 호출해도 동일한 결과 나옴
'개발 > AWS' 카테고리의 다른 글
AWS Certificate Manager(ACM) 인증서 생성 (2) | 2022.03.08 |
---|---|
RDS Multi AZ 고가용성 구성 테스트 (0) | 2022.03.06 |
AWS CodePipeline 구성(CodeCommit, CodeBuild, CodeDeploy 활용) (0) | 2022.02.28 |
AWS CodeBuild로 빌드하기(SpringBoot, Maven) (0) | 2022.02.26 |
AWS CodeCommit Migration 테스트(from Github) (0) | 2022.02.24 |
댓글