00. 준비사항
API Gateway의 주된 사용 목적은 Lambda일 것이라 생각한다. 또한 API Gateway를 잘 이해하기 위해서도 Lambda 예제가 좋을 것이라 믿는다. 그렇기 때문에 간단한 Lambda함수를 생성하자.
해당 글은 Lambda의 기초를 설명하는 글이 아니므로 Lambda 함수의 생성방법을 모른다면 다른 글을 참고하길 바란다.
예제 코드
'use strict';
console.log('Loading hello world function');
exports.handler = async (event) => {
let name = "you";
let city = 'World';
let time = 'day';
let day = '';
let responseCode = 200;
console.log("request: " + JSON.stringify(event));
if (event.queryStringParameters && event.queryStringParameters.name) {
console.log("Received name: " + event.queryStringParameters.name);
name = event.queryStringParameters.name;
}
if (event.queryStringParameters && event.queryStringParameters.city) {
console.log("Received city: " + event.queryStringParameters.city);
city = event.queryStringParameters.city;
}
if (event.headers && event.headers['day']) {
console.log("Received day: " + event.headers.day);
day = event.headers.day;
}
if (event.body) {
let body = JSON.parse(event.body)
if (body.time)
time = body.time;
}
let greeting = `Good ${time}, ${name} of ${city}.`;
if (day) greeting += ` Happy ${day}!`;
let responseBody = {
message: greeting,
input: event
};
// The output from a Lambda proxy integration must be
// in the following JSON object. The 'headers' property
// is for custom response headers in addition to standard
// ones. The 'body' property must be a JSON string. For
// base64-encoded payload, you must also set the 'isBase64Encoded'
// property to 'true'.
let response = {
statusCode: responseCode,
headers: {
"x-custom-header" : "my custom header value"
},
body: JSON.stringify(responseBody)
};
console.log("response: " + JSON.stringify(response))
return response;
};
01. API 생성
1. API 생성 버튼을 누른다.
2. REST API 구축을 선택한다.
3. 새 API 생성 버튼을 누른 후에 적절한 API이름을 추가하여 API를 생성한다.
( ** Swagger혹은 예제 API를 이용하면 JSON형태의 코드로 API를 구성할 수도 있다 )
02. 리소스 생성
API 생성 후 가장 먼저 해야할 것은 리소스를 생성하는 일이다. 리소스 이름과 경로는 각각 사용할 경로와 이름을 작성하면 된다.
프록시 리소스는 다음과 같다.
프록시 리소스로 구성
해당 옵션을 체크하면 해당 리소스 아래의 모든 경로는 이 경로로 사용된다.
{proxy+}와 같이 중괄호와 +를 사용하여 구성하며 해당 옵션을 사용할 시에 모든 메서드 타입은 ANY로 고정되며 프록시 통합을 기본으로한다.
02-. 프록시 리소스로 리소스를 구성시
프록시 리소스로 경로 구성시에는 다음과 같이 ANY타입으로 메서드가 생성된다. 뿐만 아니라 통합 요청으로 PROXY_INTEGRATION 유형을 사용하여 별다른 설정 없이 API를 사용할 수 있다.PROXY_INTEGRATION는 해당 포스팅의 통합형 프록시와 비 통합형 프록시 설명하고 있다.
02+. 프록시 리소스를 사용하지 않고 리소스 구성시
프록시 리소스를 사용하지 않으면 메서드를 추가해주어야 한다.
03. 메서드생성
1. 메서드 생성을 누른후 사용할 메서드를 선택한다. 이번 예시에서는 GET 메서드를 사용할 것이다.
2. 메서드를 생성하면 통합할 유형을 선택해야 한다. 해당 예제는 Lambda 함수를 이용한다. Lambda함수에 함수명을 입력해주면 된다.
이번 예시에서는 이전의 프록시 리소스와 HTTP API에서 기본적으로 사용하는 프록시 통합 옵션을 사용하지 않고 비 통합형 프록시를 사용할 것이다.
Lambda 프록시 사용 옵션에 대한 자세한 설명은 해당 포스팅의 통합형 프록시와 비 통합형 프록시 설명에서 확인할 수 있다.
04. 메서드 추가 설정하기 ( 비 통합형 프록시 )
여태까지 잘 따라 오셨다면, 다음과 같은 화면을 볼 수 있다. 네 가지 설정 ( 메서드 요청, 통합 요청, 통합 응답, 메서드 응답 )과 테스트가 있는데 하나씩 알아보자.
1. 메서드 요청
메서드 요청은 API Gateway에서 여러 값을 처리하는 설정(주로 validation)을 할 수 있다. 이 중 몇 가지 옵션을 살펴보자.
요청 검사기
해당 옵션을 선택하면 선택한 옵션에 대해서 필수 파라미터를 지정하지 않은 경우 필수 파라미터가 누락되었다는 오류를 응답한다. 이 때 요청 자체가 이루어지지 않아, 백엔드에서 호출 요금이 발생하지 않는다.
API 키가 필요함
해당 API를 특정 유저만 접근하게 하고 싶을 때 API를 설정할 수 있다. 마찬가지로 API 키가 invalidate하다면 백엔드에서 호출되지 않고 요금 또한 발생하지 않는다.
URL 쿼리 문자열 파라미터 이하
validation 체크할 URL 쿼리 문자열 혹은 파라미터등을 입력한다. 필수값을 설정할 수 있고 파라미터에 대한 캐싱을 true로 설정할 수 있다. ( 캐싱 체크 후 캐시 설정은 별도로 있으나 해당 포스트에서는 다루지 않는다 )
2. 통합 요청
비 통합형 프록시를 사용하기 위해서 가장 중요한 설정이다. 메서드 생성페이지 아래 매핑 템플릿 메뉴를 찾자.
비 통합형 프록시는 Lambda에서 payload(요청 데이터)를 event객체를 통해서 직접 접근할 수 없다. 그렇기에 파라미터와 같은 값을 매핑해야 하는데 해당 예제에서는 json형식의 매핑 템플릿을 이용한다.
{
"name": "$input.params('name')",
"city": "$input.params('city')"
}
05. 테스트 하기
테스트하여 제대로 input이 들어오는지 확인한다.
06. API 배포하기
1. 작업 -> API 배포 후에 새 스테이지를 생성한다.
+. 리소스를 파라미터로 활용하기
1. 리소스를 파라미터로 활용하려면 리소스를 이미지처럼 중괄호를 쳐서 생성 후에 마지막 리소스에 메서드를 생성하면 된다.
2. 이 후에 통합요청에서 다음처럼 매핑 테이블을 생성해준다.
3. 잘 생성했다면 테스트에 경로 인풋박스가 추가된다. 해당 입력값을 통해 테스트 한다.
'Develop' 카테고리의 다른 글
AWS VPC 및 간단한 IPv4 (0) | 2021.01.30 |
---|---|
AWS Lambda 기본 기능 파악하기 (1) (0) | 2021.01.27 |
API Gateway를 사용하여 API 구축하기 (2) HTTP API 생성 (0) | 2021.01.25 |
리팩토링 기법 - 함수 추출하기 (0) | 2021.01.24 |
API Gateway를 사용하여 API 구축하기 (1) 기본 개념 (0) | 2021.01.24 |