Lambda 기본 개념
- 이벤트 기반 실행: 트리거가 없으면 실행 안 됨 (유휴 비용 없음)
- 최대 실행 시간: 15분
- 메모리: 128MB ~ 10GB (CPU는 메모리에 비례)
- 과금: 요청 수 + 실행 시간(ms)
- 콜드 스타트: 처음 실행 시 컨테이너 초기화 시간
첫 번째 Lambda 함수 (Python)
Python
# lambda_function.py
import json
def lambda_handler(event, context):
"""Lambda 핸들러 — 모든 함수의 진입점"""
print(f"Event: {json.dumps(event)}")
name = event.get('name', 'World')
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': f'Hello, {name}!'})
}CLI로 함수 생성
Bash
# IAM 역할 생성 (Lambda 실행 권한)
aws iam create-role --role-name lambda-basic-role --assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "lambda.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}'
# 기본 실행 정책 연결
aws iam attach-role-policy --role-name lambda-basic-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
# 코드 압축
zip function.zip lambda_function.py
# 함수 생성
aws lambda create-function --function-name my-function --runtime python3.12 --role arn:aws:iam::ACCOUNT_ID:role/lambda-basic-role --handler lambda_function.lambda_handler --zip-file fileb://function.zip --timeout 30 --memory-size 256
# 테스트 실행
aws lambda invoke --function-name my-function --payload '{"name": "Alice"}' response.json
cat response.json
# 코드 업데이트
zip function.zip lambda_function.py
aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip환경변수 설정
Bash
aws lambda update-function-configuration --function-name my-function --environment 'Variables={DB_HOST=localhost,DB_NAME=mydb,ENV=production}'
# 함수 내에서 사용
import os
db_host = os.environ['DB_HOST']API Gateway 트리거 (HTTP 엔드포인트)
Bash
# HTTP API 생성 (v2, 더 간단하고 저렴)
aws apigatewayv2 create-api --name my-api --protocol-type HTTP --target arn:aws:lambda:ap-northeast-2:ACCOUNT:function:my-function
# Lambda에 API Gateway 권한 부여
aws lambda add-permission --function-name my-function --statement-id api-gateway-invoke --action lambda:InvokeFunction --principal apigateway.amazonaws.com
# API 엔드포인트 확인
aws apigatewayv2 get-apis --query 'Items[0].ApiEndpoint'EventBridge로 정기 실행 (cron)
Bash
# 규칙 생성 (매일 09:00 UTC)
aws events put-rule --name daily-job --schedule-expression "cron(0 9 * * ? *)" --state ENABLED
# Lambda를 타깃으로 설정
aws events put-targets --rule daily-job --targets '[{
"Id": "lambda-target",
"Arn": "arn:aws:lambda:ap-northeast-2:ACCOUNT:function:my-function"
}]'
# Lambda에 EventBridge 권한 부여
aws lambda add-permission --function-name my-function --statement-id eventbridge-invoke --action lambda:InvokeFunction --principal events.amazonaws.com --source-arn arn:aws:events:ap-northeast-2:ACCOUNT:rule/daily-jobS3 이벤트 트리거 (파일 업로드 시 처리)
Bash
# S3 버킷 알림 설정
aws s3api put-bucket-notification-configuration --bucket my-bucket --notification-configuration '{
"LambdaFunctionConfigurations": [{
"LambdaFunctionArn": "arn:aws:lambda:ap-northeast-2:ACCOUNT:function:my-function",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {"FilterRules": [{"Name": "suffix", "Value": ".jpg"}]}
}
}]
}'로그 확인
Bash
# 최근 로그 조회
aws logs tail /aws/lambda/my-function --follow
# 특정 기간
aws logs filter-log-events --log-group-name /aws/lambda/my-function --start-time $(date -d '1 hour ago' +%s000)편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.