날짜: 2024-07-29
보통 서비스를 배포할때 개발, 스테이징, 운영 등의 환경구분이 필요합니다.
AWS CodeDeploy를 사용하여 배포할 때 환경별로 다른 환경 변수를 지정하고, 애플리케이션에서 이를 동적으로 로드하는 방법에는 여러 가지가 있습니다. 주요 방법들을 소개해드리겠습니다
const AWS = require('aws-sdk');
const ssm = new AWS.SSM();
async function getParameter(name) {
const { Parameter } = await ssm.getParameter({ Name: name, WithDecryption: true }).promise();
return Parameter.Value;
}
// CodeDeploy 스크립트에서
cp /path/to/env_files/.env.${DEPLOYMENT_GROUP_NAME} .env
// 애플리케이션에서
require('dotenv').config();
const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();
async function getSecret(secretName) {
const data = await secretsManager.getSecretValue({ SecretId: secretName }).promise();
return JSON.parse(data.SecretString);
}
const databaseUrl = process.env.DATABASE_URL;
const fs = require('fs');
const config = JSON.parse(fs.readFileSync(`config.${process.env.NODE_ENV}.json`));
const AWS = require('aws-sdk');
const appconfig = new AWS.AppConfig();
async function getConfiguration(applicationId, environmentId, configurationProfileId) {
const { Content } = await appconfig.getConfiguration({
Application: applicationId,
Environment: environmentId,
Configuration: configurationProfileId,
ClientId: 'MyClientId'
}).promise();
return JSON.parse(Content.toString());
}
각 방법은 장단점이 있으므로, 프로젝트의 요구사항, 보안 정책, 관리의 편의성 등을 고려하여 선택하시면 좋습니다.
대규모 프로젝트의 경우 Parameter Store나 Secrets Manager를 사용하는 것이 관리와 보안 측면에서 유리할 수 있습니다. 작은 프로젝트라면 .env 파일이나 구성 파일을 사용하는 것이 간단하고 직관적일 수 있습니다.