AWS(Amazon Web Service)

[AWS] 솔루션 설계자 관점의 Serverless - API Gateway

yunseohhe 2024. 12. 16. 21:09

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를 가리키도록 해야 한다.