AWS Lambda
개발자 가이드

AWS Lambda 환경 변수

Lambda 함수용 환경 변수는 코드를 변경하지 않고 함수 코드와 라이브러리에 설정을 동적으로 전달할 수 있게 해줍니다. 환경 변수는 AWS Lambda 콘솔, AWS Lambda CLI 또는 AWS Lambda SDK를 사용하여 함수 구성의 일부로 생성 및 수정할 수 있는 키-값 페어입니다. AWS Lambda는 Node.js 함수용 process.env 같이 해당 언어에서 지원되는 표준 API를 사용하여 Lambda 함수 코드에서 이러한 키-값 페어를 사용할 수 있게 해줍니다.

환경 변수를 사용하여 라이브러리가 파일을 설치할 디렉터리와 출력, 연결 및 로깅 설정을 저장할 장소를 알 수 있도록 도와줄 수 있습니다. 애플리케이션 로직에서 이러한 설정을 분리하면 다른 설정에 따라 함수 동작을 변경해야 할 때 함수 코드를 업데이트할 필요가 없습니다.

설정

개발부터 배포에 이르기까지 수명 주기 단계에 따라 Lambda 함수가 다르게 작동하도록 하고 싶다고 가정해 봅시다. 예를 들어 개발, 테스트 및 프로덕션 단계에는 함수와 연결해야 하는 데이터베이스가 포함될 수 있습니다. 이들 데이터베이스는 서로 다른 연결 정보가 필요하고 다른 테이블 이름을 사용합니다. 데이터베이스 이름, 연결 정보 또는 테이블 이름을 참조하기 위한 환경 변수를 생성하고, 함수 코드를 그대로 유지하면서 실행 중인 단계(예: 개발, 테스트, 프로덕션)에 따라 해당 함수의 값을 설정할 수 있습니다.

다음 스크린샷은 AWS 콘솔을 사용하여 함수의 구성을 수정하는 방법을 보여줍니다. 첫 번째 스크린샷은 테스트 단계에 해당되는 함수의 설정을 구성합니다. 두 번째 스크린샷은 프로덕션 단계에 대한 설정을 구성합니다.

암호화 구성 단원을 참조하십시오. Lambda 함수에서의 환경 변수 클라이언트 측 암호화 자습서에서 이를 사용하는 방법에 대해 자세히 알아보겠습니다.

또한 AWS CLI를 사용하여 환경 변수를 포함하는 Lambda 함수를 생성할 수 있습니다. 자세한 내용은 CreateFunctionUpdateFunctionConfiguration API를 참조하십시오. AWS CloudFormation을 사용하여 함수를 생성 및 업데이트할 때도 환경 변수가 지원됩니다. 환경 변수는 함수에 포함된 언어 런타임이나 라이브러리에 고유한 설정을 구성하는 데도 사용할 수 있습니다. 예를 들어 PATH를 수정하여 실행 파일이 저장되는 디렉터리를 지정할 수 있습니다. 또한 Python용 PYTHONPATH 또는 Node.js용 NODE_PATH와 같은 런타임 고유의 환경 변수를 설정할 수도 있습니다.

다음 예제에서는 LD_LIBRARY_PATH 환경 변수를 설정하는 Lambda 함수를 새로 생성하는데, 이 함수는 런타임 시 공유 라이브러리가 동적으로 로딩되는 디렉터리를 지정하는 데 사용됩니다. 이 예제에서 Lambda 함수 코드는 /usr/bin/test/lib64 디렉터리에서 공유 라이브러리를 사용합니다. Runtime 파라미터는 nodejs6.10을 사용하지만, nodejs8.10을 지정할 수도 있습니다.

$ aws lambda create-function --function-name myTestFunction \ --zip-file fileb://package.zip \ --role role-arn \ --environment Variables="{LD_LIBRARY_PATH=/usr/bin/test/lib64}" \ --handler index.handler --runtime nodejs6.10

환경 변수의 이름을 지정하기 위한 규칙

집합의 총 크기가 4KB를 초과하지 않는 한, 생성할 수 있는 환경 변수의 수에는 제한이 없습니다.

기타 요구 사항은 다음과 같습니다.

  • 문자 [a-zA-Z]로 시작해야 합니다.

  • 영숫자 문자와 밑줄 ([a-zA-Z0-9_]만 포함할 수 있습니다.

뿐만 아니라, AWS Lambda가 예약한 고유한 키 집합이 있습니다. 이렇게 예약된 키에 대해 값을 설정하려고 하면 해당 작업이 허용되지 않는다는 오류 메시지가 표시됩니다. 이들 키에 대한 자세한 내용은 Lambda 함수에서 사용할 수 있는 환경 변수을 참조하십시오.

환경 변수 및 함수 버전 관리

버전 관리는 개발 단계에서 테스트 단계 및 프로덕션 단계로 진행함에 따라 Lambda 함수 버전을 하나 이상 게시하여 Lambda 함수 코드를 관리할 수 있도록 해줍니다. 게시한 Lambda 함수의 각 버전에 대해 환경 변수를 비롯하여 MemorySizeTimeout 한도 같은 기타 함수 고유의 구성이 해당 버전의 스냅샷으로 저장되며, 이러한 설정은 변경이 불가능합니다(바꿀 수 없음).

애플리케이션 및 구성 요구 사항이 변화함에 따라 새로운 버전의 Lambda 함수를 생성하고, 게시 중인 최신 버전 이전의 요구 사항을 충족하도록 환경 변수를 업데이트할 수 있습니다. 최신 버전의 함수는 $LATEST입니다.

뿐만 아니라, 특정 버전의 함수를 가리키는 별칭을 생성할 수 있습니다. 별칭은 이전 버전의 함수로 롤백해야 하는 경우에 해당 버전에 필요한 환경 변수가 포함된 이전 버전을 가리키도록 별칭을 지정할 수 있다는 점에서 장점이 있습니다. 자세한 내용은 AWS Lambda 함수 버전 관리 및 별칭 단원을 참조하십시오.

환경 변수 암호화

환경 변수를 사용하는 Lambda 함수를 생성 또는 업데이트할 때 AWS Lambda는 AWS Key Management Service을 사용하여 이를 암호화합니다. Lambda 함수가 호출되면 이러한 값들이 암호 해독되어 Lambda 코드에 사용할 수 있는 상태가 됩니다.

리전에서 환경 변수를 사용하는 Lambda 함수를 처음으로 생성 또는 업데이트할 때 AWS KMS 내에서 기본 서비스 키가 자동으로 생성됩니다. 이 키는 환경 변수를 암호화하는 데 사용됩니다. 한편, 암호화 도우미와 KMS를 사용하여 Lambda 함수가 생성된 후에 환경 변수를 암호화하고 싶은 경우에는 자체 AWS KMS 키를 생성하고 기본 키 대신에 이를 선택해야 합니다. 기본 키를 선택하면 오류가 발생합니다. 자체 키를 생성하면 액세스 제어를 생성, 교체, 비활성화 및 정의하고 데이터를 보호하는 데 사용된 암호화 키를 감사하는 등 폭넓은 작업이 가능합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서를 참조하십시오.

자체 키를 사용하는 경우에는 AWS Key Management Service 요금 지침에 따라 비용이 부과됩니다. AWS Lambda에서 제공된 기본 서비스 키를 사용하는 경우에는 비용이 부과되지 않습니다.

Lambda에서 기본 KMS 서비스 키를 사용하고 있는 경우에는 함수 실행 역할에서 추가적인 IAM 권한이 필요하지 않습니다. 변경 없이 역할이 자동으로 수행됩니다. 자체(사용자 지정) KMS 키를 제공하는 경우에는 실행 역할에 kms:Decrypt를 추가해야 합니다. 뿐만 아니라 Lambda 함수를 생성 및 업데이트하고 싶은 사용자는 KMS 키를 사용할 수 있는 권한을 가지고 있어야 합니다. KMS 키에 대한 자세한 내용은 AWS KMS에서 키 정책 사용을 참조하십시오.

참고

AWS Lambda는 함수에 역할을 할당할 때 추가하는 사용자 권한 부여를 통해 기본 KMS 키를 사용할 수 있는 권한을 해당 함수에 부여합니다. 그 역할을 삭제하고 동일한 이름으로 새 역할을 만들었다면 역할에 부여된 권한을 새로 고쳐야 합니다. 함수에 역할을 다시 할당하여 부여된 권한을 새로 고치십시오.

민감한 정보 저장

이전 단원에서 언급한 바와 같이, Lambda 함수를 배포할 때 배포가 진행되는 동안이 아니라 그 이후에 사용자가 지정한 모든 환경 변수가 기본적으로 암호화됩니다. 그리고 함수가 호출될 때 AWS Lambda에서 자동으로 암호 해독이 됩니다. 환경 변수에 민감한 정보를 저장해야 하는 경우에는 Lambda 함수를 배포하기 앞서 해당 정보를 암호화하는 것이 좋습니다.

다행히 Lambda 콘솔은 AWS Key Management Service를 활용하여 Ciphertext 같은 민감한 정보를 저장하는 암호화 도우미를 제공하여 암호화를 손쉽게 수행할 수 있게 해줍니다. 또한 Lambda 콘솔은 Lambda 함수 코드에서 사용되는 정보의 암호를 해독할 수 있도록 암호 해독 도우미 코드를 제공합니다. 자세한 내용은 Lambda 함수에서의 환경 변수 클라이언트 측 암호화 단원을 참조하십시오.

오류 시나리오

함수 구성이 4KB를 초과하거나 AWS Lambda가 예약한 환경 변수 키를 사용하는 경우에는 업데이트 또는 생성 작업이 실패하면서 구성 오류 메시지가 나타납니다. 실행 시간 동안 환경 변수의 암호화/암호 해독이 실패할 수 있습니다. AWS Lambda가 AWS KMS 서비스 예외로 인해 환경 변수를 암호 해독할 수 없는 경우, AWS KMS는 오류 조건이 무엇이고 문제 해결을 위해 적용할 수 있는 구제책은 무엇인지 설명하는 예외 메시지를 반환합니다. 이러한 오류는 Amazon CloudWatch Logs의 함수 로그 스트림에 로깅됩니다. 예를 들어 환경 변수를 액세스하는 데 사용 중인 KMS 키가 비활성화된 경우에는 다음과 같은 오류 메시지가 나타납니다.

Lambda was unable to configure access to your environment variables because the KMS key used is disabled. Please check your KMS key settings.