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

이번 장에는 serverless의 기능을 이용하여 lambda 코드가 동작하기 위해 필요한 환경설정을 자동으로 적용하는 방법에 대하여 실습하겠습니다. lamdba 페이지의 Designer 영역을 통해 트리거와 대상 추가가 가능한데 다음과 같이 serverless.yml에 설정을 추가하여 적용이 가능합니다.

트리거(trigger) 설정

트리거는 lambda의 실행을 일으키게 하는 매개체로서 매우 다양한 항목을 지원하고 있으며 실습에서는 많이 사용하는 Gateway를 트리거로 설정하는 방법에 대해 설명하겠습니다.

신규 API Gateway 생성 후 엔드포인트 설정

serverless.yml의 function 하위 event.http 항목을 세팅하면 배포시 자동으로 Gateway 엔드 포인트로 세팅됩니다.

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: hello/get
          method: get
          cors: true

기존 Gateway에 엔드포인트 설정

이미 생성되어있는 Gateway에 엔트포인트를 설정하려면 provider 하위에 apiGateway 항목을 추가하면 됩니다.

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-northeast-2
  profile: happydaddy
  apiGateway: 
    restApiId: ezq7plb9t6
    restApiRootResourceId: 0q66ks9ya8

대상(destination) 추가

lambda의 실행후 성공, 실패에 따른 추가 작업을 위해 세팅합니다. Lambda를 다시 호출하거나 SQS, SNS, EventBridge 이벤트 버스와 연동이 가능합니다.

대상을 추가하기 전에 관련 리소스가 생성되어 있어야 연결할 수 있습니다. 리소스를 생성한후 생성된 arn값을 다음과 같이 function아래에 세팅하고 배포하면 적용이 됩니다. 아래는 성공 실패시 각각 SQS와 SNS를 설정한 예제입니다.

Serverless Document 상으로는 아래와 같이 destinations를 세팅하면 적용이 되야 하는데 저의 경우는 설정이 적용되지 않았습니다.ㅜㅡㅜ 참고만 부탁드립니다. 혹시 설정 성공하신 분은 알려주시면 감사하겠습니다^^;

functions:
  hello:
    handler: handler.hello
    destinations:
      onSuccess: arn:aws:sqs:ap-northeast-2:478069740483:succ-lambda
      onFailure: arn:aws:sns:ap-northeast-2:478069740483:fail-lambda

참고) https://serverless.com/blog/lambda-destinations/

환경변수 추가

lambda 코드 내에서 사용되는 환경변수를 다음과 같이 provider하위의 environment에 설정하면 배포시 자동으로 전역 환경변수로 등록됩니다. function에만 적용되는 변수일경우 특정 function 하위에 적용하면 됩니다.

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-northeast-2
  profile: happydaddy
  environment:
    key1: 
      value1
    key2:
      value2

실행역할(role) 설정

실행역할을 지정하지 않으면 배포시 자동으로 serverless가 역할을 생성해 세팅합니다. IAM에서 만들어둔 기존 역할과 연결하려면 다음과 같이 provider아래에 role항목을 세팅하고 배포합니다.

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-northeast-2
  profile: happydaddy
  role: arn:aws:iam::455061640493:role/serverless-role

VPC 설정

vpc 설정이 필요하면 provider하위에 vpc 내용을 기재하면 배포시 적용됩니다.

provider:
  name: aws
  runtime: nodejs12.x
  ap-northeast-2
  profile: happydaddy
  vpc:
    securityGroupIds:
      - sg-07d71076127c89f08
    subnetIds:
      - subnet-00f9bde94dc9b7fd1
      - subnet-023g668c5d91d23c4
      - subnet-0c91ad437cf7f7c55

기본설정

lambda 함수에 대한 설명(description), 실행 환경의 메모리 사이즈(memorySize) 그리고 실행 제한시간(timeout)을 설정할수 있습니다.

provider 아래에 선언할 경우 환경 전체의 function에 적용됩니다.

provider:
  name: aws
  runtime: nodejs12.x
  memorySize: 512 # optional, in MB, default is 1024
  timeout: 10 # optional, in seconds, default is 6

특정 function 아래에 정의할 경우 해당 function에만 적용됩니다.

functions:
  hello:
    handler: handler.hello
    description: This function practices hellolambda.
    memorySize: 512 # optional, in MB, default is 1024
    timeout: 10 # optional, in seconds, default is 6

설정을 저장하고 배포를 진행하면 aws console에서 변경된 설정값을 확인할 수 있습니다.

지금까지 설명한 내용외에도 serverless.yml에 세팅할 수 있는 수많은 설정 옵션이 존재합니다. 해당 내용은 아래 링크를 참고 하시면 됩니다.

https://serverless.com/framework/docs/providers/aws/guide/serverless.yml/

실습 코드 GitHub 주소
https://github.com/codej99/SeverlessAwsLambda

연재글 이동[이전글] aws lambda 개발하기(3) – node package(모듈)설치 및 개발, 환경변수 적용
[다음글] aws lambda 개발하기(5) – serverless plugin (offline, prune plugin)