나는 “tyle”에서 aws를 이렇게 구축(사용)했다

37
나는 tyle에서 AWS를 이렇게 구축(사용). 부제 : aws생초보가 생초보스럽게 남들 하는 만큼만 구축하다.. tyle - 박관웅

Upload: kwanung-park

Post on 22-Jan-2018

548 views

Category:

Software


6 download

TRANSCRIPT

Page 1: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

나는 “tyle”에서AWS를 이렇게 구축(사용)했

다. 부제 : aws생초보가 생초보스럽게남들하는만큼만구축하다..

tyle - 박관웅

Page 2: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

잠깐 소개

스토리텔링에최적화된카드뉴스디자인자동화툴을개발하고있습니다.

https://tyle.io ( “타일(tyle)” 입니다.)

Page 3: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

tyle에들어오니 CTO님께서요청을하셨다.

AWS 재구축을..

CTO님은이렇게생기진않음….쿨..

Page 4: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

저는순수웹개발자..

AWS에 A도몰랐던시절..

잠깐본인소개.

삼성멤버십때처음개발접하고이거저거손대다SI업체잠깐갔다가도망치고

스타트업에몸담아강제로풀스택(?)을경험하며번역도짬짬이블로깅도짬짬이하는

주니어개발자

Page 5: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

이제개발(?)구축(?) 시작

Page 6: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

구 tyle AWS 상황

기본적인것만딱구축된상황

Page 7: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

구 tyle AWS 상황

추가해야할것들

• Multi EC2

• Elastic Load Balancing

• Cloud Watch

• S3

• RDS Tuning

• Route53

• VPC

Page 8: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

처음시작하면 Document부터보는편이라열어보았더니.…

Page 9: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

처음시작하면 Document부터보는편이라열어보았더니.…

보기가너무어렵더군요…

탈출하고싶다.

Page 10: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

EC2

Production

main

Development

dev

일접속자 10명도안되던시기라고려할게없었다. 우린스타트업이니깐

Instance Type(Production) : m4.xlarge

Instance Type(Development) : t2.large

고려할사항 : 서버성능?, 동접률?, 실서버와개발서버분리?

- 최초구축(?)

Page 11: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

EC2

• 입소문이펴지면서동접자가급속히증가함에따라카드생성성능급격히저하- 성능 : 기존대비 2배소요

- 이슈발생

성능이슈시해결방법?

- 하드웨어성능향상- 리팩토링

중 일단 리팩토링은 스타텁에선 힘들기 때문에 하드웨어 성능 향상선택( 역시돈이최고, 후에리팩토링도진행하였다.)

• 실서버에 dependency 한패키지설치미숙으로서버죽는현상발생

대응책

- Auto Scaling 을준비하면좋지만, 방법을몰랐기때문에, 비상시교체할서버준비

Page 12: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

Production

main main

Emergency

Development

dev

EC2 - EC2 Upgrade

• Instance Type : m4.xlarge => c4.2xlarge

• c4 계열을선택한이유- 다양한연산이들어가는처리를위해서컴퓨팅능력이필요함.

- EC2 2개로늘린후동일메모리로 CPU업그레이드

• 위급상황위해여분서버준비(CI는동일하게진행)

<최종결과>

API Name Memory vCPUsLinux On Demand

costLinux Reserved cost

m4.xlarge 16.0GB 4 vCPUs $179.580/M $107.310/M

c4.2xlarge 15.0GB 8 vCPUs $331.420/M $224.110/M

Page 13: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB

• EC2 2개를운영하니사용자접속연결관리점이필요

• 사용자가적절히트래픽에맞게분산되어 EC2에접속할필요성느낌

• 구글에 “nginx 서버분산” 검색하니 “로드밸런싱” 이라는키워드발견

• RoundRobin 이니 proxy니어려운말투성이..(대학때배운기억만..)

하지만우리의 AWS에 “Elastic Load Balancing” 이있다는걸찾게되었다.

그냥 EC2등록만하면된다!!

Page 14: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB- 요구사항

• ELB를선택후요구사항에충족한지조사

• 쿠키나세션관리방법

• Health check 유무

• SSL 인증서설치는?

• Error Monitoring

• IP 관리가능?(VPC)

Page 15: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB- 요구사항

• 쿠키나세션관리방법

기존 RR 알고리즘방식이아닌 Sticky Session으로분배할수있는설정이존재

tyle은오래머물면서제작후추출까지한세션으로유지할필요성있어서 Sticky Session 방식채택

Sticky Session : Expire Time을지정하면 Expire 되기전까지동일 EC2 접속유지

Page 16: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB - 이슈

• Sticky Session 이슈

30 seconds 설정시짧은주기로인해세션키값변경

X

사용자가평균머무는시간에맞게 Expire Time 설정필요

Page 17: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB- 요구사항

• Health check 유무

서버가잘동작중인지확인필요Port만등록하면 Interval Time 에맞춰 ping을쏴준다.

• SSL 인증서설치는?

ELB에 SSL을등록해야 HTTPS 접속이가능하다.

HTTPS port에등록할수있는기능제공

Page 18: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB- 요구사항

• Error Monitoring

• IP 관리가능?(VPC)

CloudWath 서비스와연동하여모니터링한가지예로중요한 Unhealty, latency 같은건 Alarms 등록

IP 대역별접근제한을위한 VPC 연동이되어편하다.

<ELB latency>

Page 19: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

ELB

Production

main

main

Emergency

Development

dev

<최종결과>

성공적으로분산가능성능 0.5배향상

Page 20: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

S3

• 용도

• 사용자가업로드한이미지• 완성된카드뉴스이미지• CS를통해업로드된각종파일• 웹상에서사용되는다양한이미지• cache 된이미지들• 등등

• 해야할것

• Bucket => 다른 Bucket으로객체이동• 객체 Life Cycle 설정• 객체 Permission

- 이미잘쓰고있다.

Page 21: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

S3 - 해야할것.

• Bucket => 다른 Bucket으로객체이동

단순히 check box 하고 Move 버튼이있을줄알았다. 없다..

구글링 “S3 bucket move” 하니 “AWS CLI” 라는것을이용해야한다고한다.

A bucket B bucketcp

cp 커맨드로잘옮겨져갔지만,

수백기가데이터를옮기는와중에새롭게저장되는객체를감지하지못하는이슈발생

<예시>

HOW?

sync 커맨드를발견동기화를통해 cp중새롭게업데이트된객체감지하여 cp 작업진행

A bucket B bucket

sync

cp

Page 22: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

S3 - 해야할것.

• Bucket => 다른 Bucket으로객체이동

• sync 이슈해결하니 region 문제발생

보내는쪽 region : 도쿄받는 쪽 reigon : 서울

애초에 S3는 Global 로되어있길래 region에대해선아예생각도안했던상황

HOW?

CLI 에옵션으로 —source-region 지정

aws s3 sync s3://my-us-west-2-bucket s3://my-us-east-1-bucket --source-region us-west-2 --region us-east-1

Page 23: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

S3 - 해야할것.

• 객체 Life Cycle 설정

지속적으로쌓여가는이미지와사용하지않는이미지증가

액세스하지않는객체에대한정책변경필요

50day 간격으로 Storage IA로변경

약 1.3TB에 파일(대부분이미지) 저장

Page 24: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

S3 - 해야할것.

• 객체 Life Cycle 설정

<Standard> <Standard-IA>

<현재사용량>

Storage Class 적용하니비용절감과데이터흐름파악가능

Page 25: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

S3 - 결과.

Production

main

main

Emergency

Development

dev

Page 26: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

Cloud Watch

• 갑자기서버가터지기시작했다.

• 속도가급격히저하되고있다.

• 카드이미지추출이끝나지않는다.

Page 27: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

Cloud Watch

<RDS CPU 사용율>

<EC2 CPU 사용율>

그외에도다른수치상에그래프변화를 watch 할필요성느낌

CPU사용율이급격히상승하는경우발생

Page 28: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

Cloud Watch

CPU , Unhealthy 등수치임계점을설정임계점초과시 Email 알람설정

<Email 알람예시>

Page 29: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

Cloud Watch

ec2-cpurds-cpu

elb-healthy

main

main

Emergency

dev

Production Development

Page 30: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

RDS

• Connection 객체상승

• 1달전쯤 Connection 객체가줄어들지않고계속상승하는현상• restart 하여도현상지속

- 이슈.

“db.t2.micro” => “db.t2.large” 변경문제해결 (하지만원인은..아직도..)

• Insert 요청시 Error 발생

• 예상치도못한 Storage 용량초과 (초기10GB 설정)

• 카드이미지블록데이터요소저장때문에순식간에초과

10GB => 30GB 로변경

• 외부에서 RDS 접근시도포착

• 흔한 bot 또는스크립트삽입공격

VCP 로접속 IP 엑세스권한설정

Page 31: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

RDS

ec2-cpurds-cpu

elb-healthy

main

main

Emergency

dev

Production Development

Page 32: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

VPC

• 내외부망분리를통한보안강화• IP Security Group 정의를통한가상방화벽역할

ec2-cpurds-cpu

elb-healthy

main

main

Emergencydev

Production

Development

Page 33: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

Route53

• Alias 설정을통해 Load Balancing( ELB )

• 호스팅하기• Health Check + CloudWatch 로상황파악

ec2-cpurds-cpu

elb-healthy

main

main

Emergencydev

Production

Development

Page 34: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

번외- 로그분석기

AWS서비스는아니지만, 로그관리서버구성하여로그수집&분석사용

AWS서비스는한계가있어 Custom을위해따로 AWS서비스미사용함

Production Log

• FileBeat : 로그전송• Logstash : Data 처리위한파이프라인• ElasticSearch : 검색, 분석서비스• Kibana : Visualize tool

Page 35: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

드디어완성하였습니다.

Page 36: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

최종모습

ec2-cpurds-cpu

elb-healthy

main

main

Emergency

dev

Production

Development

Log

Log

Page 37: 나는 “tyle”에서 AWS를 이렇게 구축(사용)했다

감사합니다.