AWS 6~10

김기훈·2025년 10월 25일

AWS

목록 보기
2/5

6

AWS Lambda

  • 서버를 직접 관리하지 않고도 코드를 실행할 수 있는 서버리스(Serverless) 컴퓨팅 서비스서버를 - 만들지 않아도 코드를 실행할 수 있고,
    • 요청이 들어올 때만 실행되며,
    • 사용한 만큼만 비용을 내는 구조예요.

동작 구조

  • 이벤트 기반 구조
    • [이벤트 발생] → [Lambda 함수 실행] → [결과 반환]
  • ex
    • S3 버킷에 파일이 업로드됨 → Lambda가 자동 실행되어 이미지 리사이즈 수행
    • API Gateway로 HTTP 요청이 들어옴 → Lambda가 백엔드 코드 실행 후 응답
    • CloudWatch 이벤트 → Lambda로 스케줄링 작업 수행
    • DynamoDB 데이터 변경 → Lambda로 후속 처리

장단점

구분장점단점
운영 측면서버 관리 불필요 (No EC2, No Maintenance)컨테이너 기반이므로 OS 제어 불가
비용 측면실행한 만큼만 과금 (저비용)고빈도 트래픽 시 EC2보다 비쌀 수 있음
확장성자동 스케일링 (요청 수만큼 동시 실행)Cold Start(첫 실행 지연) 발생 가능
개발 측면빠른 배포, 함수 단위로 관리실행 제한: 15분, 10GB 메모리 등 한계 존재

실행 순서 예시 (API 호출 시)

    1. 사용자가 API Gateway로 HTTP 요청 전송
    1. API Gateway가 Lambda 함수를 트리거
    1. Lambda 함수가 코드를 실행 (예: DB 조회, 로직 처리 등)
    1. 결과를 API Gateway → 사용자에게 반환
    • 백엔드 서버처럼 동작하지만 서버 인스턴스가 없음

구조 예시

def lambda_handler(event, context):
    name = event.get("name", "Guest")
    return {
        "statusCode": 200,
        "body": f"Hello, {name}!"
    }
  • event: 트리거(요청)의 데이터
  • context: 실행 환경 정보 (함수 이름, 메모리, 타임아웃 등)
  • return: JSON 형식의 응답 반환

주요 트리거(Trigger)

트리거설명
Amazon S3파일 업로드/삭제 시 Lambda 실행
Amazon API GatewayHTTP 요청 시 Lambda 실행
Amazon DynamoDB Streams데이터 변경 시 Lambda 실행
Amazon CloudWatch Events / Schedule특정 시간대(스케줄) 실행
AWS SNS / SQS메시지 수신 시 Lambda 실행
AWS EventBridge이벤트 중심 애플리케이션 연결

Lambda의 사용 예시

분야예시
이미지 처리S3 업로드 시 자동으로 썸네일 생성
데이터 파이프라인DynamoDB → Lambda → RDS 데이터 이관
API 서버 대체API Gateway + Lambda로 백엔드 구성
로그 처리 / 알림CloudWatch 로그 분석 후 Slack 알림
크론잡(스케줄러)매일 0시에 백업, 리포트 전송 등 자동 실행

Lambda Layer (공유 라이브러리)

  • 여러 Lambda 함수에서 공통으로 사용하는 라이브러리나
    • 코드(예: requests, boto3)를 Layer로 분리하여 재사용 가능
      • 예: requests 라이브러리를 zip으로 만들어 Layer에 업로드 후 각 Lambda에서 import

7

boto3

  • AWS(Amazon Web Services)를 파이썬 코드로 제어할 수 있게 해주는 공식 SDK
    • 즉, 터미널이나 AWS 콘솔에서 하는 일을 Python 코드로 자동화할 수 있게 해줌

공식문서

역할

  • boto3는 AWS의 각 서비스와 연결해서 다음과 같은 작업을 수행 가능
    • S3 (저장소)
      • 파일 업로드/다운로드, 버킷 생성/삭제
    • EC2 (서버)
      • 인스턴스 생성, 시작, 중지, 상태 조회
    • RDS (데이터베이스)
      • DB 인스턴스 시작/정지, 백업 관리
    • IAM (권한관리)
      • 사용자/역할 생성, 정책 연결
    • Lambda
      • 함수 배포, 실행 로그 보기
    • CloudWatch
      • 로그나 모니터링 지표 확인

기능

S3 파일 업로드 / 다운로드

import boto3

s3 = boto3.client('s3')

# 업로드
s3.upload_file('local.txt', 'mybucket', 'remote.txt')

# 다운로드
s3.download_file('mybucket', 'remote.txt', 'downloaded.txt')

Resource vs Client 차이

구분설명예시
client저수준 API, AWS SDK 문서 그대로s3.list_buckets(), ec2.start_instances()
resource객체지향 스타일, 좀 더 Pythonics3.Bucket('mybucket').objects.all()

Elastic Beanstalk

  • AWS에서 웹 애플리케이션을 손쉽게 배포하고 운영하기 위한 서비스
  • 즉, Elastic Beanstalk는
    • 서버를 직접 EC2로 띄우기
    • 보안 그룹 설정하기
    • 로드 밸런서 붙이기
    • Auto Scaling 설정하기
    • RDS 연결
      • 이런걸 일일이 수동으로 하지 않아도 됨 ,Elastic Beanstalk는 이런걸 자동으로 해줌

핵심 개념

구성요소역할설명
Application애플리케이션 전체 묶음FastAPI나 Flask 같은 프로젝트 단위
Environment실행 환경"개발용", "운영용" 같은 환경 구분
Platform런타임 종류Python, Node.js, Java, Go, Docker 등

동작원리(간단)

  • 로컬 코드 준비
    • app.py, requirements.txt, Procfile
  • 코드 업로드
    • AWS 콘솔에서 ZIP 업로드 or eb cli로 배포
      • eb init : 환경 설정(지역, 플랫폼 선택)
      • eb create : 새 환경 생성
      • eb deploy : 코드 배포
  • 이렇게하면 Elastic Beanstalk이 알아서 함
    • EC2 인스턴스 생성
    • Load Balancer 연결
    • Auto Scaling 설정
    • CloudWatch 로그 연결
    • 배포 상태 관리
  • 결과

구조 이해

[Your Code]
     ↓
Elastic Beanstalk
     ↓
 ┌──────────────────────┐
 │ EC2 인스턴스        │  ← 실제 서버
 │ Load Balancer       │  ← 트래픽 분산
 │ Auto Scaling Group  │  ← 부하 대응
 │ CloudWatch          │  ← 모니터링
 └──────────────────────┘

RDS 연결도 가능

  • Beanstalk은 RDS(PostgreSQL/MySQL 등)를 함께 띄우거나 이미 만든 RDS를 연결도 가능
    • settings.py나 .env에 DATABASE_URL을 Beanstalk 환경변수로 등록하면 자동으로 연결
profile
안녕하세요.

0개의 댓글