Example: Building a Serverless API
- 람다 함수는 DynamoDB를 API용 데이터베이스로 사용할 수 있으므로 테이블을 생성하고 읽거나 업데이트, 삭제 가능
클라이언트가 람다 함수를 불러오길 바랄 때는 3가지 방법이 존재
1) 클라이언트가 람다 함수를 직접 실행 : IAM 권한이 필요
2) 애플리케이션 로드 밸런서를 클라이언트와 람다 사이에 두고 람다 함수를 HTTP 엔드 포인트로 노출
3) API Gateway : AWS에서 제공하는 서버리스 서비스로 클라이언트가 접근 가능한 공용 REST API를 생성해 줌
- API Gateway는 람다 함수에 오는 요청을 프록시 해주며 HTTP 엔드 포인트보다 많은 기능(인증, 사용량 설정, 개발 등)을 제공
AWS API Gateway
- Lambda와 통합이 가능
- 완전한 서버리스 애플리케이션을 제공하므로 인프라를 관리할 필요가 없음
- WebSocket 프로토콜도 지원하기 때문에 두 가지 방법으로 실시간 스트리밍이 가능
- API Gateway가 API 버전 관리를 맡으므로 클라이언트를 나누지 않고 버전 1, 2, 3으로 이동할 수 있음
- 여러 환경을 다룰 수 있으며 개발 및 테스트, 운영 환경이 포함됨
- 보안 문제가 있기 때문에 보안 활성(인증 및 권한 부여 등)을 위한 여러 수단을 제공
- API를 생성하거나 클라이언트가 API Gateway에 너무 많은 요청을 보낼 때 조절 가능
- Swagger, Open API 3.0 등 일반적인 스탠다드를 이용해 정의된 API를 빠르게 가져오고 내보낼 수 있음
- 호출이 맞는지 확인하려면 API Gateway에서 요청과 응답을 변형하거나 유효화할 수 있음
- SDK와 API 사양을 생성
- API 응답을 캐시에 저장
API Gateway – Integrations High Level
- Lambda Function
API Gateway는 Lambda와 통합이 가능하며 이는 람다 함수가 지원하는 REST API를 노출하는 가장 간단한 방법으로
완전한 서버리스 애플리케이션을 제공 - HTTP
백엔드의 HTTP 엔드 포인트도 노출할 수 있어 이를 통해 비율 제한, 캐싱, 사용자 인증, API 키를 이용할 수 잇음
예) 온프레미스 HTTP API, 클라우드 환경에 있는 애플리케이션 로드 밸런서 등 - AWS 서비스
API Gateway로 어떤 AWS API든 노출 가능하며 인증을 추가하고 API를 공용으로 배포하거나 서비스 상 비율 제어를 위해 이용
예) 단계 함수 워크플로우를 시작, API Gateway API에서 SQS에 메시지를 바로 게시
API Gateway - Endpoint Types
- API Gateway 배포 방법인 엔드 포인트 타입은 세 가지
- 엣지 최적화 (Edge-Optimized, default)
기본 타입으로 글로벌 클라이언트를 위한 것으로 API Gateway는 전세계에서 접근 가능하고
효율성을 위해 모든 CloudFront 엣지 로케이션에서 요청 라우팅으로 지연 시간을 개선
API Gateway는 처음 생성된 리전에 있지만 CloudFormation 엣지 로케이션에서 효율적으로 접근 가능 - 리전 배포 (Regional)
모든 사용자가 API Gateway를 생성한 리전에 있다고 예상되면 직접 배포 플랫폼을 마련하여
엣지 최적화 배포와 같은 결과를 얻어 캐싱 전략과 CloudFront 설정을 더 잘 제어할 수 있음 - 사설 API Gateway (Private)
공용이 아니기 때문에 개인 API Gateway는 VPC를 통해서만 액세스가 되고 인터페이스 VPC 엔드 포인트를 ENI에 사용
또한 리소스 정책을 이용해 API Gateway 액세스를 정의
<API Gateway 기초 실습>
- API Gateway 콘솔 개요
다양한 스케일로 API를 생성하고 유지하며 서비리스를 제공할 수 있고
HTTP API를 만들어서 Lambda 및 HTTP 백엔드와 함께 사용할 수 있음
WebSocket API를 만들어서 Lambda, HTTP, AWS 서비스와 쓸 수 있어 채팅 애플리케이션이나 대시 보드 같은 실시간에 사용
REST API로 API 관리 기능을 더 잘 제어할 수 있으며 사설 REST API는 VPC 내에서 개인만 사용 가능
- REST API 생성
새 API를 생성을 클릭하고 이름은 MyFirstAPI로 생성하며
엔드 포인트 타입으로는 CloudFront 엣지 네트워크를 사용하지 않고 리전에 배포되려면 Regional을 선택하고
CloudFront 엣지 네트워크를 사용하려면 Edge Optimized를 클릭하고 Private는 VPC 내부를 의미함
이번 실습에서는 Regional을 선택하여 설정하고 생성하여 첫 API를 생성
- REST API 생성 확인 및 첫 번째 메소드 생성 완료
메소드를 생성하기 위해서는 Actions에서 Create Method를 눌러주고 GET으로 설정해 리소스 루트에 GET 생성
메소드에는 여러 옵션이 존재
통합 유형을 통해 원하는 통합 유형을 람다 함수, HTTP, Mock 서비스 등을 고를 수 있고 어떤 리전이나 서비스에서도 가능하여
AWS 서비스를 API나 VPC 링크로 노출할 수 있으며 VPC의 경우 VPC 내에 VPC 링크가 있을 때 사용
람다 프록시 통합 옵션을 설정할 경우 API Gateway에서 발생하는 모든 이벤트를 볼 수 있으므로 이를 사용
람다 리전은 eu-west-2로 한 후 API Gateway에 람다 함수를 생성한 후 설정하도록 함
이를 위해 람다 함수를 생성하도록 하기 위해 lambda-api-gateway-root-get이라는 이름으로 미리 만들어 놓은 코드로 생성
그리고 확인을 위해 테스트를 하면 상태 코드 200과 본문, 헤더가 잘 나타나는 것을 볼 수 있음
이후 람다 프록시 통합 옵션에서 방금 생성한 람다 함수를 클릭한 후 시간 초과를 최대 15분까지 둘 수 있지만
API Gateway는 29초가 지나면 자동으로 시간 초과가 되므로 이를 비활성화도록 한 후 저장 후 람다 함수를 호출하는 권한 부여
생성한 메소드를 보게 되면 클라이언트가 GET을 하면 메소드 요청이 생성되고 람다 프록시에 통합 요청이 보내짐
이후 람다 함수로 보내지게 되고 프록시 모드에서는 요청이나 응답을 변형할 수 없기 때문에 통합 응답을 표시되지 않음
마지막으로는 메소드 응답이 클라이언트에게 다시 보내지게 됨
- REST API 첫 번째 메소드 테스트
테스트 버튼을 누르면 람다로부터 "Hello from Lambda!"가 뜨게 됨
또한 위에서 생성한 람다 함수는 JSON 문서를 전부 정의해서 상태 코드와 본문, 헤더가 있기 때문에
API Gateway에서는 응답 본문이 람다 JSON 문서에서 가져온 것이므로 헤더는 응답 헤더로 표시되며 콘텐츠 타입이 JSON
또한 상단에서 API Gateway 로그도 확인할 수 있음
- API Gateway에서 요청을 기록
이벤트를 보여주기 위해 람다 함수에서 코드를 바꿔서 이벤트를 출력하도록 수정
이후 API Gateway를 테스트하고 다시 람다 함수의 CloudWatch에 있는 로그를 확인하고 모니터링하면
방금 생성된 두 번째 로그 스트림을 확인할 수 있고 이를 누르면 로깅 문장에 보이게 되어
API Gateway에서 받은 모든 요청이 나오고 그 밖에도 많은 정보(리소스, 경로, GET에 해당하는 HDP 메소드 등)를 얻을 수 있음
이를 통해 람다 함수가 올바른 응답을 도출하기 위해 많은 정보가 활용될 수 있음을 알 수 있음
- REST API 두 번째 메소드 생성
Actions에서 Create Resources를 누르고 houses라고 이름을 붙인 후
lambda-api-gateway-proxy-houses-get 람다 함수를 만들어 위와 동일하게 GET 메소드를 생성
- REST API 두 번째 메소드 테스트
테스트를 해보면 "Hello from my pretty houses!"가 잘 나오는 것을 볼 수 있음
- UI에서 테스트가 아닌 HTTP 엔드 포인트를 사용해서 액세스
Actions에서 API를 배포를 누르고 새로운 단계를 dev라는 이름으로 생성하면 배포가 되어 사용 가능한 호출 URL이 생기게 됨
이 URL을 눌러서 열면 "Hello from Lambda!"가 표시되며 끝에 /houses를 붙이면 "Hello from my pretty houses!"가 표시
그리고 만약 틀린 내용을 덧붙이게 되면 오류 메시지가 표시됨
'Cloud > AWS' 카테고리의 다른 글
[SAA] Cognito 개요 (0) | 2022.04.14 |
---|---|
[SAA] API Gateway 보안 (0) | 2022.04.13 |
[SAA] DynamoDB 고급 기능 (0) | 2022.04.13 |
[SAA] DynamoDB 개요 (0) | 2022.04.13 |
[SAA] Lambda@엣지 (0) | 2022.04.13 |