어쩌다 IT
article thumbnail

https://jwlish.tistory.com/entry/SAA-C03-Serverless-Lambda-DynamoDB-API-Gateway

 

[SAA-C03] Serverless - Lambda, DynamoDB, API Gateway

AWS Lambda Serverless 서버리스는 서버가 없는 것이 아니라 서버가 보이지 않게 하거나 서버를 프로비저닝 하지 않는 것을 의미 서버리스 서비스를 사용하는 개발자는 서버 관리할 필요가 없음 Lambda,

jwlish.tistory.com

더보기

AWS Lambda

 

Serverless

  • 서버리스는 서버가 없는 것이 아니라 서버가 보이지 않게 하거나 서버를 프로비저닝 하지 않는 것을 의미
  • 서버리스 서비스를 사용하는 개발자는 서버 관리할 필요가 없음
  • Lambda, DynamoDB, Cognito, API Gateway, S3, SNS, SQS, KDF, Aurora, Fargate 등이 서버리스 서비스

 

AWS Lambda

  • 서버를 구축 및 프로비저닝 하는 과정을 거치지 않고 코드를 실행하는 서비스
  • Lambda의 핵심 구성 요소는 Lambda 함수와 이벤트 소스로 구성
  • 최대 15분의 실행 제한 시간이 있고 15분을 초과하는 작업에 대해서는 비적합
  • 더 많은 Lambda 함수를 동시에 필요로 하는 경우 AWS 가 자동으로 프로비저닝 해서 스케일링을 진행
  • Lambda는 AWS의 CloudWatch와 같은 다양한 서비스와 여러 프로그래밍 언어와 통합이 쉬움
  • 메모리 할당량은 128MB ~ 10GB, 메모리는 1MB씩 증가
  • 메모리가 증가되면 CPU와 네트워크 품질 등 성능이 향상
  • Lambda 컨테이너 이미지는 컨테이너 이미지 자체에 Lambda Runtime API를 구현해야 실행 가능
  • 컨테이너에 Lambda Runtime API 가 구현되어 있지 않으면 ECS 나 Fargate에서 컨테이너 실행
 

What is AWS Lambda? - AWS Lambda

What is AWS Lambda? AWS Lambda is a compute service that lets you run code without provisioning or managing servers. Lambda runs your code on a high-availability compute infrastructure and performs all of the administration of the compute resources, includ

docs.aws.amazon.com

 

AWS Lambda 네트워킹 기초

  • 기본적으로 Lambda 함수를 시작하면 VPC 외부에서 시작되어서 VPC 내의 리소스로 액세스 할 권한이 없음
  • DynamoDB와 같은 퍼블릭 리소스에 액세스는 가능하지만 프라이빗 RDS 에는 액세스 불가능
  • Lambda 함수 생성 시 VPC 활성화와 ENI 생성을 통해 VPC 내에 생성하고 프라이빗 RDS로 액세스 가능
  • Lambda 함수가 RDS에 직접 액세스 하게 되면 함수가 너무 많이 생성되었다 사라지길 반복하게 되어 로드 상승
  • RDS 프록시를 이용하여 연결을 한 곳으로 모으고 RDS와 연결하여 인스턴스 연걸의 수를 줄임
  • RDS 프록시 장점
    • 데이터베이스 연결의 풀링과 공유를 통해 확장성 향상
    • 장애 발생 시 장애 조치 시간을 66% 까지 줄여 가용성을 향상시키고 연결을 보존
    • RDS 프록시 수준에서 IAM 인증을 강제하여 보안을 높이고 자격 증명은 Secrets Manager에 저장

Amazon DynamoDB

 

Amazon DynamoDB

  • 완전 관리형 데이터베이스
  • 데이터가 다중 AZ 간에 복제되어 가용성이 높음
  • NoSQL 데이터베이스이며 RDS 나 Aurora 같은 관계형 데이터베이스는 아니지만 Transaction 지원 기능이 있음
  • 데이터베이스가 내부에서 분산되기 때문에 방대한 워크로드로의 확장이 가능
  • 초당 수백만 개의 요청을 처리하고 수조 개의 행, 수백 TB의 스토리지를 가지고 처리 속도가 빠르며 일관성이 높음
  • 보안, 권한 부여, 관리 기능 등 보안과 관련된 모든 기능은 IAM과 통합
  • 비용이 적게 들고 오토 스케일링 기능이 탑재
  • 액세스가 빈번한 데이터는 Standard Class에, 빈번하지 않은 데이터는 IA Table Class에 저장
  • DynamoDB는 테이블로 구성되며 데이터베이스가 이미 존재하는 서비스로 따로 생성할 필요 없음
  • 테이블을 생성하면 각 테이블에 기본 키가 부여되는데 기본 키는 생성 시 결정
  • DynamoDB 항목의 최대 크기는 400KB로 큰 객체 저장에는 적합하지 않음
  • 스키마를 빠르게 전개해야 할 때 유용
  • Attributes(속성)은 null로 설정하거나 추후에 추가 가능
  • DynamoDB 읽기 / 쓰기 용량 설정 모드
    • 프로비저닝 된 모드 (기본값)
      • 초당 읽기 / 쓰기 요청 수를 예측해서 미리 지정
      • 미리 용량을 계획하고 읽기 용량 단위(RCU)와 쓰기 용량 단위(WCU)만큼의 비용을 지불하는 방식
      • 오토 스케일링 기능으로 테이블 로드에 따라 RCU와 WCU를 늘리거나 줄일 수 있음
      • 비용 절감을 원할 때 사용
    • 온디맨드 모드
      • 읽기 / 쓰기 용량이 워크로드에 따라 자동으로 확장
      • 미리 용량을 계획하지 않으므로 RCU, WCU 개념이 없고, 사용한 만큼의 비용 지불
      • 워크로드를 예측할 수 없거나 급격히 증가하는 경우에 유용
 

What is Amazon DynamoDB? - Amazon DynamoDB

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

Amazon DynamoDB - 고급 기능

  • DynamoDB Accelerator (DAX)
    • DynamoDB를 위한 고가용성의 완전 관리형 무결절 인메모리 캐시
    • DynamoDB 테이블에 읽기 작업이 많을 때 DAX 클러스터를 생성하고 데이터를 캐싱하여 읽기 혼잡을 해결
    • DAX는 캐시 데이터에 마이크로초 수준의 지연 시간을 제공
    • DAX 클러스터는 기존 DynamoDB API와 호환
    • 캐시의 기본 TTL은 5분으로 설정
    • DAX는 개별 객체 캐시, 쿼리와 스캔 캐시를 처리하는데 유용
    • 집계 결과 저장에는 ElastiCache가 좋고, 대용량의 연산을 저장할 때는 DynamoDB가 좋음

 

  • DynamoDB - 스트림 처리
    • 테이블의 생성, 업데이트, 삭제를 포함한 모든 수정 사항에 스트림 생성 가능
    • 사용자 테이블에 새로운 사용자가 등록되었을 때 이메일을 보내는 등 변경 사항에 실시간 반응하는데 활용
    • 실시간으로 사용 분석, 파생 테이블 삽입, 리전 간 복제 가능
    • DynamoDB 테이블 변경 사항에 대해 Lambda 함수 실행 가능
    • DynamoDB Streams
      • 보존 기간 24시간, 소비자 수 제한
      • Lambda 트리거와 함께 사용하거나 DynamoDB Stream Kinesis 어댑터 사용하여 데이터 처리
    • Kinesis Data Streams
      • 보존 기간 1년, 소비자 수를 많이 가질 수 있음
      • AWS Lambda, Kinesis Data Analytics, KDF, AWS Glue Stream ETL 등 데이터 처리 방법이 다양

 

  • DynamoDB - Global Tables
    • 복수의 리전에서 짧은 지연 시간으로 액세스 할 수 있게 해주는 기능
    • 다중 활성 복제 가능
    • 애플리케이션이 모든 리전에서 테이블을 읽고 쓸 수 있음
    • Global Tables 활성화를 위해서는 DynamoDB 스트림을 활성화해야 리전 간 테이블 복제 가능

 

  • DynamoDB - Time To Live (TTL)
    • 타임스탬프 만료 후에 자동으로 아이템을 삭제할 수 있는 기능
    • 웹 세션 핸들링이나 일정 기간 이후 데이터를 삭제해야 하는 규정을 따라야 할 때 사용
  • DynamoDB - 재해 복구
    • 지정 시간 복구(Point In Time Recovery, PITR)를 활성화를 통해 35일 동안 지속되는 백업 작업 가능
    • 온디맨드 백업은 직접 삭제 할 때 까지 보존, AWS Backup 서비스를 통해 리전 간 백업 복사 가능

AWS API Gateway

 

AWS API Gateway

  • API Gateway는 Lambda와 통합하면 완전한 서버리스 애플리케이션이 구축되므로 인프라 관리 필요 없음
  • WebSocket 프로토콜을 지원
  • API 버저닝을 핸들링하므로 v1, v2, v3이 생겨도 클라이언트 연결이 끊기지 않음
  • 개발, 테스트, 운영 환경 관리
  • 인증 및 권한 부여 등 수 많은 보안 기능을 API Gateway에 활성화 가능
  • API Key 생성할 수 있고, API Gateway에 클라이언트 요청이 과도할 때 스로틀링 가능
  • API Gateway가 사용자를 식별하는 방법으로는 IAM 역할, Amazon Cognito, 사용자 지정 권한 부여자로 확인

 

AWS API Gateway - Integration High Level

  • Lambda 함수
    • Lambda 함수 지연 호출
    • Lambda 함수를 사용하는 REST API를 완전 서버리스 애플리케이션에 노출시키는 가장 일반적인 방법
  • HTTP
    • 백엔드의 HTTP 엔드포인트 노출
    • 온프레미스에 HTTP API가 있거나 클라우드 환경에 ALB가 있을 때 API Gateway를 활용
    • 속도 제한, 캐싱, 인증, API 키 등의 기능을 추가하기 위해 통합
  • AWS Service
    • API Gateway로 어떤 AWS API라도 노출 가능
    • API Gateway에서 직접 SQS에 메세지를 게시하는 등에 활용
    • 인증을 추가하거나 API를 퍼블릭으로 배포하거나 특정 AWS 서비스에 속도 제한을 추가하기 위해 통합

 

API Gateway - 배포 방법

  • Edge Optimized - 글로벌 클라이언트용, 모든 요청이 CloudFront 엣지 로케이션을 통해 라우팅, 지연 시간 개선
  • 리전 배포
    • 모든 사용자는 API Gateway를 생성한 리전과 같은 리전에 있어야 함
    • 자체 CloudFront 배포를 생성할 수 있고, 캐싱 전략과 CloudFront 설정에 더 많은 권한을 가질 수 있음
  • 프라이빗 배포 - ENI 같은 VPC 엔드포인트를 사용하여 VPC 통해서 액세스 가능
 

What is Amazon API Gateway? - Amazon API Gateway

What is Amazon API Gateway? Amazon API Gateway is an AWS service for creating, publishing, maintaining, monitoring, and securing REST, HTTP, and WebSocket APIs at any scale. API developers can create APIs that access AWS or other web services, as well as d

docs.aws.amazon.com


AWS Step Function

 

AWS Step Function

  • Serverless Workflow를 시각적으로 구성할 수 있는 기능, Lambda 함수를 오케스트레이션 하는 데 활용
  • 시퀀싱, 병행 실행, 조건 설정, 타임아웃, 에러 처리 기능 등 제공
  • Lambda 함수 뿐 아니라 EC2, ECS, 온프레미스 서버, API Gateway, SQS 등과 연동 가능
 

What is AWS Step Functions? - AWS Step Functions

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

profile

어쩌다 IT

@Jinoo.K

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!