일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- back-end
- node.js
- 자바
- spring boot
- component
- state
- vue
- 코틀린
- It
- restful api
- 개발자
- 개발이 취미인 사람
- props
- react
- Nest.js
- Sequelize
- front-end
- java
- SWIFT
- Kotlin
- swagger
- Producer
- 조건문
- 반복문
- AWS
- kafka
- javascript
- class
- file upload
- 상속
- Today
- Total
개발이 취미인 사람
[AWS] Lambda 개발 & 배포 환경 설정(serverless.yml ) 본문
- 개요
안녕하세요. 이번 시간에는 Serverless Framework에서 환경설정을 하는 방법에 대해 알아보겠습니다.
지난 시간에는 API 환경을 구축하는 시간을 가졌습니다. 보통 우리가 개발을 할 때 "개발 환경"과 "배포 환경"을 나눠서 개발을 진행합니다.
안 그렇게 되면... 정말 불편한 상황들이 발생하기 때문에 우리 여러 가지 전략을 새우고 진행합니다.
이번 시간에는 간단한 환경 설정을 하는 방법에 대해 알아보겠습니다.
- 설정
Node.js 에서 환경변수에 접근하는 방법은 "process.env.PORT"과 같이 사용합니다.
Serverless Framework를 사용하면 serverless.yml 파일에 환경변수를 등록해 사용하면 됩니다.
1. env 폴더 생성(dev.json & production.json 파일 생성)
원하는 위치에 env폴더를 생성하고 아래 dev.json & production.json 파일을 생성합니다. (이름은 원하는 이름으로 설정해도 됩니다.)
dev.json
{
"MariaDB_HOST": "localhost",
"MariaDB_PORT":3306,
"MariaDB_USER":"root",
"MariaDB_PASSWORD":"",
"MariaDB_NAME":"Ryan",
"Redis_HOST": "localhost",
"Redis_PORT": 6379
}
MariaDB와 Redis 정보를 등록했습니다. production.json 파일도 동일한 구조를 생성하지만 내용은 필요에 맞게 설정해서 하면 됩니다.
serverless.yml 파일 설정
지난 시간에 serverless.yml 파일을 몇 가지 등록해서 사용했습니다. 방금 작성한 dev.json 파일을 등록해주면 됩니다.
custom:
env: ${file(./env/${opt:stage,'dev'}.json)} # 환경변수 정보 JSON 파일을 불러온다.
serverless-offline:
httpPort: 4000 # 로컬 포트
lambdaPort: 4001 # 람다 포트
provider:
name: aws
runtime: nodejs12.x #서버 버전
lambdaHashingVersion: 20201221 #생성 날짜
stage: production # 배포 상태를 지정 default : dev
region: ap-northeast-2 # AWS Region을 지정합니다.
#환경 변수에 맞게 값을 설정한다.
environment:
MariaDB_HOST: ${self:custom.env.MariaDB_HOST}
MariaDB_PORT: ${self:custom.env.MariaDB_PORT}
MariaDB_USER: ${self:custom.env.MariaDB_USER}
MariaDB_PASSWORD: ${self:custom.env.MariaDB_PASSWORD}
MariaDB_NAME: ${self:custom.env.MariaDB_NAME}
Redis_HOST: ${self:custom.env.Redis_HOST}
Redis_PORT: ${self:custom.env.Redis_PORT}
env 환경을 설정합니다. 배포 시에는 배포 파일명을 작성해야 합니다. 그래야 적용이 가능합니다.
Ex): env: ${file(./env/${opt:stage,'dev'}.json)} -> env: ${file(./env/${opt:stage, 'production'}. json)}
serverless.yml 파일에 등록하면 이제 우리는 사용할 수 있습니다.
MariaDBConnection.js
const mysql = require('mysql2/promise');
const db = mysql.createPool({
host: process.env.MariaDB_HOST,
port: process.env.MariaDB_PORT,
user: process.env.MariaDB_USER,
password: process.env.MariaDB_PASSWORD,
database: process.env.MariaDB_NAME,
waitForConnections: true, // 풀에 여유 커넥션이 없는 경우 대기 여부
connectionLimit: 1, // 최대 거넥션 개수, 기본 10
});
module.exports = db
제가 사용하는 모듈을 사용하지 않으셔도 됩니다. 제일 중요한 건 process.env.MariaDB_HOST 부분입니다.
dev.json 파일에 등록한 값이 프로젝트 어디에서든 사용이 가능하다는 겁니다. :)
- 추가 사항(VPC 환경 설정)
custom:
env: ${file(./env/${opt:stage,'dev'}.json)} # 환경변수 정보 JSON 파일을 불러온다.
serverless-offline:
httpPort: 4000 # 로컬 포트
lambdaPort: 4001 # 람다 포트
provider:
name: aws
runtime: nodejs12.x #서버 버전
lambdaHashingVersion: 20201221 #생성 날짜
stage: production # 배포 상태를 지정 default : dev
region: ap-northeast-2 # AWS Region을 지정합니다.
#환경 변수에 맞게 값을 설정한다.
environment:
MariaDB_HOST: ${self:custom.env.MariaDB_HOST}
MariaDB_PORT: ${self:custom.env.MariaDB_PORT}
MariaDB_USER: ${self:custom.env.MariaDB_USER}
MariaDB_PASSWORD: ${self:custom.env.MariaDB_PASSWORD}
MariaDB_NAME: ${self:custom.env.MariaDB_NAME}
Redis_HOST: ${self:custom.env.Redis_HOST}
Redis_PORT: ${self:custom.env.Redis_PORT}
#VPC 영역 설정
vpc:
securityGroupIds:
- sg-0796d98969be08b68
subnetIds:
- subnet-08bb6bd0009ce964d
- subnet-04ffcf71a770411e2
배포하는 VPC 영역이 나눠서 있다면 우리는 직접 설정을 해야 합니다.
전체 소스(serverless.yml)
service: serverless-api
frameworkVersion: "2"
custom:
env: ${file(./env/${opt:stage,'dev'}.json)} # 환경변수 정보 JSON 파일을 불러온다.
serverless-offline:
httpPort: 4000 # 로컬 포트
lambdaPort: 4001 # 람다 포트
provider:
name: aws
runtime: nodejs12.x #서버 버전
lambdaHashingVersion: 20201221 #생성 날짜
stage: production # 배포 상태를 지정 default : dev
region: ap-northeast-2 # AWS Region을 지정합니다.
#환경 변수에 맞게 값을 설정한다.
environment:
MariaDB_HOST: ${self:custom.env.MariaDB_HOST}
MariaDB_PORT: ${self:custom.env.MariaDB_PORT}
MariaDB_USER: ${self:custom.env.MariaDB_USER}
MariaDB_PASSWORD: ${self:custom.env.MariaDB_PASSWORD}
MariaDB_NAME: ${self:custom.env.MariaDB_NAME}
Redis_HOST: ${self:custom.env.Redis_HOST}
Redis_PORT: ${self:custom.env.Redis_PORT}
#VPC 영역 설정
vpc:
securityGroupIds:
- sg-0796d98969be08b68
subnetIds:
- subnet-08bb6bd0009ce964d
- subnet-04ffcf71a770411e2
functions:
api:
handler: handler.index
#API 경로를 등록해줘야 한다.(해당 API를 통해 API Gateway에 등록며 개발환경에서도 등록해야 된다.)
events:
- http:
path: /api
method: get
plugins:
- serverless-offline
'백앤드(Back-End) > AWS' 카테고리의 다른 글
[AWS] Lambda API 구축(aws-serverless-express) (0) | 2021.09.28 |
---|---|
[AWS] Lambda 구축 (Serverless Framework) (0) | 2021.09.28 |
[AWS] Lambda 구축 (AWS Console) (0) | 2021.09.28 |
[AWS] Lambda 개념 및 로컬 환경 설정(Mac + Node + Serverless) (0) | 2021.09.28 |
[AWS] SMS 문자 메시지 전송 (Simple Notification Service) (5) | 2021.09.11 |