/엔지니어/클라우드/AWS Lambda 기초 — 서버리스 함수 작성과
클라우드초급awslambda서버리스

AWS Lambda 기초 — 서버리스 함수 작성과 배포

Lambda 함수 생성, 트리거(API Gateway·S3·EventBridge) 연결, 환경변수·IAM 역할·레이어 설정, CLI로 배포하는 방법까지 서버리스 입문을 설명합니다.

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-job

S3 이벤트 트리거 (파일 업로드 시 처리)

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)
#aws#lambda#서버리스#serverless#api-gateway#python
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.