Home AWS: Typescript + serverless aws lambda 배포
Post
Cancel

AWS: Typescript + serverless aws lambda 배포

목적

nodejs 환경에서 TypeScript로 작성된 어플리케이션을 serverless framework를 활용하여 람다에 배포

요구사항

  1. REST + AWSGatewayProxy
  2. POST with json body
  3. API KEY 기반 인증
  4. local 환경에서의 테스트
  5. 람다 함수 내부에서 API 외부 호출 (node-fetch)

본 글에서는 yarn을 활용하여 의존성 관리를 진행한다.

Serverless 설치

1
npm install -g serverless

의존성 설정

1
2
3
4
5
yarn init
yarn add @types/aws-lambda
yarn add serverless-plugin-typescript
yarn add serverless-offline -D
... #add optional dependencies

어플리케이션 작성 index.ts

api-gateway proxy를 통해 넘어오는 event값 내용을 확인

1
2
3
4
5
6
7
8
9
export async function echo(
    event: APIGatewayProxyEventV2
): Promise<APIGatewayProxyResultV2> {
    const requestBody = JSON.parse(event.body ?? "") // aws gateway proxy를 통해 넘어온 event의 body값을 통해 request body를 획득
		return {
        statusCode: 200,
				data: JSON.stringify(event)
		}
}

Serverless yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
service: {SERVICE_NAME_FOR_LAMBDA_APPLICATION}
plugins:
  - serverless-plugin-typescript # 필수
  - serverless-offline

provider:
  name: aws
  runtime: nodejs14.x
  region: ap-northeast-2

functions:
  metadata:
    handler: src/index.echo
    events:
      - http:
          path: echo
          method: post
          private: true # API 인증 활성화

Offline test

1
2
3
4
5
serverless offline

...
│   POST | http://localhost:3000/dev/echo                                │
...

Response

Postman을 사용하여 json body를 입력하고 POST 요청을 보내면 아래와 같은 결과 획득

1
2
3
4
5
6
7
{
    "resource": "/echo",
    "path": "/echo",
    "httpMethod": "POST",
    "body": ...
    ...
}

Deploy

1
2
3
4
5
6
7
serverless deploy

...
endpoint: POST - https://~~~/dev/echo
functions:
  echo: ...
...

위처럼 배포가 진행되고 완료되면 api endpoint와 배포된 람다 함수 목록을 확인 할 수 있다.

serverless.yml events에 private 설정을 안해뒀으면 바로 endpoint 호출이 가능하다.

API 키 생성 및 설정

이후 생성된 aws api gateway console에 접속하여 좌측 탭의 API 키 > 작업 > API 생성 및 사용량 계획을 생성하여 설정해주면 생성된 api key값을 헤더x-api-key에 추가하여 요청이 가능하다.

This post is licensed under CC BY 4.0 by the author.

Spring: Querydsl 환경설정 및 용례

안드로이드 자동배포(CI&CD) 구현 with GithubAction, AWS S3, Slack