[AWS SAA] 10. Severless

Sunwu Park·2024년 12월 13일

AWS-SAA

목록 보기
11/12

AWS Lambda: 서버리스 컴퓨팅의 강력한 도구

AWS Lambda는 서버 관리 없이 코드를 실행할 수 있는 서비스로, 다양한 장점과 유스케이스를 제공
Lambda는 온디맨드 실행과 자동 스케일링을 지원하여 효율적이고 경제적인 클라우드 컴퓨팅 환경을 제공


EC2 vs Lambda 비교

EC2

  • 가상 서버
  • RAMCPU의 한계에 의해 성능 제한
  • 서버가 항상 실행 중 (Continuously running)
  • 스케일링 시 서버 추가/제거 작업 필요

Lambda

  • 가상 함수(Virtual Functions)로 서버 관리 필요 없음
  • 짧은 실행 시간 제한
  • 요청 시(On-demand) 실행
  • 스케일링 자동화

AWS Lambda의 장점

1. 간단한 요금제

  • 요청당 요금:
    • 첫 1,000,000 요청은 무료
    • 이후 $0.20/백만 요청 ($0.0000002/요청)
  • 실행 시간당 요금:
    • 월 400,000 GB-초 무료 (1GB RAM 기준 400,000초)
    • 이후 $1.00/600,000 GB-초
  • 비용 효율성 덕분에 높은 인기

2. AWS 서비스와의 통합

  • AWS의 다양한 서비스와 완벽하게 통합 가능
  • 여러 프로그래밍 언어 지원

3. 간편한 모니터링

  • AWS CloudWatch를 통해 손쉽게 함수 상태 및 성능 모니터링

4. 리소스 확장 용이

  • 함수당 최대 10GB RAM 할당 가능
  • RAM 증가 시 CPU네트워크 성능도 향상

Lambda 실행 및 배포 제한 사항

실행 제한

  • 메모리 할당: 128MB ~ 10GB (1MB 단위)
  • 최대 실행 시간: 900초(15분)
  • 환경 변수 크기: 최대 4KB
  • 디스크 용량: /tmp 디렉토리 기준 512MB ~ 10GB
  • 동시 실행: 기본 1,000 (확장 가능)

배포 제한

  • 압축된 코드 크기: 최대 50MB
  • 압축 해제 후 코드 및 의존성 크기: 최대 250MB
  • /tmp 디렉토리를 사용해 추가 파일 로드 가능
  • 환경 변수 크기: 최대 4KB

Lambda SnapStart

  • Java 11 이상에서 Lambda 성능 최대 10배 향상
  • 초기화 과정을 생략하여 낮은 지연 시간으로 실행
  • 새로운 버전 배포 시:
    • 초기화된 함수의 메모리 및 디스크 상태 스냅샷 생성
    • 스냅샷은 캐싱되어 빠른 액세스 제공
  • 추가 비용 없음

엣지에서의 커스터마이징: Lambda@Edge

Edge Function

  • CloudFront 분산 네트워크에 코드를 작성하여 사용자와 가까운 위치에서 실행
  • 서버 관리 필요 없음, 글로벌 배포 지원
  • 사용한 만큼만 요금 부과

주요 활용 사례

  • 웹사이트 보안 및 개인정보 보호
  • 동적 웹 애플리케이션 구현
  • 검색 엔진 최적화(SEO)
  • 데이터 센터 간 지능형 라우팅
  • 실시간 이미지 변환
  • A/B 테스트
  • 사용자 인증 및 권한 부여
  • 사용자 추적 및 분석

Lambda@Edge 이벤트 유형

  • Viewer Request: CloudFront가 요청을 받은 후
  • Origin Request: 원본 서버로 요청 전달 전
  • Origin Response: 원본 서버 응답 수신 후
  • Viewer Response: 사용자에게 응답 전달 전

AWS Lambda 컨테이너 사용 주의사항
Lambda에서 컨테이너를 실행하려면 반드시 Lambda Runtime API를 구현해야 합니다. 그렇지 않으면 해당 컨테이너는 ECS 또는 Fargate에서 실행하는 것이 적합합니다.


요금제 요약

  1. 요청당 요금
    • 첫 1,000,000 요청 무료
    • 이후 $0.20/백만 요청
  2. 실행 시간당 요금
    • 월 400,000 GB-초 무료
    • 이후 $1.00/600,000 GB-초

예시:

  • 1GB RAM 함수: 400,000초 무료
  • 128MB RAM 함수: 3,200,000초 무료

CloudFront Functions vs. Lambda@Edge: 주요 차이점 및 활용 사례


CloudFront Functions

CloudFront Functions는 빠르고 가벼운 엣지 컴퓨팅을 제공합니다. 캐시 키 조정, 요청 속성 변환 등의 작업에 최적화되어 있으며, 단순한 HTTP 요청 및 응답 처리를 위해 설계되었습니다.

주요 활용 사례

  1. 캐시 키 정규화
    • 요청의 속성(headers, cookies, query strings, URL)을 변환하여 최적의 캐시 키 생성
  2. 헤더 조작
    • HTTP 헤더 추가/수정/삭제
  3. URL 리다이렉트 및 리라이트
    • 요청 URL 변경 또는 리다이렉션 처리
  4. 요청 인증 및 권한 부여
    • 사용자 생성 토큰(예: JWT) 생성 및 검증을 통해 요청 허용/거부

Lambda@Edge

Lambda@Edge는 복잡한 작업 처리외부 의존성 사용이 필요한 시나리오에 적합합니다. 더 긴 실행 시간, CPU 및 메모리 조정, 네트워크 및 파일 시스템 액세스를 지원합니다.

주요 활용 사례

  1. 긴 실행 시간
    • 여러 밀리초(ms)가 필요한 작업 처리
  2. 외부 라이브러리 사용
    • AWS SDK 등 외부 라이브러리 활용
  3. 네트워크 액세스
    • 외부 서비스와의 통신 및 데이터 처리
  4. 파일 시스템 및 요청 본문 액세스
    • HTTP 요청의 본문(body) 또는 파일 시스템 작업 필요 시

두 서비스의 차이점 비교

기능CloudFront FunctionsLambda@Edge
실행 시간짧은 실행 시간 (수 밀리초 이하)긴 실행 시간 (여러 밀리초)
CPU/메모리 조정 가능 여부불가능가능
외부 라이브러리 사용지원하지 않음지원 (예: AWS SDK)
네트워크 액세스지원하지 않음지원
파일 시스템 접근지원하지 않음지원
사용 사례요청 속성 변환, 헤더 조작, URL 리다이렉트외부 API 호출, 요청 본문(body) 처리, 복잡한 작업

Lambda in VPC

Lambda를 VPC에 배포하면 네트워크 접근성과 보안이 강화됩니다.

설정 방법

  • VPC ID, Subnets, Security Groups를 정의해야 함
  • Lambda는 서브넷에 ENI(Elastic Network Interface)를 생성

주요 특징

  • Lambda 함수는 VPC 내부의 리소스(RDS, EC2 등)에 안전하게 접근 가능
  • 퍼블릭 액세스가 제한된 리소스와의 통신 가능

Lambda와 RDS Proxy

Lambda가 데이터베이스에 직접 접근하면, 높은 부하에서 많은 연결이 열려 성능 문제가 발생할 수 있습니다. 이를 해결하기 위해 RDS Proxy를 사용할 수 있습니다.

RDS Proxy의 장점

  1. 확장성 향상
    • DB 연결을 풀링 및 공유하여 연결 관리 최적화
  2. 가용성 향상
    • 장애 조치(failover) 시간을 66% 감소시키고 연결 유지
  3. 보안 향상
    • IAM 인증을 적용하고 자격 증명을 Secrets Manager에 저장

주의사항

  • Lambda 함수는 반드시 VPC 내부에 배포되어야 함 (RDS Proxy는 퍼블릭 액세스 불가)

RDS 이벤트 알림

RDS 이벤트 알림은 데이터베이스 인스턴스와 관련된 다양한 상태 정보를 제공합니다.

주요 특징

  • 이벤트 카테고리: DB Instance, DB Snapshot, DB Parameter Group, DB Security Group, RDS Proxy, Custom Engine Version
  • 실시간 알림: 최대 5분 이내의 이벤트 전달
  • 알림 방식:
    • SNS(알림 전송)
    • EventBridge(이벤트 구독)

제한 사항

  • DB 데이터 자체 정보 제공 없음
    • 알림은 데이터베이스 인스턴스 상태에 대한 정보만 포함

Amazon DynamoDB

DynamoDB는 완전 관리형 NoSQL 데이터베이스로, 높은 가용성과 대규모 워크로드를 지원합니다.

주요 특징

  1. 확장성: 수백 TB의 스토리지와 초당 수백만 요청 처리 가능
  2. 고성능: 단일 디지트 밀리초 응답 시간 보장
  3. 보안 통합: IAM 기반 인증 및 권한 관리
  4. 저비용: 자동 스케일링 지원 및 관리 필요 없음
  5. 가용성: 다중 AZ 복제를 통해 항상 사용 가능

테이블 클래스

  • 표준(Standard): 일반 워크로드에 적합
  • 저빈도 액세스(IA): 자주 사용되지 않는 데이터에 적합한 비용 절감 옵션

DynamoDB 기초 개념

구조 및 데이터 모델

  • 테이블로 구성: Primary Key는 테이블 생성 시 정의
  • 무제한 아이템(=행) 저장 가능
  • 아이템 속성(Attribute): 필요에 따라 추가 가능 (null 허용)
  • 아이템 최대 크기: 400KB

지원 데이터 타입

  1. 스칼라(Scalar):
    • String, Number, Binary, Boolean, Null
  2. 문서(Document):
    • List, Map
  3. 세트(Set):
    • String Set, Number Set, Binary Set

특징

  • 스키마 진화 가능: 새로운 속성 추가에 유연
  • NoSQL 구조: 관계형 데이터베이스와 다르게 간단하고 빠르게 데이터 처리 가능

DynamoDB

Read/Write Capacity Modes (읽기/쓰기 용량 모드)

  1. Provisioned Mode (기본값)
    • 초당 읽기/쓰기 처리량을 사전에 지정
    • RCU(Read Capacity Unit)와 WCU(Write Capacity Unit)에 대한 요금 부과
    • Auto-scaling으로 처리량 자동 조정 가능
  2. On-Demand Mode
    • 읽기/쓰기가 워크로드에 따라 자동으로 스케일 업/다운
    • 용량 계획이 필요 없음
    • 비용이 더 비쌈(예측 불가능한 워크로드에 적합)

DynamoDB Accelerator (DAX)

  • 완전 관리형 메모리 캐시로 DynamoDB 성능 최적화
  • 캐시된 데이터에 대해 마이크로초 단위의 지연 시간 제공
  • 기존 DynamoDB API와 호환, 애플리케이션 로직 수정 불필요
  • 기본 TTL(Time to Live): 5분

DynamoDB Streams

  • 테이블 항목 수준의 변경(create/update/delete)을 스트림으로 제공
  • 주요 활용 사례:
    • 실시간 이벤트 처리 (예: 사용자 환영 이메일 전송)
    • 실시간 사용 분석
    • 파생 테이블로 데이터 삽입
    • 교차 지역 복제
    • AWS Lambda 트리거 사용
  • Stream 종류:
    • DynamoDB Streams: 24시간 데이터 보관, 제한된 소비자 수
    • Kinesis Data Streams: 1년 데이터 보관, 높은 소비자 수 처리

DynamoDB Global Tables

  • 다중 지역 접근성 제공
  • 활성-활성 복제: 모든 지역에서 읽기/쓰기 가능
  • DynamoDB Streams 활성화 필요

Time-to-Live (TTL)

  • 만료된 항목을 자동으로 삭제
  • 사용 사례:
    • 저장 데이터 줄이기
    • 규제 준수를 위해 최신 항목만 유지
    • 웹 세션 관리

Backups

  1. 지속적 백업(Point-in-Time Recovery, PITR):
    • 최근 35일까지의 데이터를 복구
    • 복구는 새 테이블을 생성
  2. 온디맨드 백업:
    • 장기 데이터 보존
    • 성능 또는 지연에 영향을 미치지 않음
    • 교차 지역 복사 가능

DynamoDB와 S3 통합

  • S3로 데이터 내보내기:
    • PITR 활성화 필요
    • DynamoDB JSON 또는 ION 형식
  • S3에서 데이터 가져오기:
    • CSV, DynamoDB JSON, ION 형식 지원
    • 새 테이블 생성

AWS API Gateway

주요 특징

  • AWS Lambda와 통합하여 인프라 관리 없이 REST API 제공
  • WebSocket 프로토콜 지원
  • API 버전 관리, 환경(dev/test/prod) 관리 가능
  • 보안(인증 및 권한 부여) 지원:
    • IAM Roles, Cognito, Custom Authorizer
  • 요청 스로틀링, 캐싱, API 키 생성 지원

엔드포인트 유형

  1. Edge-Optimized:
    • 글로벌 클라이언트 대상 (CloudFront 엣지 로케이션을 통해 라우팅)
  2. Regional:
    • 동일 지역 클라이언트 대상
    • 수동으로 CloudFront와 결합 가능
  3. Private:
    • VPC 인터페이스를 통해서만 액세스 가능

통합 방식

  1. Lambda 함수:
    • Lambda 함수를 호출하여 REST API 노출
  2. HTTP:
    • 백엔드 HTTP 엔드포인트 연결
  3. AWS 서비스:
    • AWS API를 공개적으로 노출 (예: Step Functions 워크플로 시작)

AWS Step Functions

주요 특징

  • Lambda 함수 간의 서버리스 워크플로를 시각적으로 설계 가능
  • 조건, 병렬 처리, 오류 처리 등 다양한 기능 제공
  • EC2, ECS, API Gateway, SQS 등과 통합
  • 사용 사례:
    • 주문 처리, 데이터 처리, 웹 애플리케이션 워크플로

Amazon Cognito

주요 특징

  1. Cognito User Pools (CUP):
    • 사용자 인증 및 관리
    • 이메일/전화 인증, 비밀번호 재설정, MFA 지원
    • Facebook, Google, SAML과 같은 페더레이션 ID 지원
  2. Cognito Identity Pools:
    • AWS 리소스에 대한 직접 액세스 제공
    • IAM과 통합 가능

보안 및 통합

  • API Gateway 및 ALB와 통합
  • 모바일, 웹 애플리케이션의 사용자 인증 제공
  • “수백 명의 사용자”, “모바일 사용자”와 같은 시나리오에 적합![]

0개의 댓글