2018 - jj.ac.kr · PDF file교육 과정 •1 학년 게임 ... 작가, 캐릭터디자이너, 게임프로듀서, 게임마케터, ... 유니티 게임 개발의 정석 이득우
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
-
Upload
amazon-web-services-korea -
Category
Technology
-
view
1.367 -
download
7
Transcript of AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
SEOUL
© 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
© 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
게임서비스운영
Solutions Architect
정윤진
https://speakerdeck.com/hatena/jaws-days-2014-miiverse
어떻게만든걸까?
• CentOS 6
• MySQL, Redis, Memcached
• Nginx, HAProxy, Squid
• Quagga, OpenSwan, OpenVPN
• Nagios, CloudWatch, Graphite, Mackerel
• Git, Capistrano, Cinamon
• Chef from OPSCODE
https://speakerdeck.com/hatena/jaws-days-2014-miiverse
신규게임을출시할때마다이런설치작업을반복해야한다면?
Pain points
• 게임을런칭할때마다환경을직접구성
• AMI 기반의버전관리만으로는부족
• 대부분의게임은장르별로유사한구성
• 정기점검으로인한서비스중단은매출에영향
인프라를코드로관리
필요할때즉시
사용한만큼지불
신축성
=프로그래밍가능한플랫폼
프로그램밍이가능하다면자동화역시가능
11.6s
신규코드가반영되는속도
(주중)
1,079
한시간동안최대업데이트횟수
10,000
동시에업데이트가발생하는호스트수
30,000
동시에업데이트가발생하는최대호스트수
AMAZON.COM
연속배포(in 2011)
소프트웨어배포
≠제품출시
같은일두번하지말자Don’t re:invent the wheel
DevOps
DevOps?
• « DevOps란서비스의라이프사이클관리를위해운영과개발의양쪽엔지니어가함께협업하는모델 »
- theagileadmin.com
선택가능한다양한옵션
• Configuration Management Systems– Puppet
– Chef
– Saltstack
• Deployment Frameworks– CodeDeploy
– AWS Elastic Beanstalk
– AWS OpsWorks
– Ansible
– Fabric
– Capistrano
• Infrastructure Management– CloudFormation
• Containers– Amazon EC2 Container Service
Bootstrapping
이미지생성 자동구성
시간이소요되는설정(startup time)
거의변경되지않는설정(less change management)
Bootstrapping
연속배포
(latest code)
환경종속적요소
(dev-test-prod)
Bootstrapping
이미지생성 자동구성
Continuous Integration
Continuous Integration?
• 코드의변경사항이자동으로서비스에배포– Unit / Mock 테스트완료후
• 코드의변경과배포를하나의덩어리로처리하는대신변경발생시마다지속적으로배포
• 버그의빠른발견
• 자동화된배포
• 신속한개발과배포를가능하게함
SOURCE CODE
REPOSITORY
PROJECT MANAGEMENT
SERVER
CONTINUOUS
INTEGRATION SERVER
개발자
PICK
TASKS
SUBMIT
CODE
SCHEDULE
BUILD
RECURRENT
BUILDS
CODE
FETCHCODE QUALITY
TESTS
TEST
RESULTS
BUILD OUTPUT
DOCS
BINARIES
& PACKAGES
DEV FACING
NOTIFICATIONS
CLOUDFORMATION
AMIS or CONTAINERS
SOURCE CODE
REPOSITORY
DNS
CONTINUOUS
INTEGRATION SERVER
PROJECT
MANAGEMENT SERVER
BUILDS
PAIN POINTS• Unit테스트의비종료• MOCK테스트의메인터넌스• 고비용의테스트환경• 테스트환경 ≠실서비스환경• 배포주기
소프트웨어개발라이프사이클
10/13/14 26
MonitorProvisionDeployTestBuildCode
AWS Elastic Beanstalk
AWS OpsWorks
Amazon
CloudWatch
AWS
CloudFormation
?
AWS code 서비스
AWS CodeCommit
곧출시됩니다
AWS CodePipeline
곧출시됩니다
AWS CodeDeploy
절찬리판매중
Source Control아마존 S3위에서서비스되는사설 Git코드저장소
• Git완벽호환 (기존의도구그대로사용가능)
• 클라우드사용의잇점을모두도입가능(확장성, 내구성, 신뢰성, 사용량기반의저렴한과금체계)
• 저장소의크기제한없음(바이너리도마음껏저장)
• 온라인도구제공 –코드확인,수정, diff
10/13/14 28
Same Git experience
$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
Cloning into 'aws-cli'...
Receiving objects: 100% (16032/16032), 5.55 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (9900/9900), done.
Checking connectivity... done.
$ nano README.rst
$ git commit -am 'updated README'
[master 4fa0318] updated README
1 file changed, 1 insertion(+)
$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote:
To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-cli
4dacd6d..4fa0318 master -> master
Continuous Delivery커스터마이즈가능한빌드,테스트를포함한배포자동화
• 커스텀된배포자동화흐름을한눈에확인(source build beta gamma prod)
• 자동빌드,테스트,그리고배포
• 커스텀정책,승인및게이트구성이가능
• 3rd party 도구또는커스텀도구와연동가능
10/13/14 30
DeploymentEC2 인스턴스그룹에소프트웨어업데이트를조정
• 다운타임없이업데이트가능 -롤링업데이트
• Health check 와함께배포하여손쉬운 Rollback
• 오토스케일연동
• 어떠한어플리케이션과도연동가능
• 기존의설정도구와함께연동가능(Bash, Powershell, Chef, Puppet…)
10/13/14 32
9/25/14 Slides not intended for
redistribution.
33
Cloud software development lifecycle
10/13/14 34
MonitorProvisionDeployTestBuildCode
AWS Elastic Beanstalk
AWS OpsWorks
CloudWatchCloudFormationCodeDeploy
CodeCommit CodePipeline
CODECOMMIT
DNS
CODEPIPELINE
PROJECT
MANAGEMENT SERVER
BUILDS
CONTINUOUS DEPLOYMENT
연속배포작은코드의변경이라도지속적으로서비스시스템에
배포/반영하는것을이르는말
필수요소 = 반복
ITERATION (반복)
=사용자를위해지속적으로시스템을더
향상된형태로수정
© 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS CLOUDFORMATION스택기반배포서비스
CLOUDFORMATION
TEMPLATE
기본워크플로우
디자인
인프라
템플릿생성
어플리케이션
코드생성
스택생성
반복
Infrastructure-as-code workflow
코드
템플릿
버전
컨트롤
코드
리뷰개선
“It’s all software”
Headers
Parameters
Mappings
Resources
Outputs
{"Description" : "Create RDS with username and password","Resources" : {
"MyDB" : {"Type" : "AWS::RDS::DBInstance","Properties" : {
"AllocatedStorage" : "500","DBInstanceClass" : "db.m1.small","Engine" : "MySQL","EngineVersion" : "5.5","MasterUsername" : "MyName","MasterUserPassword" : "MyPassword"
}}
}}
"AWS::CloudFormation::Init" : { "config" : {
"packages" : {"yum" : {
"mysql" : [],"mysql-server" : [],"httpd" : [],"php" : [],"php-mysql" : []
}},"sources" : {"/var/www/html" :
"https://s3.amazonaws.com/my-builds/build-v4.zip"}
}
{"Parameters" : {"KeyName" : {
"Description" : "Name of an existing EC2KeyPair to enable SSHaccess to the instance",
"Type" : "String"}
},}
CLOUDFORMATION
TEMPLATE
PROCEDURAL
DEFINITION생성
KNOWN
CONFIGURATION코드저장소에템플릿을저장하여관리
PARAMETER
DRIVEN사용자가원하는형태로동적인템플릿구성가능
COLLABORATION다른사람들과파일만공유하면됨
어플리케이션버전관리
+인프라버전관리
CLOUDFORMATION
TEMPLATE
© 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
AWS OpsWorks어플리케이션라이프사이클관리서비스
AWS OpsWorks
• 어플리케이션라이프사이클관리서비스– 빠르고안전한배포구성
– 복잡한인프라에대한확장,관리,모델링등을자동화
– 기본구성을사용하여쉽게사용가능
– 추가비용없음
OpsWorks의기본구조
EC2인스턴스의OpsWorks Agent
OpsWorkstalks with
OpsWorks기본구조
OpsWorks에정의된일련의명령을다운로드,
Agent에서 Chef solo(Chef
Zero)에서레시피를실행
EC2인스턴스의OpsWorks Agent
Chef 11.10에서 Chef
Client의 local mode
OpsWorks요구사항
• Amazon Linux또는 Ubuntu 12.04LTS,14.04LTS기반– 사용자가생성한 AMI역시사용가능
• Chef버전 0.9, 11.4, 11.10지원
• VPC지원– Default VPC, Customer VPC 모두사용가능
• ELB, RDS, CloudFormation, CloudTrail지원
• 신규로구동한인스턴스에서 OpsWorks endpoint 에접근하도록구성가능
OpsWorks사용방법
• AWS 관리 콘솔
• AWS SDK
• AWS CLI
• OpsWorks Agent CLI
– OpsWorks에서 시작된 인스턴스에 SSH로 로그인하여 agent 전용 명령어를 실행
첫번째인스턴스를추가
App
서버
Setup Deploy Configure Execute Recipe Shutdown
첫번째인스턴스를시작하면 Setup이실행
App서버를시작
App
서버
Setup Deploy Configure Execute Recipe Shutdown
Setup실행후 Deploy가자동으로실행
App서버를시작
App
서버
Setup Deploy Configure Execute Recipe Shutdown
인스턴스가 online되면 Configure가실행
App서버를시작
App
서버
Setup Deploy Configure Execute Recipe Shutdown
데이터베이스인스턴스추가
App서버시작
App
서버
DB
서버
Setup Deploy Configure Execute Recipe Shutdown
Setup, Deploy자동수행
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
DB서버가 online되면스택의모든인스턴스에서Configure가수행됨
App서버시작
App
서버
DB
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
인스턴스를추가
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
Setup, Deploy가자동실행
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
App서버시작
새로운인스턴스가 online이되면스택의모든인스턴스에서 configure가실행됨
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
App서버시작
수동배포
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
App서버시작
수동배포실행
레시피수동실행
App서버시작
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
App서버시작
수동배포실행
레시피실행
App
서버
DB
서버
App
서버
인스턴스중지
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
Setup Deploy Configure Execute Recipe Shutdown
App서버시작
수동배포실행
레시피실행 App서버종료
인스턴스가상태가변경되면 Configure가실행
Setup Deploy Configure Execute Recipe Shutdown
App서버시작
App
서버
DB
서버
App
서버
DB서버시작
App서버시작
수동배포실행
레시피실행 App서버종료
시간기반으로인스턴스를 rolling update 예
• 매일 지정된 시간에 인스턴스를 시작 / 중지
– 각 인스턴스별로 시간을 늦추어 시작 / 중지
• 인스턴스가 부팅할 때마다 Setup, Deploy 라이프사이클 이벤트에 의해 업데이트되어 최신 버전으로어플리케이션을 구동
배포한 App 의 rollback
• 1회 이전의 버전의 App 으로도 rollback 이 가능– 예:App의 업데이트를 3회 수행한 경우, 한번 롤백하면 두번째 버전으로, 두번롤백하면 첫번째 버전으로 롤백
• OpsWorks는 기본적으로 5가지 버전의 App 을 보유– 보유하고 있는 버전 수를 넘어 롤백을 시도하면 실패하게되고, 가장 오래된버전으로 적용된다.
– [:opsworks][:deploy_keep_releases]을 변경하여 전체 스택에서 유지할버전의 수를 변경 가능
– 개별 App 버전의 보유 수를 변경하려면[:deploy][‘appshortname’][:keep_releases]를 변경
CloudWatch를통한모니터링
• OpsWorks는 CloudWatch를 사용하여 다음의 메트릭을 1분 단위로모니터링
• 14개 메트릭 (무료 제공)– CPU(5)
• Idle / User CPU / System CPU / IO Wait / nice(Unix)
– 메모리• 메모리 합계 / 사용중인 메모리 / swap / free / 메모리 버퍼
– 부하 (3)• 1분 / 5분 / 15분 단위 평균 부하
– 프로세스(1)• 프로세스의 수
• 인스턴스의 OS 레벨에서 얻을 수 있는 정보는 OpsWorks 에이전트가수집하여 CloudWatch 서비스로 전송하여 얻어진다.
– 이를 통해 메모리, 프로세스 같은 표준 CloudWatch 모니터링에선 얻을 수 없는데이터도 확인할 수 있다.
CloudWatch를사용한 OpsWorks모니터링
각레이어별모니터링 인스턴스모니터링
데이터기반아키텍처
METRICS @ETSY
모니터링옵션
CloudWatch
… and many more
CONTINUOUS DEPLOYMENT
(배포의연속)
=
CONTINUOUS EXPERIMENTATION
(실험의연속)
CONTINUOUS DEPLOYMENT
(배포의연속)
=
CONTINUOUS IMPROVEMENT
(개선의연속)
INNOVATE
SAN FRANCISCO