node.js express 환경변수 만드는 스크립트

doldolma·2021년 10월 22일
2

express로 API서버를 개발중인데 환경변수 관리 방법에 대한 고민이 생겼다.

.env.production에 환경변수를 넣고 dotenv로 불러오고 있는데 git에 올리기보다 aws parameter store에 저장하고 불러오기로 했다.

AWS parameter store는 표준유형으로 만들면 1천개까지 무료로 만들 수 있다.

aws 콘솔에 접속하면 쉽게 만들 수 있다.

이제 배포할 서버에 aws-cli를 설치하고 불러오면 된다.

알아보니 이런식으로 하나씩 불러와서 export 하는데.. 이러면 dotenv를 쓸 필요가 없어진다.

개발중에 사용하는 환경변수도 있는데 이렇게 배포와 개발환경이 다르면 너무 불편할 것 같다..

aws ssm get-parameters --name DATABASE_USERNAME DATABASE_PASSWORD \
                              DATABASE_DB DATABASE_PORT DATABASE_HOST \
                              ACCESS_SECRET REFRESH_SECRET --query Parameters | \
python3 -c '
import json, sys
print("\n".join([param["Name"]+"="+param["Value"] for param in json.load(sys.stdin)]))
' > .env.production

그래서 setup_env.sh 라는 환경변수 파일을 만들어주는 스크립트 만들었다.
aws-cli는 JSON형태로 데이터를 잔뜩 주는데 파이프를 통해 파이썬으로 보내 준 후에 키와 값을 파싱한 후 환경변수 파일에 덮어써줬다.

aws-cli를 통해 받아온 이후 .env.production 파일을 만들고 express가 실행될 때 dotenv를 통해 읽어오는 것이다.

하지만 환경변수가 늘어날때마다 같이 수정해줘야 해서 한번에 파라미터들을 가져와서 파일로 만들 수 있는 방법을 고민해봤다..

aws parameter store에서는 경로를 설정할 수 있다.
프로젝트 별로 서로 다른 경로를 사용해서 구분할 수 있게 해둔것이다.

그래서 aws-cli에서 현재 프로젝트에 해당하는 파라미터들을 전부 가져오게 다시 만들었다.

#!/bin/bash
aws ssm get-parameters-by-path --path /Gunsigi --query Parameters | \
python3 -c '
import json, sys
print("\n".join([param["Name"].rsplit("/", 1)[-1]+"="+param["Value"] for param in json.load(sys.stdin)]))
' > .env.production

Gunsigi 경로에 있는 파라미터들을 전부 가져와서 환경변수 파일로 만든다.

profile
코딩은 재밌어

0개의 댓글