IaaS/퍼블릭클라우드

(AWS) API Gateway란?

armyost 2022. 2. 18. 07:01
728x90

개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다. API는 애플리케이션이 백엔드 서비스의 데이터, 비즈니스 로직 또는 기능에 액세스할 수 있는 "Gateway" 역할을 합니다. API Gateway를 사용하면 실시간 양방향 통신 애플리케이션이 가능하도록 하는 RESTful API 및 WebSocket API를 작성할 수 있습니다.

 

 

일반적으로 아래와 같은 구조로 생성이 된다.

 

사용방법

1. Lambda 함수 생성

기본적인 API Sample로 아래와 같은 스크립트를 사용해도 좋다.

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

2. HTTP API 생성

1) [AWS콘솔]-[API Gateway]-[API] 접속

2) 유형 중 "HTTP API" 의 "구축" 선택 

3) [통합(Integrations)]에서 [통합 추가(Add integration)]를 선택합니다.

4) Lambda를 선택합니다.

5) Lambda 함수에서 my-function을(를) 입력합니다.

6) API 이름에서 my-http-api을(를) 입력합니다.

7) [Next]를 선택합니다.

8) API Gateway가 생성하는 경로를 검토한 후 [다음(Next)]을 선택합니다.

9) API Gateway가 생성하는 단계를 검토한 후 [다음(Next)]을 선택합니다.

10) Create를 선택합니다.

 

3. API 테스트

생성한 API URL을 복사해 CURL 또는 브라우저를 이용해 호출해본다.

 

Lambda Proxy와 API Gateway의 통합

Lambda Proxy 통합이란 API Gateway의 API 통합 유형 중 하나이다. Lambda Proxy 통합을 사용하면 클라이언트가 백엔드에서 단일 Lambda 함수를 호출할 수 있다. Lambda Proxy 통합에서 클라이언트가 API 요청을 제출하면 API Gateway는 통합된 Lambda 함수로 원래 요청을 있는 그대로 전달한다

 

관련 예제는 다음 링크를 참고바란다.

https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html

 

자습서: Lambda 프록시 통합을 사용하여 Hello World REST API 빌드 - Amazon API Gateway

자습서: Lambda 프록시 통합을 사용하여 Hello World REST API 빌드 Lambda 프록시 통합은 API 메서드나 전체 API를 Lambda 함수와 통합할 수 있는 유연하고 간단한 API Gateway API 통합 유형입니다. Lambda 함수는 L

docs.aws.amazon.com

 

Lambda 프록시 통합을 사용할 경우 API Gateway에서는 백엔드 Lambda 함수에 대해 다음 JSON 형식에 따라 출력을 반환하도록 요구한다.

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
    "body": "..."
}

 

 

 

 

 

API Gateway의 배포시 Stage의 필요성

 

API Gateway에서의 수정사항이 실 운영에 바로 적용됨을 뜻하지 않고, Deploy를 거쳐야 한다.

  • 여기서 변경사항을 Deploy하면 Stage라는 영역에 배포가 된다.
  • 즉 Stage를 dev, test, prod 등을 두고 운영이 필요함을 뜻한다.
  • 각각의 Stage는 고유의 환경설정 파라미터를 갖고 있다.
  • Stage는 각각 롤백될 수 있고 수정사항은 그대로 유지된다.

 

API Gateway에서 Stage의 환경변수

  • Lambda Function ARN
  • HTTP Endpoint : 각 Stage별 HTTP Endpoint를 dev, test, prod로 적용
  • Parameter mapping template : Mapping Template를 통하여 환경설정 파라미터를 Lambda function에 전달

각 환경별 Stage를 1:1로 설계한 예

 

API Gateway의 배포를 활용한 Canary 배포

 

API Gateway 콘솔에 로그인합니다.

  1. 기존 API를 선택하거나 새 API를 생성합니다.
  2. 필요할 경우, API를 변경하거나 원하는 API 메서드 및 통합을 설정합니다.
  3. 작업 드롭다운 메뉴에서 API 배포를 선택합니다. API 배포I에서 화면 지침에 따라 새 단계에 API를 배포합니다.
  4. 지금까지 프로덕션 릴리스 단계에 API를 배포했습니다. 다음으로 단계에서 Canary 설정을 구성하고, 필요하다면 캐싱을 활성화하거나 단계 변수를 설정하거나 API 실행 로그 또는 액세스 로그를 구성합니다.
  5. API 캐싱을 활성화하려면 단계 편집기(Stage Editor)에서 설정 탭을 선택하고 화면 지침에 따릅니다. 자세한 내용은 응답성 향상을 위한 API 캐싱 활성화 단원을 참조하세요.
  6. 단계 변수를 설정하려면 단계 편집기(Stage Editor)에서 단계 변수(Stage Variables) 탭을 선택하고 화면 지침에 따라 단계 변수를 추가하거나 수정합니다. 자세한 내용은 REST API 배포에 대한 스테이지 변수 설정 단원을 참조하세요.
  7. 실행 로깅 또는 액세스 로깅을 구성하려면 단계 편집기(Stage Editor)에서 로그 탭을 선택하고 화면 지침에 따릅니다. 자세한 내용은 API Gateway에서 REST API에 대한 CloudWatch 로깅 설정 단원을 참조하세요.
  8. 단계 편집기(Stage Editor)에서 Canary 탭을 선택한 후 Canary 생성(Create Canary)을 선택합니다.
  9. 단계의 요청 배포(Stage's Request Distribution) 섹션에서 Canary에 대한 요청의 비율(%)(Percentage of requests to Canary) 옆의 연필 아이콘을 선택하고 입력 텍스트 필드에 숫자(예: 5.0)를 입력합니다. 확인 표시 아이콘을 선택하여 설정을 저장합니다.
    .

API Gateway와 Throattles

Amazon API Gateway는 네 가지 기본 유형의 제한 관련 설정을 제공합니다.

  • AWS 제한 한도는 리전의 모든 계정과 클라이언트에 적용됩니다. 이 한도 설정은 API 및 사용자의 계정이 너무 많은 요청 때문에 가득 차지 않도록 방지하기 위해 존재합니다. 이러한 제한은 AWS에서 설정하며 고객이 변경할 수 없습니다.
  • 계정당 한도는 지정된 리전에 있는 계정의 모든 API에 적용됩니다. 계정 수준 속도 제한은 요청 시 늘릴 수 있습니다. 제한 시간이 더 짧고 페이로드가 더 작은 API를 사용하면 더 높은 제한이 가능합니다. 리전별로 계정 수준 조절 한도 증가를 요청하려면 AWS 지원 센터에 문의하시기 바랍니다. 자세한 내용은 섹션을 참조하세요Amazon API Gateway 할당량 및 중요 정보 이러한 제한은 AWS 제한 한도보다 높을 수 없습니다.
  • API별, 단계별 제한 한도는 단계의 API 메서드 수준에서 적용됩니다. 모든 메서드에 대해 동일한 설정을 구성하거나 각 메서드에 대해 다른 제한 설정을 구성할 수 있습니다. 이러한 제한은 AWS 제한 한도보다 높을 수 없습니다.
  • 클라이언트별 제한 한도는 사용량 계획과 연결된 API 키를 클라이언트 식별자로 사용하는 클라이언트에게 적용됩니다. 이러한 한도는 계정당 한도보다 높을 수 없습니다.

적용방법 : Usage Plan 레벨에서의 Throattles

※ 사용 계획은 배포된 하나 이상의 API 단계 및 메서드에 액세스할 수 있는 사용자를 지정하고 선택적으로 요청 제한을 시작하도록 대상 요청 속도를 설정합니다. 계획은 API 키를 사용하여 API 클라이언트와 각 키에 대해 연결된 API 단계에 액세스할 수 있는 사용자를 식별합니다

 

[AWS콘솔]-[Usage Plans] 접속

"생성" 을 클릭하여 "Create Usage Plan" 접속

 

적용방법 : Lambda 함수에서의 RPS(Request Per Second) 관리

Provisioned Concurrency : 여러 Lambda 함수에 적용하기 위한 Concurrency

Reserved Concurrency : 특정 Lambda 함수에 적용하기 위한 Concurrency

 

 

'IaaS > 퍼블릭클라우드' 카테고리의 다른 글

(AWS) ECS Service에 대해서  (0) 2022.02.28
(AWS) ECS 란?  (0) 2022.02.28
(AWS) Step Function 이란?  (0) 2022.02.18
(AWS) SAM이란?  (0) 2022.02.15
(AWS) Lambda Alias란?  (0) 2022.02.15