Python에서 Lambda 함수 핸들러 정의 - AWS Lambda

Python에서 Lambda 함수 핸들러 정의

Lambda 함수의 핸들러는 이벤트를 처리하는 함수 코드의 메서드입니다. 함수가 호출되면 Lambda는 핸들러 메서드를 실행합니다. 함수는 핸들러가 응답을 반환하거나 종료하거나 제한 시간이 초과될 때까지 실행됩니다.

Python에서 함수 핸들러를 생성할 때 다음과 같은 일반적인 구문을 사용합니다.

def handler_name(event, context): ... return some_value

이름 지정

Lambda 함수를 생성할 때 지정된 Lambda 함수 핸들러 이름은 다음에서 파생됩니다.

  • Lambda 핸들러 함수가 있는 파일의 이름.

  • Python 핸들러 함수의 이름.

함수 핸들러는 임의의 이름일 수 있지만 Lambda 콘솔의 기본 이름은 lambda_function.lambda_handler입니다. 이 함수 핸들러 이름은 함수 이름(lambda_handler)과, 핸들러 코드가 저장된 파일(lambda_function.py)을 나타냅니다.

콘솔에서 다른 파일 이름 또는 함수 핸들러 이름을 사용하여 함수를 생성하는 경우 기본 핸들러 이름을 편집해야 합니다.

함수 핸들러 이름 변경(콘솔)
  1. Lambda 콘솔의 함수 페이지를 열고 함수를 선택합니다.

  2. Code(코드) 탭을 선택합니다.

  3. 아래로 스크롤하여 런타임 설정 창으로 이동한 다음 편집을 선택합니다.

  4. 핸들러에서 함수 핸들러의 새 이름을 입력합니다.

  5. Save(저장)를 선택합니다.

작동 방식

Lambda가 함수 핸들러를 호출할 때 Lambda 런타임은 함수 핸들러에 다음 두 개의 인수를 전달합니다.

  • 첫 번째 인수는 이벤트 객체입니다. 이벤트는 처리할 Lambda 함수에 대한 데이터가 포함된 JSON 형식 문서입니다. Lambda 런타임은 이벤트를 객체로 변환한 후 함수 코드에 전달합니다. 이 객체는 일반적으로 Python dict 유형입니다. 또한 list, str, int, float 또는 NoneType 유형이 될 수 있습니다.

    이벤트 객체에는 호출 서비스의 정보가 포함됩니다. 함수를 호출할 때, 이벤트의 구조와 내용을 결정합니다. AWS 서비스는 함수를 호출할 때 이벤트 구조를 정의합니다. AWS 서비스의 이벤트에 대한 자세한 내용은 다른 AWS 서비스의 이벤트로 Lambda 간접 호출 단원을 참조하세요.

  • 두 번째 인수는 컨텍스트 객체입니다. 컨텍스트 객체는 런타임에 Lambda에 의해 함수로 전달됩니다. 이 객체는 호출, 함수 및 런타임 환경에 관한 정보를 제공하는 메서드 및 속성들을 제공합니다.

값 반환

선택적으로, 핸들러는 값을 반환할 수 있습니다. 반환된 값은 함수를 호출한 호출 유형서비스에 따라 달라집니다. 예:

  • 동기식 호출 같은 RequestResponse 호출 유형을 사용하는 경우에는 AWS Lambda가 Python 함수 호출의 결과를 클라이언트에 반환하여 Lambda 함수를 호출합니다(호출 요청에 대한 HTTP 응답이 JSON에 직렬화). 예를 들어 AWS Lambda 콘솔은 RequestResponse 호출 유형을 사용하기 때문에 콘솔에서 함수를 호출할 때 콘솔에 반환 값이 표시됩니다.

  • 핸들러가 json.dumps로 직렬화가 불가능한 객체를 반환하는 경우 런타임에서 오류를 반환하게 됩니다.

  • None 문이 포함되지 않은 Python 함수가 묵시적으로 하는 것처럼 핸들러가 return을 반환하는 경우, 런타임은 null을 반환하게 됩니다.

  • Event 호출 유형(비동기식 호출)을 사용하는 경우에는 해당 값이 폐기됩니다.

참고

Python 3.9 이상 릴리스에서 Lambda는 호출의 requestId를 오류 응답에 포함합니다.

예제

다음 섹션에서는 Lambda와 함께 사용할 수 있는 Python 함수의 예를 보여줍니다. Lambda 콘솔을 사용하여 함수를 작성하는 경우 이 섹션의 함수를 실행하기 위해 .zip 아카이브 파일을 연결할 필요가 없습니다. 이러한 함수는 선택한 Lambda 런타임에 포함된 표준 Python 라이브러리를 사용합니다. 자세한 내용은 Lambda 배포 패키지 섹션을 참조하세요.

메시지 반환

다음 예제에서는 lambda_handler라는 함수를 보여줍니다. 이 함수는 사용자 입력으로 이름과 성을 받고 입력으로 받은 이벤트의 데이터가 포함된 메시지를 반환합니다.

def lambda_handler(event, context): message = 'Hello {} {}!'.format(event['first_name'], event['last_name']) return { 'message' : message }

다음 이벤트 데이터를 사용하여 함수를 호출할 수 있습니다.

{ "first_name": "John", "last_name": "Smith" }

응답은 입력으로 전달된 이벤트 데이터를 보여줍니다.

{ "message": "Hello John Smith!" }

응답 구문 분석

다음 예제에서는 lambda_handler라는 함수를 보여줍니다. 이 함수는 런타임에 Lambda에 의해 전달된 이벤트 데이터를 사용합니다. JSON 응답에 반환된 AWS_REGION에서 환경 변수를 구문 분석합니다.

import os import json def lambda_handler(event, context): json_region = os.environ['AWS_REGION'] return { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "body": json.dumps({ "Region ": json_region }) }

이벤트 데이터를 사용하여 함수를 호출할 수 있습니다.

{ "key1": "value1", "key2": "value2", "key3": "value3" }

Lambda 런타임은 초기화 중에 여러 환경 변수를 설정합니다. 런타임 시 응답에 반환되는 환경 변수에 대한 자세한 내용은 단원을 참조하세요Lambda 환경 변수를 사용하여 코드의 값 구성

이 예제의 함수는 Invoke API의 성공적인 응답(200)에 따라 달라집니다. Invoke API 상태에 대한 자세한 내용은 Invoke Response Syntax를 참조하세요.

계산 반환

다음 예제에서는 lambda_handler라는 함수를 보여줍니다. 이 함수는 사용자 입력을 받아들이고 사용자에게 계산을 반환합니다. 이 예제에 대한 자세한 내용은 aws-doc-sdk-examples GitHub 리포지토리를 참조하세요.

import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ... result = None action = event.get('action') if action == 'increment': result = event.get('number', 0) + 1 logger.info('Calculated result of %s', result) else: logger.error("%s is not a valid action.", action) response = {'result': result} return response

다음 이벤트 데이터를 사용하여 함수를 호출할 수 있습니다.

{ "action": "increment", "number": 3 }