런타임 환경 수정
내부 익스텐션을 사용하여 런타임 프로세스를 수정할 수 있습니다. 내부 익스텐션은 별도의 프로세스가 아니라 런타임 프로세스의 일부로 실행됩니다.
Lambda는 런타임에 옵션과 도구를 추가하도록 설정할 수 있는 언어별 환경 변수를 제공합니다. Lambda는 또한 Lambda가 런타임 시작 동작을 스크립트에 위임할 수 있도록 래퍼 스크립트를 제공합니다. 래퍼 스크립트를 생성하여 런타임 시작 동작을 사용자 지정할 수 있습니다.
언어별 환경 변수
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는 스크립트를 사용하여 런타임을 시작합니다. Lambda는 표준 런타임 시작을 위해 인터프리터 경로와 모든 원본 인수를 스크립트에 보냅니다. 스크립트는 프로그램의 시작 동작을 확장하거나 변형할 수 있습니다. 예를 들어 스크립트는 인수를 삽입 및 변경하거나, 환경 변수를 설정하거나, 지표, 오류 및 기타 진단 정보를 캡처할 수 있습니다.
스크립트를 지정하려면 AWS_LAMBDA_EXEC_WRAPPER
환경 변수의 값을 실행 바이너리 또는 스크립트의 파일 시스템 경로로 설정합니다.
예제: Python 3.8에서 래퍼 스크립트 생성 및 사용
다음 예제에서는 -X
importtime
옵션을 사용하여 Python 인터프리터를 시작하는 래퍼 스크립트를 생성합니다. 함수를 실행하면 Lambda가 각 가져오기에 소요된 기간을 표시하는 로그 항목을 생성합니다.
Python 3.8에서 래퍼 스크립트를 생성하고 사용하려면
-
래퍼 스크립트를 생성하려면 다음 코드를
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
를 입력합니다. -
스크립트를 Lambda 계층으로 배포합니다.
-
Lambda 콘솔을 사용하여 함수를 생성합니다.
-
Lambda 콘솔
을 엽니다. -
함수 생성(Create function)을 선택합니다.
-
기본 정보(Basic information)에서 함수 이름(Function name)에
wrapper-test-function
을 입력합니다. -
런타임(Runtime)에서 Python 3.8을 선택합니다.
-
함수 생성(Create function)을 선택합니다.
-
-
함수에 계층을 추가합니다.
-
기능을 선택한 다음 코드(Code)를 선택합니다(아직 선택되어 있지 않은 경우).
-
[Add a layer]를 선택합니다.
-
계층 선택(Choose a layer)에서 앞서 생성한 호환되는 계층의 이름(Name) 및 버전(Version)을 선택합니다.
-
추가를 선택합니다.
-
-
코드와 환경 변수를 함수에 추가합니다.
-
함수 코드 편집기(code editor)에서 다음 함수 코드를 붙여 넣습니다.
import json def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
-
저장을 선택합니다.
-
Environment variables(환경 변수)에서 편집을 선택합니다.
-
Add environment variable(환경 변수 추가)을 선택합니다.
-
키(Key)에
AWS_LAMBDA_EXEC_WRAPPER
를 입력합니다. -
값에
/opt/importtime_wrapper
을(를) 입력합니다. -
저장을 선택합니다.
-
-
함수를 실행하려면 테스트(Test)를 선택합니다.
래퍼 스크립트가
-X importtime
옵션을 사용하여 Python 인터프리터를 시작했기 때문에 로그에는 각 가져오기에 필요한 시간이 표시됩니다. 예:... 2020-06-30T18:48:46.780+01:00 import time: 213 | 213 | simplejson 2020-06-30T18:48:46.780+01:00 import time: 50 | 263 | simplejson.raw_json ...