AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석

Post on 15-Jul-2015

1.367 views 7 download

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