AWS Lambda
개발자 가이드

사용자 지정 AWS Lambda 런타임

AWS Lambda 런타임은 모든 프로그래밍 언어로 구현할 수 있습니다. 런타임은 함수가 호출될 때 Lambda 함수의 핸들러 메서드를 실행하는 프로그램입니다. 런타임은 bootstrap이라는 실행 파일의 형태로 함수의 배포 패키지에 포함될 수 있습니다.

런타임은 함수의 설정 코드를 실행하고, 환경 변수에서 핸들러 이름을 읽으며 Lambda 런타임 API에서 호출 이벤트를 읽는 기능을 담당합니다. 런타임은 이벤트 데이터를 함수 핸들러에 전달하고 핸들러의 응답을 Lambda에 다시 게시합니다.

사용자 지정 런타임은 표준 Lambda 실행 환경에서 실행됩니다. 이 런타임은 셸 스크립트, Amazon Linux에 포함된 언어로 된 스크립트 또는 Amazon Linux에 컴파일된 바이너리 실행 파일일 수 있습니다.

사용자 지정 런타임을 시작하려면 자습서 – 사용자 지정 런타임 게시 단원을 참조하십시오. GitHub에서 C++로 구현된 사용자 지정 런타임을 awslabs/aws-lambda-cpp에서 탐색할 수도 있습니다.

사용자 지정 런타임 사용

사용자 지정 런타임을 사용하려면 함수의 런타임을 provided로 설정하십시오. 런타임은 함수의 배포 패키지 또는 계층에 포함될 수 있습니다.

예 function.zip

. ├── bootstrap ├── function.sh

배포 패키지에 bootstrap이라는 이름의 파일이 있을 경우, Lambda이 이 파일을 실행합니다. 그렇지 않은 경우, Lambda은 함수의 계층에서 런타임을 찾습니다. 부트스트랩 파일을 찾을 수 없거나 실행할 수 없는 경우, 함수는 호출 시 오류를 반환합니다.

사용자 지정 런타임 빌드

사용자 지정 런타임의 진입점은 bootstrap이라는 이름의 실행 파일입니다. 부트스트랩 파일은 런타임일 수 있으며 혹은 런타임을 생성하는 다른 파일을 호출할 수도 있습니다. 다음 예제에서는 번들 버전의 Node.js를 사용하여 runtime.js라는 별개의 파일에서 JavaScript 런타임을 실행합니다.

예 부트스트랩

#!/bin/sh cd $LAMBDA_TASK_ROOT ./node-v11.1.0-linux-x64/bin/node runtime.js

런타임 코드는 일부 초기화 작업을 완료하는 역할을 담당합니다. 그런 다음, 이 코드는 종료될 때까지 호출 이벤트를 루프에서 처리합니다. 초기화 작업은 함수의 인스턴스 당 한 번씩 실행되어 호출을 처리할 수 있는 환경을 준비합니다.

초기화 작업

  • 설정 검색 – 환경 변수를 읽어 함수 및 환경에 관한 세부 정보를 확인합니다.

    • _HANDLER – 함수의 구성에서 핸들러에 대한 위치입니다. 표준 형식은 file.method이며, 여기서 file은 확장명이 없는 파일의 이름이고 method는 파일에 정의된 메서드 또는 함수의 이름입니다.

    • LAMBDA_TASK_ROOT – 함수 코드가 포함된 디렉터리입니다.

    • AWS_LAMBDA_RUNTIME_API – 런타임 API의 호스트 및 포트입니다.

    사용 가능한 변수의 전체 목록은 Lambda 함수에서 사용할 수 있는 환경 변수 단원을 참조하십시오.

  • 함수 초기화 – 핸들러 파일을 로드하고 이 파일에 포함된 전역적 또는 정적 코드를 실행합니다. 함수는 SDK 클라이언트 및 데이터베이스 연결과 같은 정적 리소스를 한 번 생성해야 하며, 다중 호출 시 그러한 리소스를 다시 사용해야 합니다.

  • 오류 처리 – 오류가 발생하면 초기화 오류 API를 호출하고 즉시 종료하십시오.

초기화 횟수는 청구 대상인 실행 시간 및 시간 초과에 반영됩니다. 실행으로 인해 새 함수 인스턴스의 초기화가 트리거되면 로그 및 AWS X-Ray 추적에서 초기화 시간을 볼 수 있습니다.

예 로그

REPORT RequestId: f8ac1208... Init Duration: 48.26 ms Duration: 237.17 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 26 MB

        X-Ray 추적의 초기화 시간입니다.

런타임은 실행 중에 Lambda 런타임 인터페이스를 사용하여 수신 이벤트를 관리하고 오류를 보고합니다. 초기화 작업을 완료한 후, 런타임은 수신 이벤트를 루프에서 처리합니다.

작업 처리

  • 이벤트 가져오기 – 다음 이벤트를 가져오려면 다음 호출 API를 호출하십시오. 응답 본문에는 이벤트 데이터가 포함됩니다. 응답 헤더에는 요청 ID 및 기타 정보가 포함됩니다.

  • 트레이스 헤더 전파 – API 응답의 Lambda-Runtime-Trace-Id 헤더에서 X-Ray 트레이스 헤더를 가져옵니다. X-Ray SDK가 사용할 동일한 값으로 _X_AMZN_TRACE_ID 환경 변수를 설정하십시오.

  • 컨텍스트 객체 생성 – API 응답에서 환경 변수 및 헤더의 컨텍스트 정보를 사용하여 객체를 생성합니다.

  • 함수 핸들러 호출 – 이벤트 및 컨텍스트 객체를 핸들러에 전달합니다.

  • 응답 처리호출 응답 API를 호출하여 핸들러에서 응답을 게시합니다.

  • 오류 처리 – 오류가 발생하면 호출 오류 API를 호출하십시오.

  • 정리 – 사용하지 않은 리소스를 릴리스하거나 다른 서비스로 데이터를 전송하거나 혹은 다음 이벤트를 가져오기 전에 추가 작업을 수행하십시오.

함수의 배포 패키지에 런타임을 포함하거나 함수 계층에 런타임을 별도로 배포할 수 있습니다. 예제 연습을 보려면 자습서 – 사용자 지정 런타임 게시 단원을 참조하십시오.