Example : Building a Serverless API
- Lambda 함수에서 API의 데이터베이스로 DynamoDB를 사용할 수 있으며 테이블을 생성, 읽기, 업데이트 삭제할 수 있다.
- 클라이언트도 이 Lambda 함수를 지연 호출(Invoke)할 수 있게 하려면 클라이언트에게 IAM 권한이 있어야 한다.
- 클라이언트와 Lambda 함수 사이에 애플리케이션 로드 밸런서를 배치하면 Lambda 함수가 HTTP 엔드포인트에 노출된다.
- API Gateway를 사용하는 방법도 있다.
- AWS의 서버리스 서비스로 REST API를 생성할 수 있으므로 클라이언트가 퍼블릭 액세스 할 수 있다.
- API Gateway에 클라이언트가 직접 소통하며 다양한 작업을 할 수 있고 Lambda 함수에 요청을 프록시 한다. - API Gateway를 사용하는 이유는 HTTP 엔드포인트뿐만 아니라 인증부터 사용량 계획, 개발 단계 등의 기능을 제공하기 때문이다.
AWS API Gateway
- API Gateway는 Lambda와 통합하면 완전 서버리스 애플리케이션이 구축되므로 인프라 관리가 필요 없다.
- WebSocket 프로토콜을 지원하므로 API Gateway로 두 가지 방법의 실시간 스트리밍이 가능하다.
- API 버저닝을 핸들링하므로 버전 1, 2, 3이 생겨도 클라이언트 연결이 끊기지 않는다.
- dev, test, prod 등 여러 환경을 핸들링 - 보안에도 활용할 수 있다.
- 인증, 권한 부여 등 수많은 보안 기능을 API Gateway에 활성화 할 수 있다. - API 키를 생성할 수 있고, API Gateway에 클라이언트 요청이 과도할 때 요청을 스로틀링할 수 있다.
- Swagger나 Open API 3.0과 같은 공통 표준을 사용하여 신속히 API를 정의하여 가져올 수 있다.
- Swagger나 Open API로 내보낼 수도 있다. - API Gateway 수준에서 요청과 응답을 변형하거나 유효성을 검사해 올바른 호출이 실행되게 할 수 있다.
- SDK나 API 스펙을 생성할 수 있다.
- API 응답을 캐시할 수도 있다.
API Gateway - Integrations High Level
(API Gateway는 어떤 통합을 지원할까?)
- Lambda 함수
- Lambda 함수를 지연 호출한다.
- Lambda 함수를 사용하는 REST API를 완전 서버리스 애플리케이션에 노출시키는 가장 일반적이고 간단한 방법이다. - HTTP
- 백엔드의 HTTP의 엔드포인트를 노출시킬 수 있다.
- 온프레미스에 HTTP API가 있거나 클라우드 환경에 애플리케이션 로드 밸런서가 있을 때 API Gateway를 활용하면 속도 제한 기능 캐싱, 사용자 인증, API 키 등의 기능을 추가할 수 있다.
- HTTP 엔드포인트에서 API Gateway 계층을 활용하는 것이다. - AWS Service
- 어떤 AWS API라도 노출시킬 수 있다.
- 단계 함수 워크플로우를 시작할 수 있고, API Gateway에서 직접 SQS에 메시지를 게시할 수도 있다.
- 인증을 추가하거나 API를 퍼블릭으로 배포하거나 특정 AWS 서비스에 속도 제한을 추가하기 위해 통합하는 것이다.
API Gateway - AWS Service Integration Kinesis Data Streams example
(AWS 서비스에 API Gateway를 사용하는 예시)
- Kinesis Data Stream에 사용자가 데이터를 전송할 수는 있지만 AWS 자격 증명은 가질 수 없도록 보안 설정을 할 수 있다.
- Kinesis Data Stream과 클라이언트 사이에 API Gateway를 두는 것이다.
- 클라이언트가 API Gateway로 HTTP 요청을 보내면 Kinesis Data Stream에 전송하는 메시지로 구성해 전송한다.
- 위의 예시를 보시다시피 따로 서버를 관리할 필요가 없다.
- Kinesis Data Stream에서 Kinesis Data Firehose로 레코드를 전송하고 최종적으로 JSON 형식으로 Amazon S3 버킷에 저장한다.
- API Gateway를 통해 AWS 서비스를 외부에 노출시키는 것이다.
API Gateway - Endpoint Types
- API Gateway 배포 방법은 세 가지 이며, 이를 엔드포인트 유형이라고 한다.
- Edge-Optimized (default)
- 글로벌 클라이언트 용이다.
- 전 세계 누구나 API Gateway에 액세스 할 수 있다.
- 모든 요청이 CloudFront 엣지 로케이션을 통해 라우팅되므로 지연 시간이 개선된다. - Regional
- API Gateway는 생성된 리전에 위치하지만 모든 CloudFront 엣지 로케이션에서 액세스 될 수 있다.
- CloudFront 엣지 로케이션을 원하지 않을 때는 리전 배포를 사용한다.
- 모든 사용자는 API Gateway를 생성한 리전과 같은 리전에 있어야 한다. 자체 CloudFront 배포를 생성할 수도 있다.
- 엣지 최적화 배포와 동일한 결과를 내며 캐싱 전략과 CloudFront 설정에 더 많은 권한을 가질 수 있다. - Private
- 프라이빗 API Gateway는 VPC 내에서만 액세스 할 수 있다. (ENI 같은 인터페이스 VPC 엔드포인트를 사용해서)
- API Gateway에 액세스를 정의할 때는 리소스 정책을 사용한다.
API Gateway - Security
- 사용자를 식별하는 방법
- IAM 역할을 사용한다.
: EC2 인스턴스에서 실행되는 내부 애플리케이션에서 유용하다.
: API Gateway의 API에 액세스할 때 IAM 역할을 사용하도록 하는 것이다.
- Cognito를 사용한다.
: 모바일 애플리케이션이나 웹 애플리케이션의 외부 사용자에 대한 보안 조치로 사용한다.
- 사용자 지정 권한 부여자를 사용한다.
: 자체 로직을 실행할 때 사용한다. - 사용자 지정 도메인 이름을 AWS Certificate Manager 즉, ACM과 통합할 수 있다.
- 엣지 최적화 엔드포인트를 사용할 경우 인증서는 us-east-1에 있어야 하고, 리전 엔드포인트를 사용한다면 인증서는 API Gateway 단계와 동일한 리전에 있어야 한다.
- Route 53에 CNAME이나 A-별칭 레코드를 설정해 도메인 및 API Gateway를 가리키도록 해야 한다.
'AWS(Amazon Web Service)' 카테고리의 다른 글
[AWS] 솔루션 설계자 관점의 Serverless - Amazon Cognito (0) | 2024.12.18 |
---|---|
[AWS] 솔루션 설계자 관점의 Serverless - Step Functions (0) | 2024.12.17 |
[AWS] 솔루션 설계자 관점의 Serverless - DynamoDB의 고급기능 (0) | 2024.12.15 |
[AWS] 솔루션 설계자 관점의 Serverless - DynamoDB (0) | 2024.12.14 |
[AWS] 솔루션 설계자 관점의 Serverless - RDS 람다 호출 및 이벤트 알림 (0) | 2024.12.13 |