[AWS] Lambda의 "event"와 "context" 객체란? 쉽게 정리
Lambda의 event
, context
AWS Lambda를 사용하면 event
object와 context
object라는 객체가 나온다.
이는 Lambda가 호출될 때 제공하는 기본 파라미터들이다.
Python 예시
def def lambda_handler(event, context):
— 함수의 처리 부분 —
return 리턴 값
Node.js 예시
exports.handler = async (event, context) => {
— 함수의 처리 부분 —
};
다른 AWS 서비스에서 전달된 데이터
event
객체:
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
객체:
context
객체는 실행하는 Lambda 함수의 자신의 메타데이터(metadata)를 제공한다.
메타데이터는 예를 들어, "람다 함수의 이름", "람다의 최대 메모리 사이즈", "람다의 timeout 시간" 등이 포함된다.
아래의 예시를 보면 아주 쉽게 이해할 수 있다.
- context.function_name : Lambda 함수의 이름
- context.function_version : 함수의 버전
- invoked_function_arn : 호출된 Lambda 함수의 ARN
- 그 외에 context 객체들: https://docs.aws.amazon.com/lambda/latest/dg/python-context.html
[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) {
}
이 요구사항을 만족하는 해결책은 무엇일까요?
- context 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 표준 출력으로 로그를 기록하도록 구성합니다.
- event 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 파일에 로그를 기록하도록 구성합니다.
- event 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 표준 출력으로 로그를 기록하도록 구성합니다.
- context 객체의 AWS 요청 ID 필드에서 요청 식별자를 얻고, 애플리케이션을 파일에 로그를 기록하도록 구성합니다.
정답
정답. 1번
context 객체는 함수 실행에 관련된 메타데이터를 포함하고 있다.
context 객체에는 "awsRequestId" 라는 필드가 포함되어 있어, 특정 Lambda 함수 호출에 대한 고유 식별자를 제공한다. Lambda 함수의 로그는 표준 출력(standard output, stdout)을 사용하여 기록된다. AWS Lambda는 이를 CloudWatch Logs로 자동 전송한다. 따라서 로그를 표준 출력으로 기록하는 것이 일반적이다.
2, 3, 4번은 오답
event 객체는 요청에 대한 입력 데이터로, 요청 식별자를 포함하지 않는다.
Lambda는 Standard Output으로 로그를 기록하며, 파일에 로그를 기록하는 방식은 Lambda에서 직접적으로 지원되지 않는다.