본문 바로가기
AWS

[AWS] AWS Lambda를 이용해서 HTTP API 만들기

by 혀나Lee 2016. 9. 2.

AWS Lambda

AWS Lambda는 이벤트에 응답하여 코드를 실행하고 자동으로 기본 컴퓨팅 리소스를 관리하는 서버 없는 컴퓨팅 서비스입니다. AWS Lambda를 사용하여 커스텀 로직으로 다른 AWS 서비스를 확장하거나, AWS 규모, 성능 및 보안으로 작동하는 자체 백엔드 서비스를 만들 수 있습니다. AWS Lambda는 Amazon S3 버킷의 객체에 대한 변경 또는 Amazon DynamoDB의 테이블 업데이트와 같은 다양한 이벤트에 대한 응답으로 코드를 자동 실행할 수 있습니다.

Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. 개발자는 코드를 제공하기만 하면 됩니다.

Lambda 사이트에 가면 서버에 대한 걱정 없이 코드 실행, 사용한 컴퓨팅 시간에 대해서만 비용 지불라고 나와 있는데 간단히 얘기하면 Lambda 서비스에 작성한 비즈니스 로직을 올려놓고 HTTP 요청이나 AWS 내의 이벤트가 발생하면 해당 코드가 실행되는 구조입니다. 그래서 소스코드만 관리하면 EC2처럼 서버를 직접 관리하지 않아도 되므로 복잡하지 않은 처리에 사용하기에 최적화되어 있다. 가격은 월별 1백만 회, 400,000GB-초의 컴퓨팅 시간까지는 무료입니다. 

AWS Lambda 함수

AWS Lambda에서 실행하는 코드를 'Lambda 함수'라고 합니다. Lambda 함수를 만든 뒤에는 스프레드시트의 수식과 마찬가지로 트리거되는 즉시 언제든지 실행할 수 있습니다. 각 함수에는 코드뿐 아니라 함수 이름과 리소스 요구 사항을 비롯한 일부 관련 구성 정보가 포함되어 있습니다. Lambda 함수는 '상태를 저장하지 않으며' 기본 인프라에 대한 선호도가 없으므로 Lambda는 필요에 따라 많은 함수 사본을 빠르게 시작하여 수신 이벤트 비율에 따라 조정할 수 있습니다.

AWS Lambda Function 생성

1. AWS Lambda 웹 콘솔 접속 후, Get Started Now 버튼 클릭


Lambda는 이벤트 기반으로 이벤트가 발생했을 때 함수를 실행하기 때문에 단위당 하나의 Lambda function을 만들어야 한다.

2. Skip blueprint


Lambda function을 만들기 전에 블루프린트(Lamda function을 템플릿처럼 사용할 수 있는 것)를 선택할 수 있는 화면이 나온다. 검색을 통해 원하는 블루프린트를 선택할 수 있다.

3. Lambda Function 작성















  • Name: 인식할 수 있는 함수의 이름을 작성. 예, HelloWorld
  • Runtime: Node.jsJava 8Python 2.7 중에서 선택.
  • Handler: 이벤트가 발생했을 때 실행할 핸들러를 지정. 예, index.handler라고 지정하면 index.js 파일에서 exports로 지정된 handler라는 이름의 함수를 실행하게 된다.
  • Role: Lambda function에 필요한 Role을 설정. S3나 데이터베이스 등 AWS 내의 다른 리소스에 접근이 필요한 경우 IAM에서 Role을 만들어서 추가해야 한다.
  • 맨 하단: Lambda function을 실행할 때 필요한 메모리와 만료시간이 있는데 여기선 테스트이므로 기본값을 그대로 둔다. 나중에 실행하면 사용한 메모리와 시간을 알 수 있으므로 필요에 따라 조정하면 된다. 실행 만료시간은 최대 5분이다.

4. Lamda Function code 작성

Lamda Function code 작성하는 란에 핸들러를 작성하여 원하는 비즈니스 로직을 넣으면 되는데 웹 콘솔에서 직접 작성하거나 만든 파일은 zip 파일로 업로드할 수도 있다. 

exports.myHandler = function(event, context) {}

  • myHanlder에 원하는 이름 작성

  • 파라미터 event: 이벤트에서 핸들러에 전달한 객체

  • 파라미터 context: Lamda function의 실행정보

console.log('Loading function');

exports.handler = function(event, context) {
    console.log('event: ', JSON.stringify(event));
    var name = event.myname || 'Anonymous';
    context.succeed('Hello World, ' + name);
};

이벤트가 호출되면 받은 이벤트를 로그로 출력하고 'Hello World, 입력받은 이름'를 출력하고 받은 이름이 없으면 Anonymous를 출력한다. 이 코드에서context 객체에서 succeed() 메서드를 사용했는데 Lambda에서 제공하는 context 객체는 몇가지 메서드를 제공하고 있다.

context.succeed(result): Lambda function이 정상적으로 모두 완료되었을 때 실행하는 함수로 선택적 파라미터인 result는 JSON.stringify가 가능해야 한다. 이 함수는 2가지로 동작하는데 Lambda function이 비동기 방식인 Event방식으로 호출된 경우에는 202 응답을 반환하고 동기방식인 RequestResponse 방식으로 호출된 경우에는 200으로 응답하면서 result의 문자열을 응답으로 보낸다. 

context.fail(error): Lambda function에서 오류가 발생했을 때 사용

context.done(error, result): Lambda function을 종료

context.fail()과 context.done()의 오류도 CloudWatch의 로그로 남게 된다.

5. Next 버튼을 클릭하여 리뷰화면 확인 후, 'Create Function' 클릭

6. Test

test: 테스트 버튼을 통해 테스트 가능

Actions - Configure test event: 이벤트로 전송할 테스트 데이터 수정 가능


댓글