본문 바로가기

ChatGPT/AWS Serverless

[AWS][LAMBDA] SERVERLESS FRAMEWORK 개발하기 - 1

반응형

이 블로그에서는 AWS Serverless Framework를 사용하여 TypeScript와 Express를 사용하는 서버리스 애플리케이션을 구축하는 방법에 대해 설명합니다.

 

이 프로젝트에서는 serverless-plugin-typescript 대신 serverless-esbuild와 serverless-offline을 사용합니다.

 

준비 사항

  • Node.js (v16 이상 권장)
  • Serverless Framework
  • AWS 계정 및 CLI 설정

 

프로젝트 생성 및 초기 설정

 

1. 프로젝트 디렉토리 생성 및 이동:

mkdir my-service
cd my-service

 

2. Serverless Framework를 초기화하고 TypeScript 템플릿을 사용합니다.

serverless create --template aws-nodejs-typescript

 

3. 생성된 프로젝트에서 필요한 npm 패키지를 설치합니다.

npm install

 

4. Express 및 관련 패키지를 설치합니다.

npm install express serverless-http

 

5. src 디렉토리에 app.ts 파일을 생성하고 다음 내용을 작성합니다.

import express, { Request, Response } from 'express';

const app = express();

app.get('/hello', (req: Request, res: Response) => {
  res.send('Hello from Serverless TypeScript Express app!');
});

export default app;

 

6. src/handler.ts 파일을 열어, Express 앱을 AWS Lambda에 통합하기 위해 serverless-http를 사용하도록 수정합니다.

import serverless from 'serverless-http';
import app from './app';

export const handler = serverless(app);

 

반응형

 

Serverless 설정

 

1. serverless.yml 파일을 열어 다음과 같이 수정합니다.

service: my-service

provider:
  name: aws
  runtime: nodejs16.x
  lambdaHashingVersion: 20201221
  stage: dev
  region: ap-northeast-2

plugins:
  - serverless-esbuild
  - serverless-offline

functions:
  app:
    handler: src/handler.handler
    events:
      - http:
          path: /
          method: ANY
          cors: true
      - http:
          path: /{proxy+}
          method: ANY
          cors: true

 

2. tsconfig.json 파일에서 "module": "commonjs"를 "module": "esnext"로 변경합니다. 그리고 package.json 파일에 다음과 같이 "type": "module"을 추가합니다.

{
  "compilerOptions": {
    "moduleResolution": "node",
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "ES2020",
    "baseUrl": "./src",
    "allowSyntheticDefaultImports": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "module": "esnext"
  },
  "include": ["src/**/*.ts"],
  "exclude": [
    "node_modules/**/*",
    ".serverless/**/*",
    ".webpack/**/*",
    "_warmup/**/*",
    ".vscode/**/*"
  ]
}
{
  "name": "my-service",
  "version": "1.0.0",
  "description": "Serverless aws-nodejs-typescript template",
  "module": "type",
  "main": "src/handler.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "engines": {
    "node": ">=14.15.0"
  },
  "dependencies": {
    "@middy/core": "^3.4.0",
    "@middy/http-json-body-parser": "^3.4.0",
    "express": "^4.18.2",
    "serverless-http": "^3.2.0"
  },
  "devDependencies": {
    "@serverless/typescript": "^3.0.0",
    "@types/aws-lambda": "^8.10.71",
    "@types/express": "^4.17.17",
    "@types/node": "^14.14.25",
    "esbuild": "^0.14.11",
    "json-schema-to-ts": "^1.5.0",
    "serverless": "^3.0.0",
    "serverless-esbuild": "^1.43.0",
    "serverless-typescript": "^0.0.5",
    "ts-node": "^10.4.0",
    "tsconfig-paths": "^3.9.0",
    "typescript": "^4.9.5"
  },
  "author": "The serverless webpack authors (https://github.com/elastic-coders/serverless-webpack)",
  "license": "MIT"
}

 

로컬에서 애플리케이션 실행

 

1. 로컬에서 애플리케이션을 실행하려면 다음 명령어를 실행하세요.

sls offline

 

이 명령어는 프로젝트를 빌드하고 로컬에서 테스트할 수 있는 HTTP 엔드포인트를 생성합니다.


 

2. 웹 브라우저에서 http://localhost:3000로 이동하거나 curl http://localhost:3000을 실행하여 애플리케이션의 작동을 확인하세요.


 

프로젝트 배포

 

1. AWS에 프로젝트를 배포하려면 다음 명령어를 실행하세요.

sls deploy

 

2. 배포가 완료되면 serverless.yml 파일에 정의된 API Gateway 엔드포인트를 사용하여 배포된 애플리케이션에 액세스할 수 있습니다.

 

AWS 서비스에서 해당 컴포넌트들이 잘 생성된 것을 아래와 같이 확인할 수 있습니다. 

 

 

이제 Serverless Framework를 사용하여 TypeScript와 Express를 사용하는 서버리스 애플리케이션을 구축하는 방법에 대해 알게 되었습니다.

 

프로젝트에서는 serverless-plugin-typescript 대신 serverless-esbuild와 serverless-offline을 사용하여 개발 및 배포를 진행할 수 있습니다.

 

이를 통해 더 빠른 빌드 및 더 나은 개발 경험을 얻을 수 있습니다.

 

반응형