- aws lambda 개발하기(1) – 로컬 개발 환경 구축(node.js + serverless)
- aws lambda 개발하기(2) – hellolambda, Gateway 트리거
- aws lambda 개발하기(3) – node package(모듈)설치 및 개발, 환경변수 적용
- aws lambda 개발하기(4) – serverless로 트리거(trigger), 대상(destination), 실행역할(role), VPC, 기본 설정
- aws lambda 개발하기(5) – serverless plugin (offline, prune plugin)
- aws lambda 개발하기(6) – Multi Endpoint Restful api 개발
- aws lambda 개발하기(7) – CircleCI를 이용하여 자동 배포하기
- aws lambda 개발하기(8) – Asynchronous Tasks by SQS(Simple Queue Service)
- aws lambda 개발하기(9) – Lambda Layer 이용하여 배포 사이즈 줄이기
이번 장에는 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