이 튜토리얼은 이어지는 튜토리얼입니다. 이 포스트를 통해 블로그에 처음 방문하셨다면 Serverless 강좌 목록 페이지를 확인해주세요.
Lambda 는 AWS 에서 제공하는 FaaS 서비스 입니다. Lambda 말고도, 각 공룡 기업들에서 제공하는 다른 서비스들도 있습니다:
- Google Functions
- Azure Functions
아직까지는, Lambda 가 압도적으로 사용률이 높습니다.
사용률과, 구글 검색량이 정비례 하지는 않겠지만, Lambda 가 현재 가장 많이 사용 된 다는 것을 유추 할 수는 있지요.
성숙도, 인기도 측면에선 현재 AWS Lambda 가 1위를 달리고 있습니다. 앞으로 몇년 후에는 어떨지는 모르겠습니다만, 사용률이 많을수록, 리소스도 많으니 우리는 AWS Lambda 를 파보도록 하겠습니다.
새 Lambda 만들기
우선, AWS에 로그인을 하시고, Lambda Management Console 에 들어가세요.
함수 생성 버튼을 누르세요.
그러면 다음과 같은 창이 뜹니다.
새로 작성 모드를 선택하세요. 이름은 hello-lambda 라고 입력하세요.
이제 런타임을 클릭해보세요.
현재 AWS Lambda 에서는 다양한 런타임이 제공되고 있습니다. 우리는 런타임 기본값인 Node 6.10 으로 하겠습니다. (아마 시간이 지나면 Node 8 버전도 사용 가능 할 것으로 예상됩니다.)
자, 이제 역할을 설정하겠습니다.
역할 부분에서는, 람다에 부여하고싶은 권한을 설정하게 됩니다. 역할은 한번 추가해두면, 이전에 생성한 것을 다시 선택하여 재사용 할 수 있는데요, 아직 역할을 추가하지 않았다는 가정하에, 사용자 지정 역할을 생성하겠습니다.
그러면, 새 창이 뜨면서 역할을 추가 할 수 있게 됩니다.
역할을 추가하고 나면, 기존 역할 선택을 통하여 우리가 방금 만든 역할을 선택 할 수 있게 됩니다.
이제 함수 생성을 하세요!
Lambda 관리하기
그러면, 우리의 첫 Lambda 관리화면을 보실 수 있습니다.
스크롤을 내려보시면 다음과 같은 코드가 나타납니다:
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Hello from Lambda');
};
이 callback 함수에서 첫번째 파라미터는 error 객체입니다. 에러가 없을땐 그냥 null 을 넣어주면 됩니다. 두번째 파라미터는 응답 객체입니다.
현재 함수는 지금, 호출되면 ‘Hello from Lambda’ 를 응답하도록 설정되어 있습니다.
이 함수를 테스팅 해봅시다.
페이지 상단의 테스트 버튼을 누르면 다음과 같이 모달이 뜹니다.
이벤트 이름을 hello 로 설정하고, 스크롤을 내려서 생성을 누르세요.
여기서 코드를 입력하는 JSON 은, 우리의 lambda 함수에서 event 로 받게 될 객체입니다.
생성을 하여 모달이 종료되면, 페이지 상단의 테스트 버튼을 다시 누르세요.
하단에 뜨는 실행 결과의 세부정보를 보시면, 결과값이 나타납니다.
이렇게 만든 Lambda 는, 따로 설정해주지 않으면 AWS 웹서비스에서, 그리고 CLI 로만 실행 할 수 있습니다.
Lambda 에 HTTP 주소 부여하기
이번엔 특정 주소에 요청이 되면 해당 함수가 실행되도록 설정을 해보겠습니다.
Lambda 의 구성 부분에서 API Gatewawy 를 선택해주세요.
API 이름 부분엔 API 식별자 이름을 넣으세요. 기본적으로는 LambdaMicroservice 라는 이름이 적혀있을 텐데, 이를 수정하려면 값 입력 버튼을 누르시면 됩니다.
그리고, 보안 부분에는 “열기” 로 설정해주세요. 해당 API 를 모두에게 열어주겠다는 의미입니다. 필요에따라 보안 설정을 하여 권한이 있는 사람만 호출 할 수 있도록 설정 할 수도 있습니다.
다 입력을 하고, 추가를 하세요. 그 다음엔, 페이지 상단의 저장 버튼을 누르세요.
저장을 하고 나면 다음과 같이 API 가 생성된 것을 볼 수 있습니다.
저기 나타나는 URL 을 눌러보고 싶죠? 하지만, 누르면 아직은 에러가 뜹니다.
그 이유는 HTTP 를 동해 응답을 받으려면, 콜백을 통해 응답하는 부분을 HTTP 응답 형식으로 바꿔주어야 합니다.
Designer 부분에서 루트노드인 람다 함수를 다시 클릭하고:
함수의 내용을 다음과 같이 설정하세요:
exports.handler = (event, context, callback) => {
callback(null, {
statusCode: 200,
body: 'Hello from Lambda'
});
};
자, 애제 아까 그 주소로 들어가면 Hello from Lambda 가 뜨는걸 브라우저에서 확인 할 수 있습니다!
여러분의 첫 Hello World 를 하셨습니다!
정리
이번 튜토리얼에서는, Lambda 를 만들기 위해서 AWS 웹서비스에서 이것저것 눌러가며 생성을 했었습니다. Lambda 는, AWS 의 다른 서비스와 함께 사용되었을 때 빛을 발합니다. 예를 들어 방금과 같이 API Gateway 를 사용해서 API 주소와 Lambda 를 연결하기도 하고, 파일을 S3 에 저장 하거나, CloudWatch Events 기능을 통하여 crontab 처럼 주기적으로 작업을 진행하도록 설정 할 수도 있습니다.
정말 다양한 작업을 할 수 있는데, 문제는 이렇게 인프라 설정을 하는 작업을 수동으로 하기엔 좀 번거로울 수 있다는 점 입니다.
그렇기에, AWS 에서는 Cloudformation 과 SAM 와 같은 솔루션을 제공하고 있습니다.
Cloudformation 의 경우, Lambda 에서 사용할 리소스를 설정파일로 작성하여 이를 배포 할 수 있게 해줍니다.
SAM 의 경우엔, Cloudformation 을 확장한 도구로서, 서버리스 애플리케이션 배포와 설계를 조금 더 간소하게 할 수 있게 해주고, 편리한 CLI 를 제공해줍니다 (예: 로컬 테스팅)
우리는 앞으로 이어질 튜토리얼에서는, Serverless 라는 프레임워크를 사용하도록 하겠습니다. 이 프레임워크의 경우엔, 내부적으로는 Cloudformation 을 사용하며, 더 쉬운 문법으로 애플리케이션 설정을 할 수 있게 해주고 편리한 CLI 를 제공해줍니다.
어떠한 측면에서는 Serverless 와 SAM 은 비슷한점이 꽤 있는데요, 주요 차이점으로는 Serverless 의 경우엔 다른 서비스 (Google, Azure, IBM) 등 에서도 사용 할 수 있으며, 훨씬 큰 생태계를 가지고 있습니다 (더욱 다양한 플러그인, 템플릿, 자료 등…)
자, 그러면 Serverless 를 배워볼까요? 다음 튜토리얼