실습 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 도 가능하다