Serverless

JINWOO OH·2023년 7월 24일

SAA

목록 보기
17/19
post-thumbnail

What’s serverless?

  • 서버를 관리할 필요가 없다
  • 서버를 프로비저닝 하지 않는 것을 의미함
  • 코드를 배치하는 것 = 함수를 배치
  • AWS Lambda
  • 원격 관리되는 것을 모두 포함 (DB, 메시징, 스토리지 등 서버를 프로비저닝 하지 않는 모든 것을 포함)

Serverless in AWS

  • AWS Lambda
  • DynamoDB
  • AWS Cognito
  • AWS API Gateway
  • Amazon S3
  • AWS SNS & SQS
  • AWS Kinesis Data Firehose
  • Aurora Serverless
  • Step Functions
  • Fargate

AWS Lambda

  • Lambda는 가상의 함수
  • 관리할 서버 없이 코드를 프로비저닝하면 함수가 실행
  • 온디맨드로 실행된다 즉, Lambda를 사용하지 않으면 람다 함수가 실행되지 않는다
  • 스케일링이 자동화된다

Benefits of AWS Lambda

  • Easy Pricing
  • 여러가지 프로그래밍 언어 사용 가능
  • CloudWatch와의 모니터링 통합도 쉽다
  • 함수당 최대 10GB의 램을 프로비저닝 할 수 있다
  • 함수의 RAM을 증가시키면 CPU및 네트워크의 품질과 성능도 함께 향상된다
  • 컨테이너가 Lambda 런타임 API를 구현해야 한다
    • 만약 컨테이너가 Lambda 런타임 API를 구현하지 않는다면 ECS나 Fargate에서 컨테이너를 실행해야 한다

AWS Lambda Language Support

  • 커뮤니티가 지원하는 사용자 지정 런타임 API가 있어 다양한 언어를 지원

AWS Lambda Integrations Main ones

  • API Gateway : REST API를 생성
  • Kinesis : Lambda를 이용해 바로 데이터를 변환
  • DynamoDB : 트리거를 생성할 때 사용
    • 데이터베이스에 람다 함수가 작동되도록한다
  • CloudFront : Lambda@Edge
  • CloudWatch 이벤트, EventBridge : AWS의 인프라에 어떤 일이 생기고 그 상황에 대응하고자 할 때 사용
  • CloudWatch Logs : 어디든 해당 로그를 스트리밍
  • Cognito : 사용자가 데이터베이스에 로그인할 때마다 응답

Serverless CRON Job

  • CRON : EC2 인스턴스에서 작업을 생성하는 방법인데 이는 가상 서버(EC2 인스턴스 등)에서 실행해야 한다
  • CloudWatch 이벤트 규칙 또는 EventBridge 규칙을 만들고 1시간마다 작동되게 설정해서 1시간마다 람다 함수와 통합되면 태스크를 수행하는 형식 등으로 사용

AWS Lambda Limits to Know - per region

  • 한도는 리전 당 존재
  • 실행 한도
    • 실행 시 메모리 할당량은 128MB 에서 10GB이며 메모리는 1MB씩 증가
  • 배포 한도
    • 압축 시 최대 크기는 50MB, 압축하지 않았을 경우 250MB
    • 위의 용량을 넘어가면 /tmp 공간을 사용해야 하므로 시작할 때 크기가 큰 파일이 있으면 /tmp 디렉터리를 이용

Customization At The Edge

  • CloudFront를 사용할 때는 엣지 로케이션을 통해 콘텐츠를 배포
  • Edge Function
    • CloudFront 배포에 연결하는 코드
  • CloudFront의 두 종류 함수
    • CloudFront 함수
    • Lambda@Edge
  • Edge Function을 사용하면 전역으로 배포되기 때문에 서버를 관리할 필요가 없다

CloudFront Functions & Lambda@Edge Use Cases

  • 웹사이트 보안과 프라이버시
  • 엣지에서의 동적 웹 애플리케이션
  • 검색 엔진 최적화
  • 오리진 및 데이터 센터 간 지능형 경로

CloudFront Functions

  • 고성능, 고확장성이 필요할 때 뷰어 요청과 뷰어 응답에만 사용
  • 초당 수백만 개의 요청을 처리
  • Runtime Support : JavaScript

Lambda@Edge

  • 기능이 더 많다
  • 초당 수천 개의 요청을 처리할 수 있다
  • 모든 CloudFront 요청 및 응답을 변경할 수 있다
  • Runtime Support : Node.js, Python

Lambda by default

  • 사용자의 VPC 외부에서 시작
  • 따라서 사용자는 VPC 내에서 리소스에 액세스할 권한이 없다

Lambda in VPC

  • VPC ID Lambda 함수를 시작하려는 서브넷을 지정하고 함수에 보안 그룹을 추가해야 한다

Lambda with RDS proxy

  • RDS 데이터베이스가 프라이빗 서브넷에 있어도 Lambda 함수로 직접 해당 DB에 액세스할 수 있다
  • RDS proxy를 사용하면 연결을 한 곳으로 모으고 RDS 데이터베이스 인스턴스 연결의 수를 줄일 수 있다
    • 데이터베이스 연결의 풀링과 공유를 통해 확장성을 향상
    • 장애 조치의 이점
    • 보안을 높일 수 있다

Amazon DynamoDB

  • 데이터가 다중 AZ간에 복제되므로 가용성이 높다
  • 클라우드 네이티브
  • NoSQL 데이터베이스
  • 관계형 데이터베이스는 아니지만 트랜잭션 지원 기능이 있다
  • 방대한 워크로드로 확장이 가능
    • 데이터베이스가 내부에서 분산
  • 초당 수백만 개의 요청을 처리하고 수조 개의 행, 수백 TB의 스토리지를 가지게 된다
  • 성능이 높고 일관성 또한 높다
  • 보안과 관련된 모든 기능은 IAM과 통합되어 있다
  • 오토 스케일링 기능이 탑재
  • 데이터베이스를 프로비저닝할 필요가 없다
    • 항상 사용할 수 있으므로 테이블을 생성해 해당 테이블의 용량만 설정하면 된다
  • 테이블 클래스는 두 종류
    • Standard : 액세스가 빈번한 데이터
    • IA : 액세스가 빈번하지 않는 데이터

DynamoDB - Basics

  • 데이터베이스가 이미 존재하는 서비스이므로 테이블만 생성하면 된다
  • 각 테이블에 키가 부여되는데 기본 키는 생성 시 결정
  • 속성은 나중에 추가할 수도 있고 null이 될 수도 있다
  • DynamoDB 항목의 최대 크기는 400KB이므로 큰 객체를 저장할 때는 적합하지 않다
  • 데이터의 유형과 구성 면에서 스키마를 빠르게 전개해야 할 때 DynamoDB가 유리
  • provision mode : 미리 읽기와 쓰기 용량을 할당해서 비용을 관리하고 최적화
  • on-demand mode : 애플리케이션이 수행하는 실제 읽기와 쓰기에만 과금

DynamoDB Accelerator (DAX)

  • 고가용성의 완전 관리형 인메모리 캐시
  • 캐시 데이터에 마이크로초 수준의 지연 시간을 제공
  • 캐시의 기본 TTL은 5분으로 설정되어 있으나 변경이 가능하다
  • ElastiCache는 집계 결과를 저장할 때 유용
  • DynamoDB는 대용량의 연산을 저장할 때 유용

DynamoDB - Stream Processing

  • 스트림 처리도 가능하다
  • 테이블의 모든 수정 사항 (생성, 업데이트, 삭제)를 포함한 스트림을 생성 할 수 있다
  • 두 가지 스트림 처리
    • DynamoDB Streams
      • 보존 기간이 24시간이며 소비자 수가 제한
      • Lambda 트리거와 함께 사용하면 좋다
    • Kinesis Data Streams
      • 보존 기간이 1년
      • 더 많은 수의 소비자 수를 가진다
      • 데이터를 처리하는 방법이 많다

AWS API Gateway

  • API Gateway와 Lambda가 통합하면 완전 서버리스 애플리케이션이 구축되므로 인프라 관리가 필요 하지 않다
  • WebSocket 프로토콜을 지원하므로 API Gateway로 두 가지 방법의 실시간 스트리밍이 가능하다
  • API Versioning을 핸들링하므로 클라이언트 연결이 끊기지 않는다
  • 인증, 권한 부여 등 수많은 보안 기능을 API Gateway에 활성화할 수 있다

AWS Step Functions

  • 서버리스 워크플로를 시각적으로 구성할 수 있는 기능
  • 주로 람다 함수를 오케스트레이션 하는 데 활용

0개의 댓글