express serverless 구축(1)

Lambda Express API 서버 구축하기

람다와 express 를 이용하여 API 서버를 구축해보자.

- 프로젝트 생성

1
npm init

- 패키지 설치

1
2
npm install express aws-serverless-express
npm install serverless-offline -d

- 로컬에서도 express를 실행하며 테스트하고 배포는 람다로 하고싶다.

개발환경과 배포환경을 구분하여 개발을 진행해야한다. (나누어 진행하지 않는다면?? 매우 힘들다…)
serverless 는 serverless-offline 이라는 서비스를 지원하며 람다를 통해 배포한 환경과 동일한 환경에서 테스트를 로컬에서 실행이 가능하도록 해주는 패키지이다.

그래서 난 로컬환경에서 serverless-offline 을 통해 실행함과 더불어 일반적인 express 개발 환경처럼 직접 express 를 구동할 수 있도록 설정하기로 했다.

app.js

1
2
3
4
5
6
7
8
9
10
11
12
const express = require('express');
const { initialize } = require('./init');

const app = express();

initialize(app);

app.get('/api/v1/meta', async (req, res) => {
return res.json({});
});

module.exports = app;

app.js 에서는 기본적인 express 의 구조로 작성했다.


local.js

1
2
3
4
5
6
7
const app = require('./app');

const port = process.env.PORT || 9000;

app.listen(port, () => {
console.log(`localhost:${port} start app`);
});

뭐 크게 특별하지 않다. 왜냐면 회사에서 람다로 api 를 구축하기 전 테스트 단계이니까.👏👏👏


lambda.js

1
2
3
4
5
6
'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const server = awsServerlessExpress.createServer(app)

exports.handler = (event, context) => { awsServerlessExpress.proxy(server, event, context) }

lambda.js 에서는 express 를 lambda 함수로 실행할 수 있도록 하기 위해 작성한다.



- serverless.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
service: express-lambda-test

plugins:
- serverless-offline

custom:
stage: ${opt:stage, self:provider.stage}
environment: ${file(env.yml):${self:custom.stage}, file(env.yml):default}

provider:
name: aws
runtime: nodejs16.x
memorySize: 256
timeout: 20
stage: ${opt:stage, 'dev'} # option -s or default stage('dev')
region: ap-northeast-2
environment:
NODE_ENV: ${self:custom.environment.NODE_ENV}


functions:
app:
handler: ./src/lambda.handler
events:
- http:
path: /
method: any
cors: true
- http:
path: '/api/v1/{proxy+}'
method: any
cors: true



- 람다 배포

람다를 통해 api 호출해서 응답을 받기 위한 준비는 끝났고 배포만 진행하면 된다.

1
serverless deploy --stage dev




- 호출해보기


간단하게 알아보았으니 이제 lambda 가 어떻게 api 를 호출하는지 알아보자.

Author

han Ju Ryeon

Posted on

2022-06-15

Updated on

2022-06-19

Licensed under

댓글