우당탕탕 우리네 개발생활

[serverless+typescript+aws+googleapis] (1) aws 계정설정과 serverless framework 기본 설정하기 본문

tech

[serverless+typescript+aws+googleapis] (1) aws 계정설정과 serverless framework 기본 설정하기

미스터카멜레온 2024. 8. 29. 09:47
 

[번역]빠르게 배워보는 Node.js를 이용한 서버리스(Serverless)

*이 글은 Adnan Rahić의 A crash course on Serverless with Node.js를 번역한 글입니다. 모든 저작권과 권리는 Adnan에게 있습니다. 도움이 되셨다면 Adnan의 원글에 clap 한번씩 부탁드립니다 :)…

medium.com

 

Node.js (typescript) - Serverless 구현 1. 설치

프로젝트로 Node.js를 공부하던 중 AWS 배포에 대한 의견이 나와서, 대비하는 겸 Serverless 개념으로 구축을 해보았습니다. ( Serverless는 사이드 프로젝트일 때 비용을 낮출 수 있다 ) 환경은 Intellij + No

chamch-dev.tistory.com

위 블로그들이 너무 기본 설정에 대해 설명이 잘 나와있어서 참고하여 아래 목록들을 셋팅합니다.(위 블로그들에 좋아요 꼭 부탁드려요! 너무 좋은 글들이에요!!)

 

1. AWS IAM 통해서 lambda 접근 권한이 있는 계정을 생성합니다.

 

2. 앞서 만든 IAM 계정에 accesskey, secretkey 생성합니다.(secretkey는 생성 당시에만 확인이 가능하니 반드시 어딘가에 저장을 해둬야합니다!)

 

3. serverless framework 를 설치합니다.(serverless v4 부터는 유료이므로 v3 중 적당한 버전으로 진행하시면 무료로 이용하실 수 있습니다.)

npm install -g serverless@3.0.0

 

4. typescript template으로 프로젝트를 생성합니다.

sls create --template aws-nodejs-typescript

 

5. serverless config에 aws accesskey, secretkey 를 등록합니다.

serverless config credentials --provider aws --key xxxxxxxxxxxxxx --secret xxxxxxxxxxxxxx

 

6. serverless offline 을 설치합니다.

npm install serverless-offline --save-dev

 

7. serverless.ts 파일에 serverless-offline 플러그인을 설정합니다.

// serverless.ts

import type { AWS } from "@serverless/typescript";
import hello from "@functions/hello";
import spreadSheet from "@functions/spread-sheet";

const serverlessConfiguration: AWS = {
  service: "spreadsheet-serverless",
  frameworkVersion: "3",
  // 여기에 serverless-offline 플러그인을 추가합니다.
  // 특정 사례에 따라 plugin들의 순서가 중요해지니 염두에 두시기 바라겠습니다.
  plugins: ["serverless-esbuild", "serverless-offline"],
  provider: {
    name: "aws",
    runtime: "nodejs16.x",
    region: "ap-northeast-2",
    apiGateway: {
      minimumCompressionSize: 1024,
      shouldStartNameWithService: true,
    },
    environment: {
      AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1",
      NODE_OPTIONS: "--enable-source-maps --stack-trace-limit=1000",
    },
  },
  functions: { hello, spreadSheet },
  package: {
    individually: true,
    patterns: [
      "node_modules/.prisma/client/libquery_engine-rhel-openssl-1.0.x.so.node",
    ],
  },
  custom: {
    esbuild: {
      bundle: true,
      minify: true,
      sourcemap: true,
      target: "node16",
      platform: "node",
      external: ["aws-sdk"],
      define: { "require.resolve": undefined },
      plugins: [],
    },
  },
};

module.exports = serverlessConfiguration;

 

8. serverless-offline 을 명령어로 실행해봅니다.

sls offline

 

9. function을 production으로 배포합니다.

sls deploy