개발자가 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 함수로 원래 요청을 있는 그대로 전달한다
관련 예제는 다음 링크를 참고바란다.
자습서: 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 콘솔에 로그인합니다.
- 기존 API를 선택하거나 새 API를 생성합니다.
- 필요할 경우, API를 변경하거나 원하는 API 메서드 및 통합을 설정합니다.
- 작업 드롭다운 메뉴에서 API 배포를 선택합니다. API 배포I에서 화면 지침에 따라 새 단계에 API를 배포합니다.
- 지금까지 프로덕션 릴리스 단계에 API를 배포했습니다. 다음으로 단계에서 Canary 설정을 구성하고, 필요하다면 캐싱을 활성화하거나 단계 변수를 설정하거나 API 실행 로그 또는 액세스 로그를 구성합니다.
- API 캐싱을 활성화하려면 단계 편집기(Stage Editor)에서 설정 탭을 선택하고 화면 지침에 따릅니다. 자세한 내용은 응답성 향상을 위한 API 캐싱 활성화 단원을 참조하세요.
- 단계 변수를 설정하려면 단계 편집기(Stage Editor)에서 단계 변수(Stage Variables) 탭을 선택하고 화면 지침에 따라 단계 변수를 추가하거나 수정합니다. 자세한 내용은 REST API 배포에 대한 스테이지 변수 설정 단원을 참조하세요.
- 실행 로깅 또는 액세스 로깅을 구성하려면 단계 편집기(Stage Editor)에서 로그 탭을 선택하고 화면 지침에 따릅니다. 자세한 내용은 API Gateway에서 REST API에 대한 CloudWatch 로깅 설정 단원을 참조하세요.
- 단계 편집기(Stage Editor)에서 Canary 탭을 선택한 후 Canary 생성(Create Canary)을 선택합니다.
- 단계의 요청 배포(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 |