본문 바로가기

AWS

Serverless 프레임워크로 AWS Lambda 시작하기 ( GraphQL포함)

728x90
반응형

npm으로 serverless 프레임워크 설치

npm install -g serverless

 

프로젝트 생성

sls create --template aws-nodejs --path first-lambda

아래 Open Source Page 확인

www.serverless.com/framework/docs/providers/aws/cli-reference/create/

 

Serverless Framework Commands - AWS Lambda - Create

Creates a new Service in your current working directory

www.serverless.com

템플릿 활용 프로젝트 생성 시 아래 두 파일이 중요

handler.js : 실행할 소스코드

serverless.yml : 서버리스의 배포 및 각종 설정 파일

 

GraphQL 연결 - Apollo Server 

www.apollographql.com/docs/

 

Documentation Home

Explore the Apollo platform

www.apollographql.com

handler 예시 

1. DB 연결 (사용자 권한 체크) -> 2. Apollo 서버 실행 -> 3. GraphQL 함수 모듈 실행 

import { ApolloServer } from 'apollo-server-lambda';
import { APIGatewayProxyEvent, APIGatewayProxyResult, Callback, Context } from 'aws-lambda';
import 'reflect-metadata';
import * as TypeGraphQL from 'type-graphql';
import resolvers from './resolvers';
import database from './utils/database';
import { userAuthChecker } from './utils/userAuthChecker';

const createHandler = async () => {
  (global as any).schema = (global as any).schema || (await TypeGraphQL.buildSchema({
    resolvers,
    validate: true,
    authChecker: userAuthChecker,
  }));
  const schema = (global as any).schema;

  await database();

  const server = new ApolloServer({
    schema,
    playground: true,
    context: ({ event, context }) => {
      context.callbackWaitsForEmptyEventLoop = false;
      const con = {
        headers: event.headers,
        event,
        context
      };
      return con;
    }
  });
  return server.createHandler({ cors: { origin: '*', credentials: true } });
};

exports.graphql = (event: APIGatewayProxyEvent, context: Context, callback: Callback<APIGatewayProxyResult>) => {
  createHandler().then((handler: any) => {
    context.callbackWaitsForEmptyEventLoop = false;    
    return handler(event, context, callback);
  });
};

 

서버리스 빌드 및 배포 -> S3에 소스 올라가며 람다 및 API Gateway생성

serverless deploy --stage product 

 

 

GraphQL Playgroud 실행 화면

 

 

API Gateway 자동 완성

728x90
반응형