클라우드(AWS)/DVA-C02

[AWS] Lambda의 "event"와 "context" object(객체)란? 쉽게 정리

찌르비 2024. 11. 10. 11:36
반응형

 

Lambda의 event, context 객체

AWS Lambda를 사용하면 eventcontext 라는 object(객체)가 나온다.

이는 Lambda가 호출될 때 제공하는 기본 파라미터들이다.

 

Lambda 함수를 작성할 때 eventcontext객체를 사용할 수 있다.

[Python 예시]

def def lambda_handler(event, context):
   — 함수의 처리 부분 — 
   return 리턴 값

[Node.js 예시]

exports.handler = async (event, context) => {
   — 함수의 처리 부분 — 
};

 


다른 AWS 서비스에서 전달된 데이터

event 객체  –  다른 AWS 서비스의 데이터

event객체는 Lambda 함수에 전달되는 input 데이터이다.

이는 다른 AWS 서비스(예: API Gateway, S3, DynamoDB 등)에서 Lambda로 전달되는 정보를 담고 있다.

아래의 예시를 보면 아주 쉽게 이해할 수 있다.

  • API Gateway에서의 HTTP 요청 정보 (HTTP 메서드 (예: GET, POST))
  • S3에서의 객체 정보 (S3에 업로드 된 파일 이름, 업로드된 객체의 경로(uploads/file.txt) 등)
  • DynamoDB Streams 이벤트 (DynamoDB에서 수행된 작업 (INSERT, MODIFY, REMOVE))

 

[event 예시]

API Gateway로 다음과 같은 JSON 형식의 데이터가 들어와서 Lambda에 전달했다

{
  "httpMethod": "GET",
  "queryStringParameters": {
    "name": "elon musk"
  },
  "body": null
}

 

API Gateway로 가져온 정보를 event 객체를 통해 Lambda 함수(Python 코드)에서 활용 할 수 있다.

def lambda_handler(event, context):
    name = event["queryStringParameters"]["name"]  # "elon musk" 추출하여 name 변수에 저장
    return {
        "statusCode": 200,
        "body": f"Hello, {name}!"
    }

실행 결과 (Output)

{
  "statusCode": 200,
  "body": "Hello, elon musk!"
}

 


실행 중인 Lambda의 메타데이타

context 객체  –  lambda의 메타데이터

context 객체는 실행하는 Lambda 함수의 자신의 메타데이터(metadata)를 제공한다.

메타데이터는 예를 들어, "람다 함수의 이름", "람다의 최대 메모리 사이즈", "람다의 timeout 시간" 등이 포함된다.

아래의 예시를 보면 아주 쉽게 이해할 수 있다.

 

[context예시]

Lambda 함수의 실행 정보("함수 이름", "메모리 크기", "요청 ID")를 확인하기

def lambda_handler(event, context):
    function_name = context.function_name  # 함수 이름 가져오기
    memory_limit = context.memory_limit_in_mb  # 메모리 제한 가져오기
    request_id = context.aws_request_id  # 요청 ID 가져오기
    
    return {
        "statusCode": 200,
        "body": f"Function '{function_name}' with {memory_limit}MB is handling request {request_id}"
    }

 

실행 결과 (Output)

{
  "statusCode": 200,
  "body": "Function 'my_lambda_function' with 128MB is handling request 1234-5678-91011"
}

 


🤔 문제

개발자가 AWS Lambda 함수를 작성하고 있습니다. 개발자는 Lambda 함수 실행 중에 발생한 주요 이벤트를 로그로 기록하려고 합니다. 로그에 고유 식별자(unique identifier)를 포함하여 이벤트가 특정 함수 호출과 연관되도록 하고자 합니다. 개발자는 Lambda 함수에 다음 코드를 추가했습니다:

function handler(event, context) {

}

이 요구사항을 만족하는 해결책은 무엇일까요?

 

  1. context 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 표준 출력으로 로그를 기록하도록 구성합니다.
  2. event 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 파일에 로그를 기록하도록 구성합니다.
  3. event 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 표준 출력으로 로그를 기록하도록 구성합니다.
  4. context 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 파일에 로그를 기록하도록 구성합니다.

정답

더보기

정답. 1번

context 객체는 함수 실행에 관련된 메타데이터를 포함하고 있다.

context 객체에는 "awsRequestId" 라는 필드가 포함되어 있어, 특정 Lambda 함수 호출에 대한 고유 식별자를 제공한다. Lambda 함수의 로그는 표준 출력(standard output, stdout)을 사용하여 기록된다. AWS Lambda는 이를 CloudWatch Logs로 자동 전송한다. 따라서 로그를 표준 출력으로 기록하는 것이 일반적이다.


2, 3, 4번은 오답
event 객체는 요청에 대한 입력 데이터로, 요청 식별자를 포함하지 않는다.

Lambda는 Standard Output으로 로그를 기록하며, 파일에 로그를 기록하는 방식은 Lambda에서 직접적으로 지원되지 않는다.


🤔 문제

개발자가 AWS Lambda 함수를 작성하고 있습니다. 개발자는 Lambda 함수 실행 중 발생하는 주요 이벤트를 로그로 기록하고, 각 함수 호출과 관련된 고유 식별자를 포함해 특정 함수 호출과 이벤트를 연관 짓고자 합니다. 다음 중 이 목표를 달성하는 데 가장 적합한 방법은 무엇인가요?

 

  1. Lambda context 객체에서 요청 식별자를 가져옵니다. 애플리케이션이 로그를 콘솔에 기록하도록 설계합니다.
  2. Lambda event 객체에서 요청 식별자를 가져옵니다. 애플리케이션이 로그를 파일에 기록하도록 설계합니다.
  3. Lambda event 객체에서 요청 식별자를 가져옵니다. 애플리케이션이 로그를 콘솔에 기록하도록 설계합니다.
  4. Lambda context 객체에서 요청 식별자를 가져옵니다. 애플리케이션이 로그를 파일에 기록하도록 설계합니다.

정답

더보기

정답. 1번.

 

[Lambda context 객체]
context 객체는 Lambda 함수가 실행될 때 생성되며, 여기에는 "aws_request_id"라는 속성이 있다.

이 속성은 각 함수 호출마다 고유한 요청 ID를 제공한다. 이를 통해 로그에서 특정 호출을 추적할 수 있다.

 

[콘솔에 로그 작성]
Lambda 함수의 기본 로그 출력 방식은 console.log()를 사용하여 Amazon CloudWatch Logs로 전달되게 한다.

 

(오답) Lambda Event 객체에서 요청 ID를 가져오는 방법은 없다

(오답) 굳이 파일에 로그를 저장할 필요 없다. 콘솔에 기록하면 자동으로 CloudWatch에 저장된다.

 

728x90
반응형