AWS까지 배우기엔 너무 힘들어요
Lambda
는 매력적인 서비스입니다.
실제 사용된 만큼만 과금되기 때문에 사용자가 없는 시간에는 요금이 절감되고.
아마존이 가진 pool
에 배포된 code
넣어 실행하는 형태이기 때문에,
사용자가 급증해도 유연한 대처가 가능하기 때문이죠.
다만 Lambda
혼자서는 제 역할을 할 수 없는데,
실제 서비스를 제공하려면, Lambda
만 설정해야 될 것이 아니라,Lambda Apllication
, API Gateway
와 같은 부가적인 설정도 이루어져야 합니다.
이걸 프로그래머가 혼자 다 설정해야 한다니...
코딩하는걸 더 좋아하는 사람에겐 생지옥이 따로 없습니다.
효과적인 대안이 어디 없을까요?
serverless
이런 경우에는 serverless
프레임워크가 좋은 선택일 확률이 매우 높습니다.
람다 배포시에 같이 해줘야하는 부가적인 설정들을 알아서 처리해주기 때문에,
프로그래머는 순수하게 람다에 배포할 코드
에만 집중할 수 있습니다.
이 포스팅에서는 타입스크립트로 작성한 코드를 serverless
를 통해 Lambda
에 배포하는 것을 목표로 하겠습니다.
설치하기
serverless
먼저 기본적인 타입스크립트 세팅을 마친 뒤에,
다음 명령어를 통해 serverless
프레임워크를 설치합니다.
$ npm install -d serverless
aws-lambda
이름 그대로 AWS Lmabda
와 관련된 라이브러리입니다.
$ npm install aws-lambda
$ npm install -d @types/aws-lambda
serverless-plugin-typescript
별도의 컴파일없이 TypeScript
를 사용할 수 있도록 도와주는 플러그인입니다.
$ npm install -d serverless-plugin-typescript
serverless-offline
로컬에서 람다환경을 테스트할 수 있도록 도와주는 플러그인입니다.
$ npm install -d serverless-offline
인증서 등록
Via AWS-CLI
로컬에 AWS-CLI
가 설치되어 있고 configure
이 완료되어 있는 상태라면,
해당 컴퓨터에는 이미 shared-credntials
가 등록된 상태이므로 이 단계를 건너뛰어도 됩니다.
Via serverless
AWS-CLI
없이 serverless
에 공개키와 비밀키를 넣어 credentials
를 등록할 수 있습니다.
아래 명령어처럼 공개키와 비밀키를 넣어주세요.
serverless config credentials \
--provider aws \
--key xxxxxxxxxxxxxx \
--secret xxxxxxxxxxxxxx
함수 작성하기
아래와 같은 형태로 핸들러를 작성해주세요.
여기서는 간단하게 Hello, World!
를 반환하는 코드를 작성하겠습니다.
import { APIGatewayEvent } from "aws-lambda";
/**
* 서버리스 람다 핸들러 타입
*/
type ServerlessHandler = (
event: APIGatewayProxyEvent,
context: Context
) => Promise<APIGatewayProxyResult>;
export const hello_handler : ServerlessHandler = async (event) => {
return {
statusCode: 200,
body: `Hello, World!`
};
};
설정파일 만들기
만들어진 람다함수를 라우팅하기 위해서는,
프로젝트 최상위에 serverless.yml
파일을 작성해야 합니다.
handler
에는 타입스크립트 파일경로
.핸들러이름
형태로 적어야 합니다.
그 다음 path
에는 라우팅할 경로를 적어주세요.
service: hello-world
provider:
runtime: nodejs12.x
name: aws
stage: dev
region: ap-northeast-2
functions:
main:
handler: /your/path/filename.hello_handler
events:
- http:
path: /
method: get
cors: true
plugins:
- serverless-plugin-typescript
- serverless-offline
주의해야 할 점은 plugins
에서 serverless-plugin-typescript
가 serverless-offline
보다 위에 있어야 합니다.
배포하기
아래 두 명령어로 람다에 배포하거나 로컬에서 테스트할 수 있습니다.
# 람다에 배포
$ npm run deploy
# 로컬에서 테스트
$ npm run offline
삭제하기
아래 명령어로 람다를 삭제할 수 있습니다.
serverless remove
'# DevNote > AWS' 카테고리의 다른 글
[ELB] 로드 밸런서를 사용하여 EC2에 HTTPS로 연결하기 (0) | 2020.05.18 |
---|---|
[ECS] 도커를 통해 ECS EC2에 배포하기 (0) | 2020.05.17 |
[CloudFront, Lambda@Edge] Next를 serverless하게 배포하기 (0) | 2020.05.17 |
[RDS] PostgreSQL 외부접속 허용하기 (0) | 2020.03.17 |