반응형
문제상황
람다로 환경변수를 설정하고 사용하는데
로컬에서는 환경변수가 없기 때문에 소스에서 환경변수 없을 경우 처리해주는 구문을 추가해서 사용
하지만 보안을 강화하기 위해서 환경변수를 소스에서 제외하려고 합니다
if(!process.env.PUSH_TABLE) process.env.PUSH_TABLE = 'DynamoDB-Name';
if(!process.env.AWS_DEPLOY_REGION) process.env.AWS_DEPLOY_REGION = 'ap-northeast-2';
해결방법
dotenv 를 이용해서 환경변수를 .env 파일로 빼고
.env 파일을 .gitignore 에서 제외시켜준다
사용방법
로컬에서만 사용할 것이니 save-dev 로 dotenv 설치
npm install --save-dev dotenv
.gitignore 파일에 .env 파일 추가
//.gitignore
# package directories
node_modules
jspm_packages
# Serverless directories
.serverless
#Environment Variables
.env
.env 파일을 소스 루트폴더에 만들고 환경변수 추가
//.env
PUSH_TABLE = 'DynomaDB-Name'
AWS_DEPLOY_REGION = 'ap-northeast-2'
소스 수정
'use strict';
//dotenv 추가
require('dotenv/config');
const AWS = require('aws-sdk');
//환경변수 설정부분 삭제
//if(!process.env.PUSH_TABLE) process.env.PUSH_TABLE = 'AppPushUser-dev';
//if(!process.env.AWS_DEPLOY_REGION) process.env.AWS_DEPLOY_REGION = 'ap-northeast-2';
실행결과
require('dotenv/config'); 실행되면서 .env 파일의 변수 설정 값을 process.env 환경변수로 만들어 주기 때문에
이전과 동일하게 정상적으로 실행이 잘 된다
로컬 PC 에서는 말이다
람다로 배포 후 실행결과
2019-08-05T01:12:07.138Z undefined ERROR Uncaught Exception
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'dotenv/config'",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module 'dotenv/config'",
" at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:36:30)",
" at Module._compile (internal/modules/cjs/loader.js:776:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)",
" at Module.load (internal/modules/cjs/loader.js:653:32)",
" at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
" at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
" at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)",
" at startup (internal/bootstrap/node.js:283:19)"
]
}
역시나 오류가 난다
이유는 save-dev 로 개발환경만 dotenv 설치했으니 배포 라이브러리에는 dotenv 가 없다
해결방법
dotenv 를 소스에서 사용하지 않는다
require('dotenv/config'); 를 소스에서 제거하고
테스트 실행시에 CLI 에서 dotenv/config 를 설정해준다
소스 수정
'use strict';
//dotenv 제거
//require('dotenv/config');
const AWS = require('aws-sdk');
테스트 실행시
//dotenv 적용전
node localtest/historys.test.js
//dotenv 적용하여 실행
node -r dotenv/config localtest/historys.test.js
//dotenv .env 파일의 위치 지정
node -r dotenv/config localtest/historys.test.js dotenv_config_path=/파일위치/.env
dotenv 관련되어 환경변수로 설정도 가능합니다
//dotenv 환경변수 설정 (windows)
set DOTENV_CONFIG_PATH=/.env/
set DOTENV_CONFIG_ENCODING=latin1
set DOTENV_CONFIG_DEBUG=true
결론
dotenv 를 활용해서 환경변수를 소스에서 제거 하고
테스트 js 파일에서 dotenv/config 를 사용해서 환경변수를 처리하자
아래는 테스트 파일의 예제
'use strict';
require('dotenv/config');
const lambda = require("../src/handlers/historys");
let event = {
"pathParameters" : {
"id" : "1634021"
}
}
lambda.handler(event);
반응형
'IT > Frontend' 카테고리의 다른 글
Our Next Web Framework is Vue (0) | 2020.02.13 |
---|---|
AWS Lambda 를 이용한 Nuxt.js 프로젝트 구현 (0) | 2019.12.03 |
갤럭시 S 시리즈 출시일 (0) | 2019.10.29 |
Frontend 웹개발 연습환경 (0) | 2019.08.16 |
이미지 라이브러리 sharp (0) | 2019.08.04 |
java vs javascript 차이 (0) | 2019.08.04 |
var let const (0) | 2019.08.04 |
Javascript 날짜에 타임존 적용 (1) | 2019.08.02 |