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

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

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

목차
  1. Lambda 기본 개념
  2. 첫 번째 Lambda 함수 (Python)
  3. CLI로 함수 생성
  4. 환경변수 설정
  5. API Gateway 트리거 (HTTP 엔드포인트)
  6. EventBridge로 정기 실행 (cron)
  7. S3 이벤트 트리거 (파일 업로드 시 처리)
  8. 로그 확인

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 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)AWS 공식 문서 ↗Python 공식 문서 ↗

질문 & 답변 (Q&A)

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