[AWS SAA] 솔루션 설계자 관점의 Serverless - DynamoDB, API Gateway, Step Functions

junghan·2023년 3월 21일
1

AWS SAA

목록 보기
37/51
post-thumbnail
post-custom-banner

DynamoDB

DynamoDB는 프로비저닝, 패치, 혹은 관리할 서버가 없고 설치, 유지 및 운용해야 할 소프트웨어가 없는 서버리스 서비스입니다. DynamoDB는 용량 조정 및 성능 유지를 위한 테이블의 확장 및 축소를 자동으로 스케일링합니다. 이는 프로비저닝(RCU & WCU 지정) 및 온디맨드 (사용한 만큼의 비용 책정) 용량 모드 모두를 제공합니다.

DynamoDB

  • 완전 관리형 데이터베이스로 데이터가 자동으로 다중 AZ 간에 복제되므로 가용성이 높습니다
  • NoSQL 데이터베이스
  • 트랜잭션 지원기능이 있습니다.
  • 대량 워크로드로 확장할 때 사용합니다.
  • 분산형 데이터베이스수평 확장을 하며 용량이 뛰어나요.
  • Millions of requests per sec, trillions of row, 100s of TB
  • 성능이 빠르고 일관적이라서내부에서 프로비저닝을 많이 할 필요도 없습니다.
  • DynamoDB API는 IAM과 완전 통합 (보안, 권한 부여, 관리 기능이 포함)
  • DynamoDB Stream은 이벤트 기반 프로그래밍에도 적합합니다.
  • 용량 요구사항과 관련하여 저렴한 가격 및 오토 스케일링 능력
  • StandardInfrequent Access(IA) 테이블 클래스

DynamoDB - Basics

  • 테이블로 구성됨.
  • 데이터베이스를 따로 생성할 필요가 없습니다. (이미 존재)
  • 각 테이블에 기본 키가 있고 이는 테이블 생성 시 결정됩니다.
  • 각 테이블의 행이 무한합니다.
  • 각 아이템(행)에는 속성이 있으며 간단하게는 이 속성이 바로 열이 됩니다.
    • 열은 시간에 따라 추가될 수 있습니다. (비교적 쉽게)
    • null가능
  • DynamoDB의 최대 아이템 크기는 400KB입니다.
    • 즉 DynamoDB는 큰 객체를 저장하기에 좋지 않습니다.
  • 데이터의 유형과 구성 면에서 스키마를 빠르게 전개해야 할 때 DynamoDB를 사용하면 아주 좋습니다
  • DynamoDB가 지원하는 데이터
    • 문자열
    • 숫자
    • 바이너리
    • Boolean
    • NULL
    • 리스트
    • Map
    • 문자열 세트
    • 숫자 세트
    • 바이너리 세트

DynamoDB 구조


읽기/쓰기 용량 모드

  • 테이블의 용량을 제어하는 방법
  • 프로비저닝 모드
    • 기본값
    • 테이블에 필요하다고 생각되는 초당 읽기 및 쓰기의 횟수를 미리 지정하는 겁니다.
    • 사전에 용량을 계획하는 것
    • 프로비저닝한 만큼 과금
    • 매달 지불할 비용은 프로비저닝한 RCUWCU의 양만큼 달라집니다.
    • 또한 RCU와 WCU에 대해 오토 스케일링이 가능합니다.
  • 온 디맨드 모드
    • 워크로드에 따라 자동으로 읽기와 쓰기를 스케일 업/다운합니다.
    • 읽기 용량 단위나 쓰기 용량 단위가 없고 모든 읽기와 쓰기를 자동으로 허용하죠.
      • 정확히 사용량만큼 과금됩니다.
    • 훨씬 비싸서 프로비저닝 모드 비용의 두 세배는 될 정도입니다.
    • 아주 예측하기 힘든 워크로드에 사용합니다.

DynamoDB Accelerator (DAX)

DynamoDB Accelerator 즉 DAX는 DynamoDB를 위한 고가용성의 완전 관리형 무결절 인메모리 캐시로 DynamoDB 테이블에 읽기 작업이 많을 때 DAX 클러스터를 생성하고 데이터를 캐싱하여 읽기 혼잡을 해결합니다.

  • 완전 관리형 고가용성 무결절성 인메모리캐시
  • Microseconds의 지연시간을 제공
  • DAX 클러스터는 기존 DynamoDB API와 호환되므로 애플리케이션 로직을 변경할 필요가 없습니다.
  • 데이터 인덱스는 기본 TTL은 5분으로 5분간 저장되고 시간이 지나면 데이터는 만료되며 DynamoDB에서 새로고침이 됩니다.

DynamoDB의 데이터를 빠르게 저장하고 읽는 애플리케이션이 필요한데 애플리케이션 로직을 못 변경하는 상황을 제시한다면 DAX


DAX와 ElastiCache

https://velog.velcdn.com/images/chan9708/post/98bdd244-55d3-4c6e-94b1-d5ea14d83ea8/image.png

  • DAX는 DynamoDB 앞에 있고 개별 객체 캐시와 쿼리와 스캔 캐시를 처리하는 데 유용합니다.

  • 집계 결과를 저장할 때는 Amazon ElastiCache가 좋고 Amazon DynamoDB는 대용량의 연산을 저장할 때 좋습니다.

두 서비스는 상호 보완적인 성격을 띕니다 Amazon DynamoDB에 캐싱 솔루션을 추가할 때는 보통 DynamoDB Accelerator 즉 DAX를 사용합니다.


DynamoDB Streams

DynamoDB에서는 스트림 처리도 가능합니다. 테이블의 모든 수정 사항
즉, 생성, 업데이트, 삭제를 포함한 스트림을 생성할 수 있습니다

https://velog.velcdn.com/images/chan9708/post/28ff8723-385f-4265-aa34-927717189623/image.png

  • 사용 사례:
    • 실시간으로 변경 사항에 대응(사용자에게 이메일 환영)
    • 실시간 사용량 분석
    • 파생 테이블에 삽입
    • 지역 간 복제 구현
    • DynamoDB 테이블 변경 시 AWS Lambda 호출

DynamoDB Streams

  • 24시간 보존
  • 제한된 소비자 수
  • AWS Lambda 트리거 또는 DynamoDB 스트림 Kinesis 어댑터를 사용하여 처리

Kinesis Data Streams(최신)

  • 1년 보존

  • 많은 소비자 수

  • AWS Lambda, Kinesis Data Analytics, Kineis Data Firehose, AWS Glue Streaming ETL을 사용하여 처리...

  • 테이블의 항목 수정을 표시하는 정렬된 데이터 스트림

  • 항목을 생성하고 업데이트 및 삭제할 때마다 DynamoDB Stream으로 이동합니다.

  • Stream record

    • Kinesis Data Streams 에 보냅니다.
    • Kinesis Data Stream Lambda에서 읽을 수 있습니다.
  • 최대 24시간 동안 보존되며 원하면 빠른 처리가 가능합니다.

  • 사용 :

    • 데이터 실시간 변화에 대응
    • 분석
    • 파생 테이블을 DynamoDB에 삽입
    • ElasticSearch에 삽입
    • 리전 간 복제

DynamoDB Global Tables

https://velog.velcdn.com/images/chan9708/post/e1fcf8c0-fd73-46ad-a0e7-e2269392ecf8/image.png

  • 여러 리전에 걸쳐 데이터를 이용할 때 지연 시간을 줄이려고 하는 겁니다.
  • 다중 활성 복제
  • 애플리케이션이 모든 리전에서 테이블을 읽고 쓸 수 있습니다.
  • 글로벌 테이블을 활성화하려면 꼭 필요한 전제 조건이 바로 DynamoDB Stream인데 변경 로그 업데이트 덕분에 각 테이블이 서로를 업데이트하며 양방향 복제가 가능합니다.

DynamoDB – Time To Live (TTL)

  • Time To Live (TTL)를 사용하면 타임스탬프 만료 후에 자동으로 아이템을 삭제할 수 있습니다.
  • 테이블 크기 통제가 가능합니다.
  • 규제 의무가 있어서 특정 테이블의 데이터를 7일만 보관해야 하는 경우 사용할 수 있겠지요.
  • 웹 세션 핸들링할 때 자주 사용합니다.
    • 사용자가 웹사이트에 로그인했을 때 해당 세션을 중앙 저장소인 DynamoDB에 두 시간 동안 저장. 세션 데이터를 저장하면 모든 애플리케이션이 액세스할 수 있고 두 시간 후에 세션이 갱신되지 않으면 만료되어 해당 테이블에서 삭제

DynamoDB – 재해복구를 위한 백업

  • 특정 시점 복구(PITR)를 사용한 지속적인 백업
    • 지난 35일 동안 선택적으로 활성화
    • 백업 윈도우 내 임의의 시점으로 시점 복구
    • 복구 프로세스는 새 테이블을 생성합니다.
  • 주문형 백업
    • 명시적으로 삭제될 때까지 장기 보존을 위한 전체 백업
    • 성능이나 지연 시간에 영향을 주지 않음
    • AWS Backup에서 구성 및 관리 가능(지역 간 복사 가능)
    • 복구 프로세스는 새 테이블을 생성합니다.

DynamoDB - Indexes

  • GSI와 LSI 두 가지가 있는데 각각 글로벌 보조 인덱스와 로컬 보조 인덱스입니다.
  • DynamoDB 테이블의 인덱스는기본 키 말고도 여러 속성에 쿼리를 수행할 수 있습니다.

DynamoDB – Amazon S3와 통합

  • S3로 내보내기(PITR을 활성화해야 함)
    • 지난 35일 중 어느 시점에서든 작동
    • 테이블의 읽기 용량에 영향을 미치지 않습니다.
    • DynamoDB 위에서 데이터 분석 수행
    • 감사를 위한 스냅샷 보관
    • DynamoDB로 다시 가져오기 전에 S3 데이터의 ETL의 상단
    • DynamoDB JSON 또는 ION 형식으로 내보내기
  • S3로 가져오기
    • ImportCSV, DynamoDBJSON 또는 ION 형식
    • 쓰기 용량을 소모하지 않습니다.
    • 새로운 테이블 생성
    • 가져오기 오류는 CloudWatchLogs에 로그인됩니다.

DynamoDB - Transactions

https://velog.velcdn.com/images/chan9708/post/da6cac41-26f3-4551-9c72-2aaad4bc28ae/image.png

  • *트랜잭션을 통해 동시에 두 테이블에 쓰거나 아무 테이블에도 쓰지 않을 수 있습니다.


Amazon API Gateway

Amazon API Gateway

Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다.

  • API Gateway는 AWS의 서버리스 서비스로 REST API를 생성할 수 있으므로 클라이언트가 퍼블릭 액세스할 수 있습니다.
  • API Gateway에 클라이언트가 직접 소통하며 다양한 작업을 할 수 있고 Lambda 함수에 요청을 프록시합니다.
  • AWS Lambda + API Gateway
    • 인프라를 관리할 필요가 없습니다.
  • WebSocket 프로토콜도 지원합니다. (실시간성)
  • API Gateway가 API 버전 관리를 맡습니다.
  • 개발 및 테스트, 운영 환경도 관리합니다.
  • API Gateway 보안 활성을 위한 수단이 많습니다.
    • 인증 및 권한 부여
  • API 키를 생성하거나 쓰로톨링을 조절합니다.
  • Swagger, Open API 3.0 등일반적인 스탠다드를 이용해 정의된 API를 빠르게 가져오고 내보낼 수도 있습니다.
  • 요청과 응답을 변형하거나 유효화할 수 있습니다.
  • SDK와 API 사양을 생성하고 API 응답을 캐시에 저장하기도 합니다.
  • 애플리케이션 로드 밸런서 같은 간단한 서비스와 달리 API Gateway에는 다양한 기능이 있습니다.

API Gateway – 높은 수준의 통합

  • Lambda 함수
    • 람다 함수 호출합니다.
    • 람다 함수가 지원하는 REST API를 노출하는 제일 간단하고 흔한 방법입니다.
  • HTTP
    • 백엔드의 HTTP 엔드 포인트도 노출할 수 있습니다.
    • 온프레미스 HTTP API클라우드 환경에 있는 애플리케이션 로드 밸런서
    • 비율 제한과 캐싱 사용자 인증API 키를 이용할 수 있습니다.
  • AWS Service
    • API Gateway로 어떤 AWS API든 노출 가능합니다.
    • 예: AWS Step Function 워크플로 시작, SQS에 메시지 게시
    • 인증을 추가하고 API를 공용으로 배포하거나 AWS 서비스상 비율 제어를 위해서 입니다.

API Gateway Endpoint 방식

  • Edge-Optimized (default)
    • 엔드 포인트 타입
    • 글로벌 클라이언트를 위한 것
    • 모든 CloudFront 엣지 로케이션에서 요청 라우팅으로 지연 시간을 개선합니다.
    • API 요청은 가장 가까운 CloudFront 엣지 로케이션으로 라우팅되며, 이는 지연 시간을 향상시킵니다.
    • API Gateway는 여전히 하나의 AWS 리전에 존재합니다.
  • 리전 배포
    • 모든 사용자가 API Gateway를 생성한 리전이 있으면 직접 배포 플랫폼을 마련해도 좋습니다.
    • 캐싱 전략과 CloudFront 설정을 더 잘 제어할 수 있습니다.
  • Private 배포
    • 개인 API Gateway는 VPC를 통해서만 액세스가 됩니다.
    • 인터페이스 VPC 엔드 포인트를 ENI에 사용합니다.
    • 리소스 정책을 이용해 API Gateway 액세스를 정의합니다.

API Gateway – Security

  • 사용자 인증(User Authentication)
    • IAM 역할(내부 애플리케이션에 유용)
    • Cognito(외부 사용자의 ID - 모바일 사용자의 예)
      - Amazon Cognito를 사용하면 웹 및 모바일 앱에 사용자 가입, 로그인 및 액세스 제어를 쉽고 빠르게 추가할 수 있습니다
    • Custom Authorizer(자체 논리)
  • 도메인 이름 HTTPS 보안(Custom Domain Name HTTPS)
    • AWS Certificate Manager(ACM)와의 통합을 통한 사용자 지정
    • Edge-Optimized Endpoint를 사용하는 경우 인증서는 us-east-1에 있어야 합니다.
    • 리전 endpoint를 사용하는 경우 인증서는 API 게이트웨이 지역에 있어야 합니다.
    • Route 53에서 CNAME 또는 A-alias 레코드를 설정해야 합니다.

AWS Step Functions

  • Lambda 기능을 오케스트레이션하는 서버리스 시각적 워크플로 구축
  • 기능: 시퀀스, 병렬, 조건, 타임아웃, 오류 처리, ...
  • EC2, ECS, 온프레미스 서버, API 게이트웨이, SQS 대기열 등과 통합 가능...
  • 사람 승인 기능 구현 가능성
  • 사용 사례: 주문 이행, 데이터 처리, 웹 애플리케이션, 모든 워크플로우

AWS Certified Solutions Architect Associate 시험합격!

profile
42seoul, blockchain, web 3.0
post-custom-banner

0개의 댓글