Serverless 환경 변수
Serverless 환경 변수
Node.js에서는 현재 프로세스의 환경 변수에 접근하기 위해 process.env
를 사용합니다. AWS Lambda에서는 process.env
객체를 통해 접근할 수 있는 환경 변수를 설정할 수 있습니다.
이제 이를 어떻게 하는지 간단히 살펴보겠습니다.
환경 변수 정의하기
serverless.yml
파일에서 환경 변수를 두 가지 위치에 정의할 수 있습니다. 첫 번째는 functions
섹션입니다:
service: service-name
provider:
name: aws
stage: dev
functions:
hello:
handler: handler.hello
environment:
SYSTEM_URL: http://example.com/api/v1
여기서 SYSTEM_URL
은 정의하려는 환경 변수의 이름이고, http://example.com/api/v1
은 그 값입니다. 이 환경 변수는 hello
Lambda 함수에서 process.env.SYSTEM_URL
을 통해 접근할 수 있습니다:
export function hello(event, context, callback) {
callback(null, { body: process.env.SYSTEM_URL });
}
또한 환경 변수를 provider
섹션에서 전역적으로 정의할 수도 있습니다:
service: service-name
provider:
name: aws
stage: dev
environment:
SYSTEM_ID: jdoe
functions:
hello:
handler: handler.hello
environment:
SYSTEM_URL: http://example.com/api/v1
이전과 마찬가지로 SYSTEM_ID
환경 변수는 hello
Lambda 함수에서 process.env.SYSTEM_ID
를 통해 접근할 수 있습니다. 차이점은 이 환경 변수가 serverless.yml
에 정의된 모든 Lambda 함수에서 사용 가능하다는 점입니다.
provider
섹션과 functions
섹션 모두에 동일한 이름의 환경 변수가 정의된 경우, 함수별로 정의된 환경 변수가 우선 적용됩니다. 즉, provider
섹션에 정의된 환경 변수를 functions
섹션에서 재정의할 수 있습니다.
Serverless Framework에서 커스텀 변수 사용하기
Serverless Framework는 변수 개념을 일반화하여 serverless.yml
에서 환경 변수를 정의하고 작업하기 쉽게 만들어 줍니다.
예제를 통해 이 기능이 어떻게 동작하는지 간단히 살펴보겠습니다. 다음과 같은 serverless.yml
파일이 있다고 가정해 봅시다.
service: service-name
provider:
name: aws
stage: dev
functions:
helloA:
handler: handler.helloA
environment:
SYSTEM_URL: http://example.com/api/v1/pathA
helloB:
handler: handler.helloB
environment:
SYSTEM_URL: http://example.com/api/v1/pathB
위 예제에서 helloA
와 helloB
Lambda 함수 모두 SYSTEM_URL
환경 변수를 정의하고 있습니다. 두 함수의 유일한 차이점은 URL이 pathA
또는 pathB
로 끝난다는 점입니다. 이 두 함수를 변수 개념을 사용해 병합할 수 있습니다.
변수를 사용하면 serverless.yml
파일의 값을 동적으로 대체할 수 있습니다. ${variableName}
구문을 사용하며, variableName
의 값이 삽입됩니다.
이제 실제로 어떻게 동작하는지 살펴보겠습니다. 예제를 다음과 같이 다시 작성하고 단순화할 수 있습니다.
service: service-name
custom:
systemUrl: http://example.com/api/v1/
provider:
name: aws
stage: dev
functions:
helloA:
handler: handler.helloA
environment:
SYSTEM_URL: ${self:custom.systemUrl}pathA
helloB:
handler: handler.helloB
environment:
SYSTEM_URL: ${self:custom.systemUrl}pathB
이 과정은 매우 직관적입니다. 먼저 다음 섹션을 추가했습니다.
custom:
systemUrl: http://example.com/api/v1/
이 코드는 custom
섹션 아래에 systemUrl
이라는 변수를 정의합니다. 그런 다음 ${self:custom.systemUrl}
구문을 사용해 이 변수를 참조할 수 있습니다.
이를 환경 변수 SYSTEM_URL: ${self:custom.systemUrl}pathA
에서 사용했습니다. Serverless Framework는 이를 파싱하여 self:custom.systemUrl
의 값을 삽입하고, 이 값에 pathA
를 결합해 원래 값인 http://example.com/api/v1/pathA
를 생성합니다.
변수는 CLI 옵션, 외부 YAML 파일 등 다양한 소스에서 참조할 수 있습니다. serverless.yml
에서 변수를 사용하는 방법에 대해 더 자세히 알아보려면 여기를 참조하세요.
For help and discussion
Comments on this chapter