Home Cloud-Data-Infra - (Day1)
Post
Cancel

Cloud-Data-Infra - (Day1)

실습 1. AWS LoadBalancers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1. VPC Wizard 통해 생성
    - (kbi-0127-main-vpc) / 10.0.0.0/16

2. EC2 Instance 2대 생성
    - (demo-vm-01,02) 

3. 각 Instance 별로 서버 띄우기
    - sudo yum install -y httpd
    - sudo systemctl enable httpd.service
    - sudo systemctl start httpd.service
    - sudo systemctl status httpd.service
    - sudo groupadd www
    - sudo usermod -a -G www ec2-user
    - exit 

4. 각 서버에 접속화면 변경
    - cd /var/www
    - sudo chown -R root:www /var/www
    - sudo chmod 2775 /var/www/html/
    - cd html
    - cat << EOF > index.html [Instance 01] KBI Cloud Data Platorm: Load Balancer Demo 

5. Load Balancing > Target-Group 생성
6. Load Balancers > LB 생성 > Application LB 생성
7. ALB 접속해서 Load Balancing 확인
    - stickiness : 세션 객체를 외부에서 관리할 수 없는 제약환경이 있을 때 사용하는 옵션중에 하나이다.
    - (EC2 > Target groups > LB-VMS > attributes > stickiness 설정)

실습 2. Kinesis 간단한 데이터 produce 및 consume 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1. kinesis, boto3 설치
    - pip3 install kinesis --user
    - pip3 install boto3 --user

2. kinesis stream 생성
    - aws kinesis create-stream --stream-name kbi-0127-stream-code --shard-count 4

3. producer, consumer 작성 & 실행
    - producer.py

import boto3 # python aws library 
from kinesis.producer import KinesisProducer

producer = KinesisProducer(stream_name = 'kbi-0127-stream-code')

for i in range(100):
    print(i)
    producer.put_record(str(i) + 'th message from Python')

print("completed")

    - consumer.py

import boto3
from kinesis.consumer import KinesisConsumer

consumer = KinesisConsumer(stream_name = 'kbi-0127-stream-code')

for message in consumer:
    print("===========")
    print(message)
    print("===========")

실습 3. Data Pipeline 구축 실습

  • 데이터 플로우 예시
    • Amazon EC2 or C9 -> Amazon API Gateway -> Kinesis Streams -> Kinesis Firehose -> S3
    • ARN : ROLE에서 AWS 내부적으로 가지고다니는 고유한 시리얼번호
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1. Kinesis Stream 생성한다.
    - (kbi-0127-data-pipe-stream)

2. S3 버킷 생성
    - kbi-0127-data-pipe-bucket

3. Role 설정
    - API-GateWay 에 Role 생성, Permission 추가
    - Kinesis, KinesisFirehose, KinesisAnalytics Full Access 추가

4. API Gateway REST-API 생성
    - API 생성 > Resource 생성 > Method 추가 > ARN Role 설정 > Request Header, Body 설정 >
    - 매핑 템플릿 설정
#set( $enter = "" )
#set( $json = "$input.json('$')$enter")
{
    "Data": "$util.base64Encode("$json")",
    "PartitionKey": "1",
    "StreamName": "kbi-0127-data-pipe-stream"
}

5. kinesis firehose 설정
    - Source, Destination 설정

6. API 배포 및 URL 확인

+ Q1. S3 하나의 오브젝트에 저장하려면 어떻게 해야하나?
+ Q2. Kinesis 내부 모니터링 하려면 어떻게 해야하나?

Fluentd

  • CNCF : 클라우드의 전반적인 기술을 담당하고 있다.
  • Kubernetes 사용자들은 특히 fluentd를 많이 사용한다.(내부 서버들을 밖으로 끄집어내기 위해서 많이 사용한다.)
  • Kinesis:kafka -> Kinesis-Firehose:fluentd
  • 경량화되어 C++ 로 개발된 fluentbit 도 있다.
  • input -> filter -> buffer -> output 의 형태로 많이 사용한다.

Snowflake

  • multi star schema 가 모여있는 데이터를 다루는 Amazon의 서드파트 회사
  • cloud-computing 기반의 DW 회사
  • 사용량 기반 과금정책을 가지고 있음.
  • Cloud Public Storage 사용하며, ANSI SQL 지원, 다양한 서드파트 및 오토튜닝(indexing,partitioning 안해도됨)
  • 특정 시점으로 이동 가능 (Time Travel)

  • 하나의 파일을 micro partion으로 작게 만든다. 그리고 변경점이 생성되면 기존 파일이 복사가 되어 버전이 올라간다.
  • 컬럼 기반 데이터베이스이며, 그래서 오브젝트 스토리지 임에도 변경이 자유롭다.
  • 대신 SQL의 실행능력 측면에서 부족한 캐싱능력을 보완하기 위해 Computing-Node 의 파워를 증가시켜 비용이 RedShift 보다 비싸졌다.
  • 실 실행은 Virtual DW 에서 수행된다. > 쿼리가 밀린다면 Auto-Scaling 도 가능하다
This post is licensed under CC BY 4.0 by the author.