나는 “tyle”에서 aws를 이렇게 구축(사용)했다
TRANSCRIPT
나는 “tyle”에서AWS를 이렇게 구축(사용)했
다. 부제 : aws생초보가 생초보스럽게남들하는만큼만구축하다..
tyle - 박관웅
tyle에들어오니 CTO님께서요청을하셨다.
AWS 재구축을..
CTO님은이렇게생기진않음….쿨..
저는순수웹개발자..
AWS에 A도몰랐던시절..
잠깐본인소개.
삼성멤버십때처음개발접하고이거저거손대다SI업체잠깐갔다가도망치고
스타트업에몸담아강제로풀스택(?)을경험하며번역도짬짬이블로깅도짬짬이하는
주니어개발자
이제개발(?)구축(?) 시작
구 tyle AWS 상황
기본적인것만딱구축된상황
구 tyle AWS 상황
추가해야할것들
• Multi EC2
• Elastic Load Balancing
• Cloud Watch
• S3
• RDS Tuning
• Route53
• VPC
처음시작하면 Document부터보는편이라열어보았더니.…
처음시작하면 Document부터보는편이라열어보았더니.…
보기가너무어렵더군요…
탈출하고싶다.
EC2
Production
main
Development
dev
일접속자 10명도안되던시기라고려할게없었다. 우린스타트업이니깐
Instance Type(Production) : m4.xlarge
Instance Type(Development) : t2.large
고려할사항 : 서버성능?, 동접률?, 실서버와개발서버분리?
- 최초구축(?)
EC2
• 입소문이펴지면서동접자가급속히증가함에따라카드생성성능급격히저하- 성능 : 기존대비 2배소요
- 이슈발생
성능이슈시해결방법?
- 하드웨어성능향상- 리팩토링
중 일단 리팩토링은 스타텁에선 힘들기 때문에 하드웨어 성능 향상선택( 역시돈이최고, 후에리팩토링도진행하였다.)
• 실서버에 dependency 한패키지설치미숙으로서버죽는현상발생
대응책
- Auto Scaling 을준비하면좋지만, 방법을몰랐기때문에, 비상시교체할서버준비
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
ELB
• EC2 2개를운영하니사용자접속연결관리점이필요
• 사용자가적절히트래픽에맞게분산되어 EC2에접속할필요성느낌
• 구글에 “nginx 서버분산” 검색하니 “로드밸런싱” 이라는키워드발견
• RoundRobin 이니 proxy니어려운말투성이..(대학때배운기억만..)
하지만우리의 AWS에 “Elastic Load Balancing” 이있다는걸찾게되었다.
그냥 EC2등록만하면된다!!
ELB- 요구사항
• ELB를선택후요구사항에충족한지조사
• 쿠키나세션관리방법
• Health check 유무
• SSL 인증서설치는?
• Error Monitoring
• IP 관리가능?(VPC)
ELB- 요구사항
• 쿠키나세션관리방법
기존 RR 알고리즘방식이아닌 Sticky Session으로분배할수있는설정이존재
tyle은오래머물면서제작후추출까지한세션으로유지할필요성있어서 Sticky Session 방식채택
Sticky Session : Expire Time을지정하면 Expire 되기전까지동일 EC2 접속유지
ELB - 이슈
• Sticky Session 이슈
30 seconds 설정시짧은주기로인해세션키값변경
X
사용자가평균머무는시간에맞게 Expire Time 설정필요
ELB- 요구사항
• Health check 유무
서버가잘동작중인지확인필요Port만등록하면 Interval Time 에맞춰 ping을쏴준다.
• SSL 인증서설치는?
ELB에 SSL을등록해야 HTTPS 접속이가능하다.
HTTPS port에등록할수있는기능제공
ELB- 요구사항
• Error Monitoring
• IP 관리가능?(VPC)
CloudWath 서비스와연동하여모니터링한가지예로중요한 Unhealty, latency 같은건 Alarms 등록
IP 대역별접근제한을위한 VPC 연동이되어편하다.
<ELB latency>
ELB
Production
main
main
Emergency
Development
dev
<최종결과>
성공적으로분산가능성능 0.5배향상
S3
• 용도
• 사용자가업로드한이미지• 완성된카드뉴스이미지• CS를통해업로드된각종파일• 웹상에서사용되는다양한이미지• cache 된이미지들• 등등
• 해야할것
• Bucket => 다른 Bucket으로객체이동• 객체 Life Cycle 설정• 객체 Permission
- 이미잘쓰고있다.
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
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
S3 - 해야할것.
• 객체 Life Cycle 설정
지속적으로쌓여가는이미지와사용하지않는이미지증가
액세스하지않는객체에대한정책변경필요
50day 간격으로 Storage IA로변경
약 1.3TB에 파일(대부분이미지) 저장
S3 - 해야할것.
• 객체 Life Cycle 설정
<Standard> <Standard-IA>
<현재사용량>
Storage Class 적용하니비용절감과데이터흐름파악가능
S3 - 결과.
Production
main
main
Emergency
Development
dev
Cloud Watch
• 갑자기서버가터지기시작했다.
• 속도가급격히저하되고있다.
• 카드이미지추출이끝나지않는다.
Cloud Watch
<RDS CPU 사용율>
<EC2 CPU 사용율>
그외에도다른수치상에그래프변화를 watch 할필요성느낌
CPU사용율이급격히상승하는경우발생
Cloud Watch
CPU , Unhealthy 등수치임계점을설정임계점초과시 Email 알람설정
<Email 알람예시>
Cloud Watch
ec2-cpurds-cpu
elb-healthy
main
main
Emergency
dev
Production Development
RDS
• Connection 객체상승
• 1달전쯤 Connection 객체가줄어들지않고계속상승하는현상• restart 하여도현상지속
- 이슈.
“db.t2.micro” => “db.t2.large” 변경문제해결 (하지만원인은..아직도..)
• Insert 요청시 Error 발생
• 예상치도못한 Storage 용량초과 (초기10GB 설정)
• 카드이미지블록데이터요소저장때문에순식간에초과
10GB => 30GB 로변경
• 외부에서 RDS 접근시도포착
• 흔한 bot 또는스크립트삽입공격
VCP 로접속 IP 엑세스권한설정
RDS
ec2-cpurds-cpu
elb-healthy
main
main
Emergency
dev
Production Development
VPC
• 내외부망분리를통한보안강화• IP Security Group 정의를통한가상방화벽역할
ec2-cpurds-cpu
elb-healthy
main
main
Emergencydev
Production
Development
Route53
• Alias 설정을통해 Load Balancing( ELB )
• 호스팅하기• Health Check + CloudWatch 로상황파악
ec2-cpurds-cpu
elb-healthy
main
main
Emergencydev
Production
Development
번외- 로그분석기
AWS서비스는아니지만, 로그관리서버구성하여로그수집&분석사용
AWS서비스는한계가있어 Custom을위해따로 AWS서비스미사용함
Production Log
• FileBeat : 로그전송• Logstash : Data 처리위한파이프라인• ElasticSearch : 검색, 분석서비스• Kibana : Visualize tool
드디어완성하였습니다.
최종모습
ec2-cpurds-cpu
elb-healthy
main
main
Emergency
dev
Production
Development
Log
Log
끝
감사합니다.