AWS의 디커플링 서비스 서론
디커플링
- 아키텍처에서 주체간의 의존성을 낮추는 방법
- 아키텍처의 유연성을 높이고 효율적으로 최적화
AWS의 디커플링 서비스
- AWS에서 아키텍처의 유연성을 확보하기 위해 사용하는 서비스들
- Amazon SQS
- Amazon SNS
- Amazon Kinesis
- Amazon MQ
- Amazon MSK (Kafka)
- 기타 다양한 이벤트 기반 기능들
- 예: S3 Event, EventBridge, DynamoDB Stream 등
Amazon SQS 소개
Amazon SQS
- AWS에서 제공하는 큐 서비스
- 주요 사용 사례
- 하나의 서비스에서 다른 서비스로 데이터를 전달하고 싶을 때
- 아키텍처에서 AWS 서비스들의 느슨한 연결을 수립할 때
- 메시지의 처리 순서 및 처리 여부를 보장하고 싶을 때
- 사용 방식
- 메시지를 받아 임시로 저장 (최대 14일), 이후 요청할 때 메시지를 들어온 순서대로 전달
- 전달 받은 서비스가 메시지를 처리 후 처리 완료 요청을 받으면 삭제
- 오류 등으로 처리 못하면 메시지 반환
- 메시지는 여러 주체가 요청하더라도 한번만 전달되도록 처리
- Public 서비스
- 즉, AWS 외부에서 인터넷을 통해 사용 가능
- Serverless 서비스로 분류
- 고가용성이 자체적으로 확보되어 있음
- 별도로 인프라 관리 불필요
- 요청 횟수, 메시지 크기 등으로 과금
※ Queue
- 선입선출(First In First Out) 형태의 대기열. 즉, 먼저 들어온 데이터를 먼저 처리
- 아키텍처에서는 주로 서비스에서 다른 서비스로 데이터를 전달할 때 활용
- 1:1 뿐만 아니라 1:N 관계에서도 활용 가능 (처리 자체는 한번)
Amazon SQS 기초
Amazon SQS의 주요 구성 요소
- 메세지: SQS에서 전달하는 데이터의 단위
- Producer: 메세지를 생산하고 SQS에 전달하는 주체
- Queue: 메시지를 저장하고 메시지를 Consumer에게 전달하는 다양한 기능을 담당
- Consumer: 메시지를 받아 처리하고 소비(삭제)하는 주체
- Dead Letter Queue: 처리에 실패한 메시지를 모아둔 2차 Queue
- 액세스 정책: SQS에 접근할 수 있는 주체에 대한 권한 설정 정책

Amazon SQS Queue의 타입
Standard
- Standard SQS는 순서를 보장하지 않음
- Standard SQS는 메시지를 여러번 전달할 가능성 존재: At Least Once Delivery
FIFO
- 순서 보장 및 메시지를 단 한번만 전달하도록 보장하나 성능의 제약
- Exactly Once Delivery
- 즉, Standard 모드를 사용할 때는 멱등성(Idempotency) 확보 필요
* 멱등성(Idempotency): 로직이 여러 번 수행되더라도 동일한 결과를 보장할 수 있는 성질
예) 한 자리에 대한 기차표가 한 대상에게 여러 번 구매되더라도 요금이 여러 번 결제되지 않는 것
Amazon SQS 메시지
Amazon SQS 메시지
- SQS에서 전달하는 데이터의 단위
- 최대 사이즈: 256kb, 최대 14일까지 저장 가능
- SQS의 메시지는 총 세 가지 상태
- Stored: Producer가 메시지를 SQS Queue에 전달을 완료하여 대기중인 상태
- In Flight: Consumer가 메시지를 가져와서 처리중인 상태
- Standard 약 120,000개, FIFO 약 20,000개
- Deleted: Consumer가 메시지 내용을 처리 후 삭제한 상태
Amazon SQS 메시지 구성
- Message Body: 실제 메시지의 내용(String)
- 최대 256Kib(Message Attribute 포함)
- 크기가 큰 컨텐츠의 경우 S3에 저장 후 버킷/키 정보만을 저장하는 형식으로 전달 가능
- Message Attribute: Key-Value 형식의 메타데이터로 Body에 포함되지 않는 추가적인 데이터
- 주로 분류, 필터링, Body를 처리하기 위한 Context 등에 활용
- 예: Attribute에 영상 처리 알고리즘 명시, 분류를 위한 Tag 정의 등
- 최대 10개
- Message System Attribute: AWS 서비스에서 활용하기 위한 Metadata
- 현재는 AWS X-ray를 위한 AWSTraceHeader만 지원
- Receipt Handle: 메시지를 삭제하기 위한 키
- 기타 정보
- Region, Event Source, MD5, Timestamp, 해시 등
- FIFO의 경우 Message Group ID, Deduplication ID
Amazon SQS의 특징 및 기능
Producer
- 메시지는 API를 사용해서 Push 가능
- 이 때 Queue URL을 알고 있어야 정확한 SQS Queue를 판별하여 메시지 전송 가능
- Queue URL 형식
- https://sqs.<region>.amazonaws.com/<account-id>/<queue-name>
- IAM 엔티티로서 권한이 있거나 리소스 기반 정책으로 권한 확보 필요 (sqs:SendMessage)
- 다양한 AWS의 서비스에 이벤트로 연동
Consumer
- 권한이 있는 상태에서 주기적으로 API로 Queue에 메시지를 요청(Poll)해서 처리
- 역시 메시지 받아오고 삭제하는 권한 필요 (sqs:ReceiveMessage/sqs:DeleteMessage)
- 기본적인 workflow: poll -> 처리 -> 삭제
- Visibility Timeout 안에 메시지를 받아 처리하고 완료 시 삭제
- 삭제하지 않으면 다시 Queue Visibility Timeout 이후 Queue로 반환
- 혹은 Visibility Timeout을 늘려서 추가 시간을 확보 후 처리
- 두 가지 Polling 방법
- Short Polling
- Long Polling
※ Visibility Timeout
- 메시지의 요청 이후 다른 주체가 메시지를 요청할 수 없는 기간
- 일종의 Lock
- 해당 기간 동안에 다른 주체가 메시지 요청 불가능
- 기본 30초, 최소 0초, 최대 12시간
- Visibility Timeout 기간을 넘어서는 처리(삭제) 되지 않은 메시지는 자동으로 다른 주체에게 열림(요청가능)
- 메시지를 처리하기 충분한 시간이지만 오류/에러 상황에 적절하게 대응할 수 있는 시간 필요
- 기본적으로 Queue 단위이나 메시지 단위로 설정 가능. 즉, 필요하다면 Visibility Timeout 수정 가능
- 주의: Visibility Timeout이 만료된다면 Queue 맨 뒤로 돌아감

Polling 방법
- Short Polling (기본): 메세지 요청 시 Queue의 일부를 검색해서 가능한 메시지를 빠르게 찾아서 전달
- Long Polling: 메시지 요청 시 Queue 전체를 검색하여 적어도 하나의 메시지를 찾아서 전달
- 메시지가 없다면 찾을 때까지 기다리거나, 혹은 Timeout을 넘는다면 그때 응답 전달
- 1~20초까지 대기시간 설정 가능
- 장점
- False Empty Response 방지
- 요청 횟수 줄이기
- Batch 처리 가능: 한번에 최대 10개의 메시지 요청 가능
SQS 보안
- Access Policy: 어떤 주체가 SQS Queue에 접근하여 메시지를 보내거나 가져올 수 있는 리소스 기반 정책
- 주체에게 권한이 없더라도 권한 부여 가능
- 예: IAM 사용자에 아무 권한이 없더라도 Access 정책에 권한이 명시되어 있으면 Queue 사용 가능
- 암호화
- SQS-SSE(Encryption at rest), SQS-KMS 지원 (S3와 거의 동일)
- Body만 암호화(Metadata, Timestamp 등은 암호화 처리하지 않음)
Dead Letter Queue
- 시스템 오류로 처리할 수 없는 메시지를 임시로 저장하는 특수한 유형의 메시지 대기열
- SQS에서 처리하지 못한 메시지를 담아두어 처리하는 다른 Queue
- 추후 재처리 가능(Redrive)
- 설정한 재시도 횟수보다 많이 실패했을 경우 DLQ로 전달
Monitoring
- 기본적으로 CloudTrail로 API 로깅 가능
- CloudWatch 기본 지표로 다양한 Metric 제공
- 주요 메트릭
- ApproximateAgeOfOldestMessage: (근사값) 가장 오래된 메세지의 나이
- ApproximateNumberOfMessagesNotVisible: (근사값) 현재 In-Flight 중인 메시지
- ApproximateNumberOfMessagesVisible: (근사값) 현재 Stored. 즉, 대기중인 메세지
- NumberOfEmptyReceives: 메세지 요청 시 빈 응답이 전달 된 횟수
- NumberOfMessagesReceived: 메세지 요청에 따라 전달된 메세지 갯수
- NumberOfMessagesSent: Queue에 도착한 메세지 갯수
- SentMessageSize: Queue에 도착한 메세지의 크기
실습 - Amazon SQS 이미지 리사이징

- S3에 생성(소스코드/이미지 업로드)
- 시작 템플릿 및 AutoScaling 그룹 생성
a. 시작 템플릿에 적용할 IAM 역할 생성

b. userdata 적용
#!/bin/bash
curl --silent --location https://rpm.nodesource.com/setup_20.x | bash -
dnf -y install nodejs
cd /home/ec2-user
aws s3 cp s3://demo-image-resize-sqs-342849269408/demo-sqs-ec2-image-resize.zip /home/ec2-user --region ap-northeast-2 unzip demo-sqs-ec2-image-resize.zip
npm install
npm install forever -g
forever stop src/server.js
forever start -o out.log -e err.log src/server.js
c. AutoScling 그룹 생성
d. 유저데이터로 S3에서 소스코드 받아오고 빌드 후 애플리케이션 시작
- SQS 생성 및 S3와 연동
a. SQS 대기열 생성

b. 표시 제한 시간(Visibility Timeout) 설정

c. 액세스 정책 설정 (S3에서 SQS로 보내기 위한 정책)

d. 이벤트 알림 생성



- EC2가 시작되면서 애플리케이션에서 메시지 폴링 및 이미지 리사이징 시작 및 확인
Amazon SNS 소개

Amazon Simple Notification Servicve(Amazon SNS)는 애플리케이션 간 (A2A) 및 애플리케이션과 사용자 간(A2P) 통신 모두를 위한 완전관리형 메시징 서비스입니다.
Amazon SNS
- Pub/Sub 기반의 메시징 서비스
- 주요 사용 사례
- 하나의 메시지를 다수의 주체에서 처리하고 싶을 때(Fan Out)
- 서비스에서 서비스로 메시지를 전달하고 싶을 때
- 메시지를 임시로 저장하고 있거나 재생하여 동일한 로직을 다시 처리하고 싶을 때(FIFO)
- 사용 방식
- 하나의 토픽을 여러 주체가 구독
- 토픽에 전달된 내용을 구독한 모든 주체가 전달받아 처리 -> 하나의 메시지를 여러 주체에서 처리
- 다양한 프로토콜 및 서비스 지원(이메일, HTTP(S), SQS, SMS, Lambda)
- 메시지 리플레이 기능 제공(FIFO)
- Public 서비스
- 즉, AWS 외부에서 인터넷을 통해 사용 가능
- Serverless 서비스로 분류
- 요청 횟수, 메시지 크기 등으로 과금

※ SNS vs SQS

Amazon SNS 기초
Amazon SNS의 주요 구성 요소
- 토픽(Topic): SNS의 커뮤니케이션 채널
- 구독(Subscription): 토픽으로 들어온 메시지를 받아볼 수 있는 리소스
- Publisher: 메시지를 생산하고 SNS에 전달하는 주체
- Subscriber: 실제 구독으로부터 메시지를 받아서 처리하는 주체
- 메시지: SNS에서 전달하는 데이터
- 액세스 정책: SNS에 접근할 수 있는 주체에 대한 권한 설정 정책
Amazon SNS Topic / Subscription
- 토픽(Topic): SNS의 커뮤니케이션 채널
- 해당 토픽에 메시지를 발행(publish)하면 토픽을 구독(Subscribe)한 모든 대상에게 메시지를 발송
- 즉, 하나의 메시지를 다수의 대상이 처리(=Fan Out)
- 구독 프로토콜
- 이메일
- HTTP(S)
- SQS
- SMS
- Lambda
- Kinesis Data Firehose
- 최초 구독시 확인 필요(예: 확인 이메일, Lambda의 경우 확인 이벤트)
Amazon SNS 메시지
Amazon SNS 메시지 구성(Standard)
- Message Body: 실제 메시지의 내용(String)
- 제목/내용
- 최대 256Kib(Message Attribute 포함)
- 크기가 큰 컨텐츠의 경우 S3에 저장 후 버킷/키 정보만을 저장하는 형식으로 전달 가능
- Raw Message Delivery: SNS 메시지 포맷을 따르지 않고 전달받은 메시지를 그대로 전달
- 주로 S3 로깅, SQS 등 메시지를 파싱하지 않고 있는 그대로 처리해야 할 경우 활용

- Message Attribute: Key-Value 형식의 메타데이터로 Body에 포함되지 않는 추가적인 데이터
- 주로 분류, 필터링, Body를 처리하기 위한 Context 등에 활용
- 예: Attribute에 영상 처리 알고리즘 명시, 분류를 위한 Tag 정의 등
- Raw Message Delivery 활성화 시 최대 10개
- TTL (모바일 전용)
- 기타
- Timestamp, 토픽 ARN, 시그니처, 구독 해제를 위한 URL 등
Amazon SNS 메시지 필터링
- 메시지 필터링을 통해 모든 메시지 대신 특정 메시지만 수신 가능
- 각 Subscription Filter Policy 설정
- Filter Policy: 메세지의 Body 혹은 Attributes 단위로 원하는 메시지를 매칭
- 매칭 시 메시지 발송 / 불일치 시 메시지를 전달하지 않음
- 필터링 가능 대상: Message Body, Message Attributes
- 예: 구매 타입='Express' AND (구매 나라가 미국 OR 유럽) AND 가격이 20불 이상
Amazon SNS 기타 기능
Amazon SNS 보안
- Access Policy: 어떤 주체가 SNS에 접근하여 메시지를 보내거나 구독할 수 있는 리소스 기반 정책
- 주체에게 권한이 없더라도 권한 부여 가능
- 예: IAM 사용자에 아무 권한이 없더라도 Access 정책에 권한이 명시되어 있으면 SNS로 퍼블리시 가능
- 암호화
- KMS를 활용하여 Server Side Encryption 구현
- Body만 암호화(Metadata, Timestamp 등은 암호화 처리하지 않음)
Monitoring
- 기본적으로 CloudTrail로 API 로깅
- CloudWatch 기본 지표로 다양한 Metric 제공
- 주요 메트릭
- NumberOfMessagesPublished: 발행된 메시지 숫자
- NumberOfNotificationsDeliverd: 구독대상에게 전달된 메세지 숫자
- PublishSize: 도착한 메시지의 크기
기타 기능
- Amazon SNS Data Protection: SNS의 메시지중 민감한 정보를 감지하거나 검열해주는 서비스
- Data Protection policy를 기반으로 필터링
- Inbound Message / Outbound Message 모두 확인
- 메시지 순서 보장 및 중복 제거(FIFO)
- 메시지 보관 및 리플레이 기능(FIFO)
※ SNS 주제 및 구독 생성


Amazon SNS로 SMS 보내기
※ Amazon SNS에서 SMS를 보내기 위해서 고려할 점
- 특정 리전에서만 문자 메시지 보내기 가능
- Spending Threshold: SNS, SMS 최초 사용 시 설정되어 있는 지출 비용 제한
- 기본 $1, 늘리려면 Support Case 오픈 필요
- Origination Identitied 필요: 나라마다 정책이 다르고 필수 여부 역시 다름
- Sender ID: 메세지를 보낸 대상으로 표시되는 ID
- 예: US 리전은 Sender ID 사용 불가능 / India 리전에서는 필수
- 몇몇 나라에서는 Sender ID가 필수이며 몇 주의 기간이 소요되는 경우 발생
- Support Case 등의 지원 필요
- Origination Numbers: 받은 사람에게 보이는 전달자 번호
Amazon SNS SMS Sandbox
- 최초로 제공되는 환경으로 테스트 및 준비를 진행
- Sandbox에 있을 때는 지정한 번호로만 문자 메시지 가능
- 최대 10개
- 삭제는 24+ 시간 이후 번호 삭제 가능
- Sandbox 탈출
- 전화번호 인증
- 테스트 문자 확인
- Support Case에 연결
SMS 메시지 종류
- One Time Password: OTP 용도
- Promotional: 홍보 용도
- Transactional: 어카운트 상태 알람, 배송 상태 확인
Amazon SQS/SNS FIFO
SQS FIFO(First In First Out)
- 기본적으로 SQS는 순서를 보장하지 않음
- 기본적으로 SQS는 메시지를 여러 번 전달할 가능성 존재
- FIFO 모드: 메시지의 순서를 보장하며 단 한번만 전달
- 이외에 몇 가지 기능 추가
- 단, 성능 저하 존재
- High Throughput 모드로 어느정도 완화 가능
- 이름에 .fifo 필수

SQS FIFO - Deduplication ID
- Deduplication ID: SQS에서 각 메시지의 중복 여부를 판단하기 위한 고유 토큰
- 메시지를 SQS에 전달할 때 부여할 수 있으며 한번 특정 Deduplication ID를 가진 메시지가 처리된 경우 다음 5분동안 같은 Deduplication ID를 가진 메시지는 무시
- 성공은 정상적으로 반환, 메시지만 무시
- 메시지가 전달된 이후에도 계속 레코드를 추적
- 두 가지 방법으로 제공
- Contents Based: SQS에서 자동적으로 메시지의 Body의 SHA-256 해쉬를 Deduplication ID로 사용
- 즉, Attribute는 HASH 과정에 포함하지 않음
- 메시지의 프로듀서가 직접 Deduplication ID를 생성해서 같이 전달(예: Timestamp 등)
SNS FIFO(First In First Out)
- SNS의 메시지 전달을 FIFO로 할 수 있는 모드
- 두 가지 효과
- SQS FIFO / Standard Queue만 연동 가능
- 이메일, 휴대폰 SMS, HTTP 엔드포인트 등 일반적인 Subscriber와 연동 불가능
- 기타 기능
- 이름에 .fifo 필수
- 예: my-demo-topic.fifo

SNS FIFO - Message 순서
- 일반적인 SNS + SQS 조합은 순서를 보장하지 않음
- 즉, 메시지가 발송된 순서와 별도로 대상이 수신
- 일반 SNS / 일반 SQS 둘 다 순서 보장(X)
- 순서를 보장하기 위해서는 SNS FIFO + SQS FIFO가 필요

- 각 Subscription에 전달되는 메시지 별 순서는 다를 수 있지만, 받는 메시지의 순서는 동일
- Message Sequence Number: 연속적은 아니지만 항상 증가하는 번호
- SNS FIFO에서 메시지를 받아 발송할 때 부여
- Message Body에 포함. 단, Raw Message 전달 활성화 시 포함하지 않음

SNS FIFO - Filtering
- 메시지 필터링을 통해 모든 메세지 대신 특정 메세지만 수신 가능
- 각 Subscription FIlter Policy 설정 가능
- FIlter Policy: 메세지의 Body 혹은 Attributes 단위로 원하는 메시지를 매칭
- 매칭 시 메시지 발송 / 불일치 시 메세지를 전달하지 않음

SNS FIFO - Deduplication
- Deduplication: 중복 제거 -> 정확하게 한번만 메시지를 전달하는 기능
- Deduplication ID를 기반으로 중복된 메세지를 제거
- 5분 이내에 같은 Duplication ID를 가진 메세지가 전달되면 요청은 성공하지만 전달되지 않음
- SNS 메세지가 전달된 이후에도 ID는 트랙
- SNS에 전달된 메세지 Body를 기반으로 Deduplication ID 생성 가능
- 메시지 Body의 Hash 기반으로 Deduplication ID를 생성
- Attribute는 Hash에 반영하지 않음
SNS FIFO - Message Archive / Replay
- SNS FIFO에 전달된 메시지를 저장하고 필요에 따라 Replay 가능
- 사용 사례
- 메시지 전달 과정의 오류를 복구
- 기존 어플리케이션의 장애 복구
- 신규 어플리케이션의 Sync 맞추기
- 메시지 보관 기간 설정: 1일에서 365일
- 추가 보관 비용 발생
- Replay시 시간을 정해서 Replay 가능

SQS/SNS FIFO - Message Group ID
- Message Group ID: SNS/SQS FIFO 내부의 일종의 채널
- Message Group ID 단위로 순서 보장 및 전달이 이루어짐
- 즉, 다른 Message Group ID끼리는 순서 보장이 이루어지지 않음
- SQS FIFO에서는 동일 Message Group ID를 가진 메시지는 동시에 하나만 처리 가능 -> 하나의 Message Group에서 맨 처음 메시지가 처리되지 않으면 나머지 Message Group 모두 대기
- SNS FIFO에서 Message Group ID를 전달했을 때, 대상이 SQS FIFO라면 Message Group ID 같이 전달

※ SQS FIFO vs Standard

실습 - SNS FIFO Storage/Replay
-
SNS FIFO와 SQS 큐로 연결하는 Subscription 생성 (CloudFormation을 사용한 프로비전)
a. DynamoDB에 요청을 저장하는 로직
b. 이메일을 보내는 로직
-
데이터를 삭제하고 Replay로 DB에 데이터가 다시 생성되는 것을 확인
a. 아카이브 정책 활성화


b. 재생

-
S3에 데이터를 저장하는 로직을 담은 Subscription 추가
a. 구독 생성
b. Replay로 기존 로직과 sync 맞추는 부분 구현

Amazon Kinesis 소개

Amazon Kinesis를 사용하면 실시간 스트리밍 데이터를 손쉽게 수집, 처리 및 분석할 수 있으므로 적시에 통찰력을 확보하고 새로운 정보에 신속하게 대응할 수 있습니다. Amazon Kinesis는 모든 규모의 스트리밍 데이터를 비용 효율적으로 처리할 수 있는 핵심 기능과 더불어 애플리케이션 요구 사항에 가장 적합한 도구를 선택할 수 있는 유연성을 제공합니다.
Kinesis 서비스
- AWS에서 스트리밍 데이터를 수집하고 분석 처리하는 서비스
- 총 4가지 서비스
- Kinesis Data Stream: 스트리밍 데이터를 수집하는 서비스
- Amazon Data Firehose(Kinesis Data Firehose): 데이터를 수집하고 변환하여 공급자(S3, RedShift, AWS OpenSearch, Datadog, HTTP 등)에게 전송하는 서비스
- Kinesis Data Analytics Studio: 실시간 스트리밍 데이터를 분석하는 서비스
- Kinesis Videos Streams: 재생, 분석 및 기계 학습을 위해 미디어 스트림을 캡처, 처리 및 저장
Amazon Kinesis Data Stream 기초
Kinesis Data Stream
- 스트리밍 데이터를 수집하고 처리 주체에 전달하는 서비스
- 요청이 아닌 데이터의 처리
- 단발성 데이터가 아니라 많은 분량을 지속적으로 전달되는 데이터의 처리
- 예: 로그, 이용 데이터, 센서 데이터
- 작은 데이터부터 거의 무한대의 용량을 처리 가능
- 고가용성 내부적으로 확보
Kinesis Data Stream의 주요 구성 요소
- Data Stream: 샤드(Shard)로 구성된 데이터 처리를 위한 스트림
- Shard: Kinesis의 Data Stream의 처리 단위로 일종의 내부 파이프라인
- 데이터 레코드: Kinesis를 활용해 보내려 하는 데이터
- Sequence Number: 샤드 내의 파티션 키 단위로 부여되는 고유 번호
- Producer: 데이터를 생산해서 Kinesis에 전달하는 주체
- Consumer: 데이터를 소비하는 주체로 데이터를 직접 처리하거나 다른 주체로 전달
- 액세스 정책: Kinesis의 접근을 제어

Data Stream
- 데이터 처리를 위한 스트림
- 24시간 ~ 1년 단위로 데이터 저장(vs SQS는 14일)
- SQS와 달리 원한다면 이 기간 내에 데이터를 다시 조회/처리 가능
- 샤드 단위로 데이터를 처리
- Capacity Mode
- On-Demand: 샤드를 수요에 따라 증설하고 사용한 데이터 용량만큼 비용 지불
- Provisioned: 샤드 숫자를 지정하고(변경 가능) 총 숫자 만큼의 샤드에 대해서만 비용 지불
샤드(Shard)
- Kinesis의 Data Stream의 처리 단위로 일종의 내부 파이프라인
- 정해진 용량의 데이터를 처리
- 읽기: 5Transections/Sec, 2MB/Sec
- 쓰기: 100 데이터 레코드/Sec, 1MB/Sec
- 즉, Data Stream의 처리 가능 용량을 보유한 샤드의 합을 계산
- 데이터 레코드의 Partition Key의 MD5 Hash 값을 기반으로 샤드를 결정
- 샤드 숫자 조절
- Reshard: 샤드의 숫자를 조절
- 2개로 Split / 2개를 합치는 Merge로만 가능
- Update Shard: Background에서 샤드 숫자를 지정한 숫자로 조절(병합/분할)
- OPEN / CLOSED / EXPIRED 상태로 관리

Producer
- 크게 3가지 방법으로 Kinesis로 데이터 전송
- API: PutRecord/PutRecords로 데이터 레코드 전달
- Amazon Kinesis Producer Library(KPL): Kinesis에 데이터 레코드를 전달하기 위한 라이브러리
- Stream에 데이터를 전달하기 위한 다양한 기능
- Retry / 데이터 취합 및 Batch 전달 / CloudWatch 메트릭을 통한 모니터링
- Amazon Kinesis Agent: JAVA 기반 어플리케이션
Consumer
- KCL(Amazon Kinesis Client Library): Kinesis의 데이터 레코드 읽기를 쉽게 관리하기 위해서 만들어진 라이브러리
- JAVA, Python, Ruby, Node.js, .NET 지원
- 데이터 스트림의 변경, 데이터 스트리밍의 로드 밸런싱, 리샤드 등의 다양한 상황 및 로직 처리 기능을 미리 구현
- 직접 데이터를 처리하기도 하고 상황에 따라서는 다른 주체(S3, OpenSearch 등)에 전달
기타
- KMS를 활용한 서버 사이드 암호화 지원
- IAM 리소스 기반 정책으로 권한 부여 가능
- CloudWatch에서 다양한 지표 수집
- Basic: 기본 지표 수집 모드로 스트림 단위의 지표를 1분 단위로 수집
- Enhanced: 추가 비용으로 샤드 단위의 지표를 1분 단위로 수집
Amazon Data Firehose

Amazon Data Firehose는 Amazon Simple Storage Service(Amazon S3), Amazon Redshift, Amazon OpenSearch 서비스, Splink 및 타사 서비스(Datadog, LogicMonitor Dynatrace, MongoDB, New Relic, Coraloc) 등의 대상에 실시간 스트리밍 데이터를 전송하는 완전 관리형 서비스입니다.
Amazon Data Firehose
- 데이터를 원하는 주체로 전달해주는 서비스
- 주로 데이터를 처리하는 주체(OpenSearch, RedShift, Splunk, Datadog)로 전달
- 혹은 S3에 직접 저장해서 보관 / Athena 분석 가능
- 일정 버퍼/시간이 찰 때 까지 기다렸다가 하나의 파일로 flush 하는 형식

Data Transform
- 데이터가 Firehose로 내용을 변경시켜 받는 기능
- 데이터 포맷, 파일 사이즈 등 데이터 내용을 원하는대로 변경 가능
- 예: Apache Parquet으로 변경, 로그 중 민감 정보 제거, 필터링 등
- Apache Parquet or Apache ORC 데이터 포맷 변경은 기본 지원
- 다른 변경(예: to csv, 민감 정보 제거 등)은 AWS Lambda 서비스를 호출해서 변경
- 기본 1MB 단위 ~ 최대 6MB(Lambda Payload Limit)로 전달
기타
- S3에 저장시 오브젝트 Key(파일명) 지정 가능
- 예: Athena에서 활용하기 위한 포맷
- <Prefix>year=<YYYY>/month=<MM>/day=<DD>/hour=<HH>/minute<mm>/<unique_id>.json
실습 - Click Heatmap 만들기

- CloudFormation 프로비전
- 로그 데이터 생성 후 S3에서 확인



참고
https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard