(응용) AWS - X-Ray

AWS에 대해 알아봅니다.

정민호정민호

1. X-Ray

  • 분산 어플리케이션 분석 및 디버깅 용도로 사용되어짐

    • 진짜 문제는 무엇이며 퍼포먼스 혹은 접속과정에서 생기는 에러를 확인하는 용도

  • 시각화 기능을 제공하여 쉽게 어플리케이션 흐름 이해

    • X-Ray Service Map

1.1. X-Ray 통합

  • X-Ray를 사용할 수 있는 AWS 리소스

    • EC2, Lambda, DynamoDB, ELB, API Gateway, SNS, SQS, Elastic BeanStalk 등

  • 자체 App과도 통합 가능

    • Java, Node JS, Go, Ruby, Python 으로 구현된 App

  • API Calls

    • AWS SDK로 구현된 App은 X-Ray SDK를 통하여 X-Ray로 정보

1.2. X-Ray 사용방법

  • X-Ray Agent 설치 → X-Ray SDK App 설정 --(http request status code latency)→ X-Ray

    • X-Ray Agent 는 주로 EC2 인스턴스에 설치

2. X-Ray Configuration

  • [(EC2 → X-Ray SDK → X-Ray Daemon) , (ECS → X-Ray SDK → X-Ray Daemon)] ⇒ X-Ray

    • X-ray Daemon 에는 Queue 가 존재하며 데이터를 Batch 로 X-Ray 에 전송함

    • X-Ray SDK 와 X-Ray Daemon 이 인스턴스 안에 설치되어 있어야 X-Ray 에 데이터를 보낼 수 있음

2.1. X-Ray Configuration

  • EC2 인스턴스

    • EC2 인스턴스 안에 X-Ray SDK + Daemon 설치

  • Elastic BeanStalk

    • Elastic BeanStalk 안에서 돌아가고 있는 EC2 인스턴스에 X-Ray SDK + Daemon 설치

  • Docker Container & ECS

    • Application 이 돌아갈 Docker Container 안에 X-Ray SDK + Daemon 을 직접 설치

2.2. Annotation & Indexing

  • Annotation

    • Application 을 진단할 때 Annotation 을 사용하여 Request 에 대한 추가적인 내용을 가져올 수 있음

      • Latency 등

  • Key-Value

    • Annotation 은 Key-Value 형태로 이루어져 있으며 Filter Expression 을 사용하여 Annotation 이 Indexing 되어짐 (검색결과를 그룹으로 묶어 관리할 수 있음)

      • 예) game_name = TicTacToe, game_id = 81263

(응용) AWS - Advanced DynamoDB

AWS에 대해 알아봅니다.

정민호정민호

1. Provisioned Throughput

  • Capacity Unit 단위로 계산

  • 쓰기 (Write Capacity Unit) = WCU

    • 1 Write Capacity Unit = 1초에 1KB 데이터 쓰기

  • 읽기 (Read Capacity Unit) = RCU

    • 1 Read Capacity Unit = 1초에 4 KB SC(Strongly Consistent) 데이터 읽기

    • 1 Read Capacity Unit = 1초에 2 * 4 KB EC(Eventually Consistent) 데이터 읽기 (디폴트)

  • SC(Strongly Consistent)

    • 가장 최신의 데이터를 불러올 수 있으나 EC에 비해 지연 발생

  • EC(Eventually Consistent)

    • 가장 최신의 데이터를 반환하지 않을 수 있음. 즉 실시간으로 업데이트되지 않음

    • 하지만 계속 요청을 보내다보면 최신의 데이터를 받아 볼 수 있음

고객아이디 주문번호 주문날짜

29358235

20003

3/24/2021

73649172

20009

3/29/2021

57497462

20001

3/18/2021

12093221

20006

3/27/2021

  • 5 WCU, 5 RCU

    • 5 * (2 * 4 KB EC 데이터) → 초당 40 KB 데이터 읽음

    • 5 * (4 KB SC 데이터) → 초당 20 KB 데이터 읽음

    • 5 * (1 KB 데이터) → 초당 5 KB 데이터 씀

  • 데이터 크기 > Capacity Unit

    • 추가 비용에 대응하기위해 APP에 따라 RCU / WCU 설정

1.1. RCU 샘플 문제1

  • RCU의 크기는 얼마로 잡아야 할까요?

    • 초당 80개의 데이터를 읽어와야함

    • Strongly Consistent 데이터

    • 1개의 데이터 크기 = 3 KB

1.1.1. RCU 샘플 문제1 해결방안

  • 얼마나 많은 4 KB RCU가 필요한지 구함

    • 3 KB / 4 KB = 0.75

  • 정수로 떨어지지 않으면 반올림

    • 0.75 → 1

  • 초당 얼마나 많은 데이터를 읽어오는지 계산

    • 1 * 80 = 80 RCU

1.2. RCU 샘플 문제2

  • RCU의 크기는 얼마로 잡아야 할까요?

    • 초당 80개의 데이터를 읽어와야함

    • Eventually Consistent 데이터

    • 1개의 데이터 크기 = 3 KB

1.2.1. RCU 샘플 문제2 해결방안

  • 얼마나 많은 4 KB RCU가 필요한지 구함

    • 3 KB / 4 KB = 0.75

  • 정수로 떨어지지 않으면 반올림

    • 0.75 → 1

  • 초당 얼마나 많은 데이터를 읽어오는지 계산

    • 1 * 80 = 80 RCU

  • 위에서 구한 RCU를 2로 나눠줌

    • 80 RCU / 2 = 40 RCU

1.3. WCU 샘플 문제

  • WCU의 크기는 얼마로 잡아야 할까요?

    • 초당 100개의 데이터를 써야함

    • 1개의 데이터 크기 = 512 BYTES

1.3.1. WCU 샘플 문제 해결방안

  • 얼마나 많은 1 KB WCU가 필요한지 구함

    • 512 BYTES / 1KB (1024 BYTES) = 0.5

  • 정수로 떨어지지 않으면 반올림

    • 0.5 → 1

  • 초당 얼마나 많은 데이터를 읽어오는지 계산

    • 1 * 100 = 80 WCU

2. Access Control

  • AWS IAM

    • Users

    • IAM 역할

    • Groups

      • 역할과 그룹에 따라 유저들은 전혀 다른 권한을 가질 수 있음

        • 테이블 생성, 데이터 삽입 & 수정 & 삭제 등

    • 테이블 별로 유저 권한 필터링 → IAM Conditions

      • IAM Conditions : 파티션키 == 유저 아이디 일때만 데이터 읽기 권한 부여

“Sid” : “AllowAccessToOnlyItemsMatchingUserID”,
    “Effect” : “Allow”,
    “Action” : [
                “dynamodb:GetItem”,
                “dynamodb:PutItem”,
                “dynamodb:UpdateItem”
                ],
    “Resource” : [ “arn:aws:dynamodb:ap-northeast-2:123456789012:table/HighScores” ],
    “Condition” : {
        “ForAllValues:StringEquals” : {
            “dynamodb:LeadingKeys” : [
                “${www.minho.com:user_id}”
            ],
        ....
        ...

3. TTL(Time To Live)

  • 데이터 유효기간을 설정하는것

    • 불필요하거나 일시적인 데이터(Session, Event Log) 삭제

    • 테이블 청소로 인하여 데이터 유지 비용 절감

유저아이디 세션아이디 세션생성시간 TTL 세션데이터

84724

657381

1544031271

1544038471

…​

26495

758293

1544013196

1544020396

…​

92742

782938

1544008931

1544018723

…​

  • 세션생성시간/TTL → Epoch Time / Unix Time

    • 1970년 1월 1일 오전 12시 기준, 얼마나 많은 초(seconds)가 지났는지 알려줌

    • (TTL - 세션생성시간) 이 0보다 작을 시 삭제 또는 필터

4. Provisioned Throughput Exceeded & Exponential Backoff

4.1. Provisioned Throughput Exceeded

예외 Exception의 한 종류

  • PTE Exception

    • 너무 많은 읽기/쓰기 요청 발생시 일어남

    • 수용할 수 있는 최대치를 넘겼을 때

  • AWS SDK

    • 요청을 성공적으로 처리할 때까지 계속 전송

      • 그렇지 않다면 DynamoDB 설정에 들어가서 요청 프리퀀시를 조정

      • 동시에 들어오는 요청의 갯수를 줄여 DynamoDB에 요청을 보내는데 있어 부하를 줄이는 방법도 있음

  • No AWS SDK

    • Exponential Backoff

  • 많은 네트워크 요청이 발생함에 따라 서버에 지연이 발생할 수 있고 나아가 요청이 실패할 수 있음

    • 예) 수강신청 등

      • Swich, DNS, ELB 고통받음..

4.2. Exponential Backoff

요청이 실패할 때마다 기다리는 시간을 늘려주는 것

  • 요청 → 요청실패 → 50ms → 요청 재시도 → 요청실패 → 100ms → 요청 재시도 → 성공

    • 요청이 실패할 수록 대기시간을 늘려줌으로써 서버부하 및 병목현상을 줄여줌

(응용) AWS - Serverless

AWS에 대해 알아봅니다.

정민호정민호

1. Serverless

서버가 없는게 아니라 서버를 우리가 관리할 필요 없이 알아서 우리들의 어플리케이션 코드를 클라우드에서 돌릴 수 있게 해줌 (Resource Management, Auto Scaling UP/Down 등 해줌)

AWS는 Infrastructure Management를 알아서 해줌, 우리가 할 일은 코드를 짜고 구현만 하면됨

1.1. AWS는 우리를 위해서 무엇을?

  • Capacity Provisioning

    • 예) DynamoDB/EC2의 경우 얼마나 많은 읽기/쓰기가 발생하는지 서버과부하가 생기는지 감시하고 그에 따라 대응

  • Auto-Scaling

    • 사람의 개입없이 서버를 키웠다 줄였다 조절

  • Patching

    • EC2 인스턴스에서 OS를 돌리거나 RDS에서 DB를 구축할 때 알아서 업데이트 및 패치를 시켜줌

1.2. Serverless 이점

  • 빠른 배포(Faster Deployment)

  • 대단한 확장성(Scalable)

  • 비용 절감(Lower Cost)

    • 항상 돌아가는게 아니라 Event에 근거하여 돌아가기 떄문에 비용이 저렴함 (Lambda와 같음)

1.3. Serverless AWS 서비스

  • Lambda

    • 서버를 구축할 필요없이 단순히 코드작성

  • SQS(Simple Queue Service)

    • 메세지를 큐에 담고 들어온 순서에 따라 메세지를 처리

  • SNS(Simple Notification Service)

    • 메세지 서비스로 특정 이벤트 발생이 텍스트나 이메일을 보내주는 서비스

  • API Gateway

    • Serverless 이며 확장성이 뛰어난 API를 만들고 퍼블리쉬를 관리하는 서비스

  • DynamoDB

    • 테이블을 만들고 설정만 해준다면 알아서 테이블을 업데이트 해줌

    • RCU와 WCU를 Auto Scaling 해줄 뿐만 아니라 TTL을 통하여 테이블 클리너 제공

  • S3

    • 웹사이트 호스팅 및 오브젝트를 보관하는 스토리지

2. Step Function

  • Serverless 어플리케이션을 구축함에 있어 시각적 인터페이스 제공

  • 일련의 Step으로 Serverless 어플리케이션을 관리할 수 있음

  • Step은 Business Logic에 의해 순서대로 실행되어짐

  • Step의 output은 또다른 Step의 input이 될 수 있음

2.1. Workflow

2.1.1. Sequential Workflow (State Machine)

  • START → Strip Strings → Remove WhiteSpace → Word Counts → END

2.1.2. Parallel Workflow

  • START → Process Photo → [Extract Metadata - Adjust Image Size - Update Color Channel - Crop Image] → Store in DB → END

3. Lambda - Version Control

  • Lambda Function을 처음 만들면 Version은 $LATEST 가 됨

  • 변경된 Lambda Function을 업로드하면 그 Version이 $LATEST 가 됨

  • Version은 우리가 Alias 를 부여할 수 있음

    • 다른 Lambda Version을 가질 수 있음

    • 다른 Lambda Version은 다른 ARN 이 존재함

  • Alias 는 다른 Version으로 변환 시 사용되어짐

4. Lambda - VPC Access

  • Lambda 함수를 만들고 Private PC 혹은 Private Subnet 안에 있는 Resource 를 접근해야하는 일이 있었을 텐데 당연하지만 밖에서는 접근되어선 안됨

  • Lambda → Private VPC[Private Subnet(EC2, RDS)]

  • Lambda 함수가 Private VPC에 접근해야하는 상황

    • 예) Lambda 함수가 Serverless Website 에서 RDS DB 읽기&쓰기

    • 예) Lambda 함수가 보안적인 부분에 문제가 생긴 EC2 인스턴스 종료해야하는 상황

4.1. VPC 안에 Lambda가 접근하려면?

  • Lambda 함수가 Private Subnet 에 접근할 수 있게 허용해줘야함

  • Lambda 함수는 아래와 같은 VPC Configuration 이 요구됨

    • Private Subnet ID

    • Security Group ID

  • Lambda 함수는 Private Subnet 으로부터 사용 가능한 IP 주소를 부여해주는 ENI(Elastic Network Interface) 를 셋업함