(AWS) Lambda 사용하기

유인근·2021년 5월 9일
0

AWS

목록 보기
1/1

About

AWS Lambda를 사용하면서 습득한 기본적인 Lambda 사용법과 그 과정에 대해 기록해 보고자 한다 : )

Why Lambda?

Spring Boot API 상에서 웹용 폰트와 관련된 파일을 생성하는 작업을 맡게 되었는데, 이전의 웹용 폰트 파일 생성은 JavaScript로 된 사내 모듈을 사용했었다. 따라서 API에 폰트 파일 생성 요청이 오면, JavaScript로 된 모듈을 별도 프로세스로 실행시키는 작업을 해야하는데 의존성과 패키지 설치 등의 문제 때문에 그 작업이 쉽지 않았다.

좀 더 깔끔한 방법을 고민하던 중 사수분께서 JavaScript로 된 모듈을 AWS Lambda로 따로 구성하면 현재 API와 독립적으로 구성할 수 있고, S3에 특정 파일을 업로드하면 트리거가 되서 Lambda를 실행시키는 등의 작업도 할 수 있으니 Lambda가 좋을 거 같다는 조언을 해주셨다. 이 말씀에 크게 동감했고, 현재 회사에서도 AWS 서비스를 계속적으로 사용하고 있으니 Lambda로 구성하는 것이 가장 좋겠다는 판단이 들어 진행하게 됐다.

AWS Lambda란

AWS Lambda란 별도의 서버 구축 없이, 빠르고 쉽게 서버를 배포할 수 있고 특정 이벤트가 발생할 때만 코드를 실행시킬 수 있는 Serverless 컴퓨팅 플랫폼이다. 특히 JavaScript, Python과 같은 스크립트 언어로 된 별도 서버를 구축하는 데 용이하고, AWS의 다른 서비스와 다양한 방법으로 함께 사용할 수 있는 장점이 있다.

AWS 공식 문서 링크: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html

Lambda 사용하기

함수 생성하기

  • 코드를 작성할 함수를 생성하기 위해, 함수 이름과 언어를 선택 후 '함수 생성' 버튼을 누른다.
  • 그러면 아래와 같이 바로 함수가 생성되고, 각종 트리거와 소스 코드를 편집할 수 있게 된다.
    이때 함수가 실행이 잘 되는지 Test를 눌러보면 실행 결과를 확인할 수 있다.
  • index.js에 있는 코드를 수정하고 Deploy를 한 후, 수정한 것이 잘 반영됐는지 다시 Test를 해보자.
  • 코드를 수정하면 아래와 같이 Deploy 버튼 오른쪽에 'Changes not deployed' 메세지가 나타난다.
  • 코드를 모두 수정했으면 Deploy를 하고 Test 버튼을 누르자.
  • 그러면 아래와 같이 수정된 코드가 잘 반영된 것을 알 수 있다.

트리거 추가하기

  • 작성한 함수를 실행시키는 트리거를 추가해보자.
  • 아래와 같이 트리거 추가 버튼을 누른다.
  • 다양한 트리거 종류가 있는데 예시에서는 아래와 같은 구성으로 API 게이트웨이를 통해 구성해본다.
    API 게이트웨이를 사용하면 함수에 대해 HTTP 엔드포인트가 있는 API를 만들 수 있다.
  • 그러면 아래와 같이 API 게이트웨이 트리거가 추가 완료된 것을 확인할 수 있고, API 엔드포인트에 접속하면 이벤트가 발생해서 함수가 실행된 결과가 브라우저에 출력되는 것을 알 수 있다.

함수 실행 Log 확인

  • 기본적으로 구성된 CloudWatch 로그로 함수 실행에 대한 모니터링도 할 수 있다.

메모리, 제한 시간 설정

  • 함수에 대한 메모리와 제한 시간도 설정할 수 있다. 이때 함수를 실행시키는 CPU의 성능이 메모리에 비례하도록 구성되므로 실행 속도가 느리면 메모리를 늘리면 된다.

프로젝트 파일 업로드하기

  • 외부 프로젝트 파일을 .zip 형태로 업로드해서 함수를 구성할 수 있다. 단, 프로젝트 파일이 일정 용량이 넘어가게 되면 브라우저 상에서 더 이상 코드 편집이 불가능하다.

Lambda를 사용하면서 알게된 점

  • Lambda로 빠르고 쉽게 서버를 구축할 수 있다는 장점이 있으나, 디버깅과 같은 코드 레벨에서의 작업은 생산성이 떨어졌다.

  • 파일에 접근하는 경로는 '/tmp' 폴더 경로로 지정하지 않으면 'Permission Denied'가 발생한다.
    (Lambda에서는 파일에 접근할 수 있는 경로를 '/tmp' 폴더로 따로 지정하고 있다.)

  • 실제 컴퓨터(머신)에 설치되어 있는 바이너리 파일 등에 접근하는 일을 하려면 별도의 작업이 필요하다.

  • 나는 다음과 같이 S3에 특정 파일이 업로드 됐을 때 트리거를 구성해 Lambda 함수를 실행시켰는데, 테스트 중에 무한 트리거가 되는 경우가 있어서 매우 조심해야겠다고 생각했다.

    ex) API에서 S3 특정 bucket에 파일 업로드
    → (트리거) 함수 이벤트 발생 → 함수에서 폰트 파일 생성 후, 해당 bucket에 파일 업로드
    → (트리거) 함수 이벤트 발생 → 함수에서 폰트 파일 생성 후, 해당 bucket에 파일 업로드
    → (트리거) 함수 이벤트 발생 → 함수에서 폰트 파일 생성 후, 해당 bucket에 파일 업로드 ......

profile
끊임없이 성장하는 개발자 🔥

0개의 댓글