이 연재글은 AWS 람다(lambda) 실습의 1번째 글입니다.

AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. 일반적으로는 개발 코드가 실행되는 서버 환경의 구축이 필요한데 lambda로 개발하면 실행할 서버에 대해서는 고민할 필요없이 코드 개발에만 집중할 수 있습니다.

유지비용 감소

서버를 유지 하지 않아도 되고 필요시에만 코드를 실행하므로 요청한 만큼에 대해서만 비용을 부담하면 되므로 유지비용이 감소합니다.

확장성

서비스가 커짐에 따라 트래픽이 상승하면 기존 방식의 서비스는 Auto scaling에 대한 부분을 고려해야 하지만 lambda는 하루에 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다.

모니터링/로깅

모니터링 및 로깅도 기본으로 제공(CloudWatch)하여 해당 lambda의 실행시 발생하는 리소스에 대해서 운영 및 관리작업을 수행할 수 있습니다.

요약하면 사용자 입장에서는 실행할 코드만 개발하고 백단의 인프라에 대해서는 신경쓸 필요가 없게됩니다.

또한 lambda는 aws에서 제공하는 리소스들과 쉽게 연동이 가능하도록 기능을 제공합니다. 예를 들면 lambda를 작성하고 해당 트리거로 aws gateway를 연결하면 손쉽게 Rest api를 구축할 수 있습니다. 따라서 기존 환경에 비해 개발 생산성이 향상됩니다.

lambda는 작은 모듈이 모여 하나의 서비스를 이룬다는 점에서 마이크로서비스를 구축하는데 적합해 보입니다. 다만 서비스를 이루는 lambda의 개수가 많아지면 많아질수록 관리가 쉽지 않아 보이는것이 단점이며, 각각의 lambda에서 공통으로 사용하는 기능에 대해서는 어떻게 모듈화하여 관리해야 할지 고민이 필요해 보입니다.

실습에서는 node.js 기반의 lambda 개발 환경을 구축해 보겠습니다. Mac기반의 환경설정이므로 window에서는 설정이 다를 수 있습니다.

Homebrew 설치

Mac에서 다양한 패키지를 손쉽게 설치, 관리 하기 위해 homebrew를 설치합니다.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Node.js 설치

작성일 기준으로 aws는 lambda 개발시 node.js 12.x를 권장합니다. 아래와 같이 HomeBrew를 이용하여 node 버전을 확인 후 해당 버전을 설치하고 쉘 환경에 node path를 등록합니다.

$ brew search node
==> Formulae
libbitcoin-node         node                    node-sass               node@12                 nodebrew                nodenv
llnode                  node-build              node@10                 node_exporter           nodeenv
$ brew install node@12
$ echo 'export PATH="/usr/local/opt/node@12/bin:$PATH"' >> ~/.zshrc
$ node -v
v12.14.1

awscli 설치

aws가 서비스 하는 컴퓨팅 리소스들을 터미널에서 명령줄 인터페이스로 관리할 수 있도록 도와주는 awscli를 설치합니다.

$ brew install awscli
$ aws --version
aws-cli/1.17.9 Python/3.8.1 Darwin/19.3.0 botocore/1.14.9

aws 인증설정

개발 PC에서 aws의 리소스에 접근하려면 엑세스키를 발급받아 세팅해야 합니다. 발급받는 유저가 AdministratorAccess 권한이 부여되어있으면 따로 권한 작업은 필요없으나 권한이 제한된 계정인경우 추가로 권한 부여 작업도 필요합니다.

  • AWSLambdaFullAccess: 람다 함수 생성시 사용
  • IAMFullaccess: 생성할 람다 함수의 IAM 역할(role) 생성시 사용

유저에 권한설정이 마무리되면 상단 메뉴 ID클릭 – 내 보안 자격증명 – 엑세스키(엑세스키ID 및 비밀 엑세스 키)를 열어 세 엑세스 키 만들기를 진행합니다.

생성 후 발급되는 AWSSecretKey는 한번만 확인 가능하므로 정보를 백업해 두도록 합니다.
발급 받은 정보로 개발 PC에 aws 프로필을 생성합니다.

$ aws configure
AWS Access Key ID [None]: AKIAVFXXXXXXXQUD2CPSR
AWS Secret Access Key [None]: 8bJTW21dlFXXXXXXXXXXXpAy2g9utgUGS7i 
Default region name [None]: ap-southeast-1 
Default output format [None]: json

옵션을 주지 않고 실행하면 default 프로필로 생성되고 ~/.aws/하위에 관련 파일이 생성됩니다.

$ cd ~/.aws
$ ls
config      credentials

특정 이름의 프로필로 생성하려면 다음과 같이 진행합니다.

$ aws configure --profile codej99

awscli로 인증설정이 제대로 되었는지 확인 합니다. 인증설정이 안되어있으면 아래 명령어를 실행했을때 결과를 얻지 못합니다. 문제없이 설정되었다면 json으로 결과가 출력되는것을 확인할 수 있습니다.

// default profile
$ aws ec2 describe-instances
// 특정 프로파일 지정
$ aws ec2 --profile codej99 describe-instances

Serverless Framework 설치

serverless는 lambda를 개발하고 aws 배포까지 손쉽게 할수 있도록 도와주는 프레임 워크입니다. 자세한 내용은 아래 링크를 확인하시면 됩니다. curl로 설치 하거나 npm 명령으로 설치합니다.

https://serverless.com/framework/docs/

// curl 혹은 npm 둘중 한 방식을 선택하여 설치
$ curl -o- -L https://slss.io/install | bash
// npm으로 설치
$ npm i -g serverless

awslogs 설치

lambda 함수가 aws에 배포된 상태에서 실행 로그를 확인하려면 cloudwatch를 통해 확인해야 합니다. 매번 웹 콘솔을 열고 확인하는 것은 불편하기도 하고 tail 로그는 웹 브라우저 보다는 터미널에서 확인하기 좋습니다. 아래 링크의 awslogs를 설치하면 원격에서 실행되는 lambda의 실행로그를 로컬 pc의 터미널에서 실시간으로 확인할 수 있습니다.

https://github.com/jorgebastida/awslogs

설치

$ brew install python
$ sudo pip install awslogs 또는 pip3 install awslogs

로그확인

– awslogs get /aws/lambda/[로깅할 lambda함수명] -S -G –watch

$ awslogs get /aws/lambda/hello-lambda-dev-run -S -G —watch

여기까지 진행하면 로컬에서 lambda를 개발하기 위한 환경이 완료됩니다.
다음장에서는 helloworld 람다 만들기를 진행해 보겠습니다.

연재글 이동
[다음글] aws lambda 개발하기(2) – hellolambda, Gateway 트리거