런타임 환경 수정
런타임 환경 수정 (Modifying the runtime environment)
내부 확장 기능(internal extension)을 사용해 런타임 프로세스를 수정할 수 있습니다. 내부 확장 기능은 별도의 프로세스가 아닙니다. 런타임 프로세스의 일부로 실행됩니다.
Lambda는 런타임에 옵션과 도구를 추가하도록 설정할 수 있는 언어별 환경 변수를 제공합니다. 또한 Lambda가 런타임 시작을 스크립트에 위임할 수 있게 하는 래퍼 스크립트(wrapper script)도 제공합니다. 래퍼 스크립트를 만들어 런타임 시작 동작을 사용자 지정할 수 있습니다.
본문
언어별 환경 변수
Lambda는 다음 언어별 환경 변수를 통해 함수 초기화 중에 코드를 미리 로드할 수 있게 하는 구성 전용 방식을 지원합니다:
JAVA_TOOL_OPTIONS— Java에서 Lambda는 이 환경 변수를 지원해 Lambda에 추가 명령줄 변수를 설정합니다. 이 환경 변수를 사용하면 특히agentlib또는javaagent옵션으로 네이티브 또는 Java 프로그래밍 언어 에이전트를 시작하는 도구의 초기화를 지정할 수 있습니다. 자세한 내용은JAVA_TOOL_OPTIONS환경 변수를 참조하세요.NODE_OPTIONS— Node.js 런타임에서 사용할 수 있습니다.DOTNET_STARTUP_HOOKS— .NET Core 3.1 이상에서 이 환경 변수는 Lambda가 사용할 수 있는 어셈블리(dll) 경로를 지정합니다.
시작 속성을 설정하는 기본적인 방법은 언어별 환경 변수를 사용하는 것입니다.
래퍼 스크립트
Lambda 함수의 런타임 시작 동작을 사용자 지정하는 래퍼 스크립트를 만들 수 있습니다. 래퍼 스크립트를 사용하면 언어별 환경 변수로는 설정할 수 없는 구성 파라미터를 설정할 수 있습니다.
참고
래퍼 스크립트가 런타임 프로세스를 성공적으로 시작하지 못하면 호출이 실패할 수 있습니다.
래퍼 스크립트는 모든 네이티브 Lambda 런타임에서 지원됩니다. 래퍼 스크립트는 OS 전용 런타임(provided 런타임 계열)에서는 지원되지 않습니다.
함수에 래퍼 스크립트를 사용하면 Lambda는 사용자의 스크립트로 런타임을 시작합니다. Lambda는 표준 런타임 시작을 위한 인터프리터 경로와 모든 원래 인수를 스크립트로 보냅니다. 스크립트는 프로그램의 시작 동작을 확장하거나 변환할 수 있습니다. 예를 들어 스크립트는 인수를 주입하고 변경하거나, 환경 변수를 설정하거나, 메트릭, 오류 및 기타 진단 정보를 캡처할 수 있습니다.
스크립트는 AWS_LAMBDA_EXEC_WRAPPER 환경 변수의 값을 실행 가능한 바이너리 또는 스크립트의 파일 시스템 경로로 설정해 지정합니다.
예시: 래퍼 스크립트를 Lambda 레이어로 만들어 사용
다음 예제에서는 -X importtime 옵션으로 Python 인터프리터를 시작하는 래퍼 스크립트를 만듭니다. 함수를 실행하면 Lambda는 각 import에 걸린 시간을 보여주는 로그 항목을 생성합니다.
래퍼 스크립트를 레이어로 만들어 사용하려면:
-
레이어용 디렉터리를 만듭니다:
mkdir -p python-wrapper-layer/bin cd python-wrapper-layer/bin -
bin디렉터리에서 다음 코드를importtime_wrapper라는 새 파일에 붙여넣습니다. 이것이 래퍼 스크립트입니다.#!/bin/bash # the path to the interpreter and all of the originally intended arguments args=("$@") # the extra options to pass to the interpreter extra_args=("-X" "importtime") # insert the extra options args=("${args[@]:0:$#-1}" "${extra_args[@]}" "${args[@]: -1}") # start the runtime with the extra options exec "${args[@]}" -
스크립트에 실행 권한을 부여합니다:
chmod +x importtime_wrapper -
레이어용 .zip 파일을 만듭니다:
cd .. zip -r ../python-wrapper-layer.zip . -
.zip 파일에 다음 디렉터리 구조가 있는지 확인합니다:
python-wrapper-layer.zip └ bin └ importtime_wrapper -
.zip 패키지를 사용해 레이어를 만듭니다.
-
Lambda 콘솔을 사용해 함수를 만듭니다.
- Lambda 콘솔을 엽니다.
- Create function(함수 생성) 을 선택합니다.
- Function name(함수 이름) 을 입력합니다.
- Runtime(런타임) 에서 최신 지원 Python 런타임을 선택합니다.
- Create function 을 선택합니다.
-
레이어를 함수에 추가합니다.
- 함수를 선택하고 아직 선택되지 않았다면 Code(코드) 탭을 선택합니다.
- Layers(레이어) 섹션까지 아래로 스크롤하고 Add a layer(레이어 추가) 를 선택합니다.
- Layer source(레이어 소스) 에서 Custom layers(사용자 지정 레이어) 를 선택하고 Custom layers 드롭다운 목록에서 레이어를 선택합니다.
- Version(버전) 에서 1을 선택합니다.
- Add 를 선택합니다.
-
래퍼 환경 변수를 추가합니다.
- Configuration(구성) 탭을 선택한 다음 Environment variables(환경 변수) 를 선택합니다.
- Environment variables 아래에서 Edit(편집) 을 선택합니다.
- Add environment variable(환경 변수 추가) 을 선택합니다.
- Key 에
AWS_LAMBDA_EXEC_WRAPPER를 입력합니다. - Value 에
/opt/bin/importtime_wrapper(/opt/+ .zip 레이어의 폴더 구조)를 입력합니다. - Save(저장) 를 선택합니다.
-
래퍼 스크립트를 테스트합니다.
- Test(테스트) 탭을 선택합니다.
- Test event(테스트 이벤트) 아래에서 Test 를 선택합니다. 테스트 이벤트를 만들 필요는 없습니다. 기본 이벤트로 충분합니다.
- Log output(로그 출력) 까지 아래로 스크롤합니다. 래퍼 스크립트가
-X importtime옵션으로 Python 인터프리터를 시작했으므로 로그는 각 import에 필요한 시간을 보여줍니다. 예:
532 | collections import time: 63 | 63 | _functools import time: 1053 | 3646 | functools import time: 2163 | 7499 | enum import time: 100 | 100 | _sre import time: 446 | 446 | re._constants import time: 691 | 1136 | re._parser import time: 378 | 378 | re._casefix import time: 670 | 2283 | re._compiler import time: 416 | 416 | copyreg
더 알아보기 (Learn more)
- Lambda 래퍼 스크립트
- Lambda 언어별 환경 변수
- Lambda 런타임 환경