gaming on aws - 6. aws 환경에서의 유연하고 신속한 코드 관리 및 배포

62
AWS 환경에서의 유연하고 신속한 코드 관리 및 배포 [email protected] Solu9ons Architect

Upload: amazon-web-services-korea

Post on 15-Apr-2017

2.308 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS!환경에서의!유연하고!신속한!코드!관리!및!배포!

�����[email protected]'Solu9ons'Architect'

Page 2: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

95&%&of&new&products&fail*&

*&Clay&Christensen,&Harvard&Business&School&

Page 3: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Why?&

Page 4: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

It’s&very&hard,&but&!!!&

Page 5: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

What’s&your&goal?&

Goal'

Page 6: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

How&do&you&know&you&are&building&&the&right&thing?&Goal' Design'

Page 7: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

How&do&you&know&you&are&building&it&right?&

Goal' Design' Build'

Page 8: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Feedback&

Goal' Design' Build' Ship'

Page 9: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

왜 유연해야 하는가?&

Page 10: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

개발자들에게 배포란?

“SoHware&deployment'is'all'of'the'ac9vi9es'that'make'a'soBware'

system'ready'to'use.”'Wikipedia(

“Our'highest'priority'is'to'sa9sfy'the'customer'through'early'and'con9nuous'

delivery'of'valuable'soBware.”'Principles(behind(the(Agile(Manifesto(

“Con9nuous'Deployment'is'the'no9on'of'having'the'automated'build'infrastructure,'the'Con9nuous'Integra9on'server,'go'one'step'further'and'roll'out'deployments'to'

the'running'server.”'SmartFrog(

“Just'ship'it,'baby.”Kent(Beck

Page 11: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

개발자들에게 배포란?

먄약 여러분이 고객들께 배포를 설명해야 한다면, 여러분은 이미 실패한 것입니다.

Mitch'Garnaat,'Scopely'

Page 12: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Scopely?

•  4'consecu9ve'#1'games'

•  35'million'users'

•  Billions'requests/day'

•  100%'on'AWS'

Page 13: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

배포의 목표 !  자동화된, 반복적인 과정'!  Auto'Scaling'과 호환'!  문제 발생시 롤백(rollback) 할 수 있는 능력'!  사용자에게 미치는 영향을 최소화'!  Blue/Green'배포는 좋은 방법론'

Page 14: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&Deployment&

produc=on(traffic(

Page 15: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&Deployment&

Install'new's/w'

produc=on(traffic(

Page 16: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&Deployment&

Acceptance'Test'

produc=on(traffic(

Page 17: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&Deployment&

produc=on(traffic(

Page 18: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&Deployment&

produc=on(traffic(

Install'new's/w'Test'

Page 19: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&배포 !  두개의 독립적인 환경'!  새로운 환경에 대한 테스트(Acceptance'test)'!  모든 트래픽을 한번에 전환'

Page 20: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Blue/Green&배포에서의 고려사항 !  비용'!  테스트가 무척이나 중요하다'!  클라우드에서 트래픽을 전환할 때 주로 DNS'전환을 사용'

!  두개의 ELB(Elas9c'Load'Balancing)'!  Blue'와 Green'사이의 DNS'레코드를 전환'

!  DNS'클라이언트에 대한 의존성'!  새로운 ELB가 미처 예열(warmed'up)되지 않음'

Page 21: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

또 다른 접근 방법(Red/Black&배포)&&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

Page 22: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

준비&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

Page 23: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

확장&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

Page 24: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

롤백&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

Page 25: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

전환&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

Page 26: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

배포 완료&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

Page 27: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

신속한 배포&

Page 28: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

1970s&S&Waterfall&모델&

Goal'Design'

Build'

Ship'Time'

Page 29: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

1990s&–&VS모델&Goal'

Design' Build' Ship'

Time'

Goal'

Design'

Design' Ship'

Ship'

Ship'

Ship'Feedback'

Feedback'

Feedback'

Feedback'

Page 30: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

이런 접근방법의 문제점? ! 여러가지 조건들을 모르는 상태에서 전념'

!  목표, 제품, 시장에 대한 몰이해'!  불확실한 요구사항'!  설계및 구현시 “느낌”에 의존'

!  Leading'to:'!  낮은 목표 설정'!  낮은 품질 & 범위 축소'!  불확실한 추정; 테스트 생략'

Page 31: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

2000s&–&Lean&&&Agile&

Goal' Design' Build' Ship'

Time'

Goal' Design' Build' Ship'

Goal' Design' Build' Ship'

Page 32: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

SoHware&Development&LifeCycle&

Goal' Design' Build' Ship'

Develop' Deploy' Test' Run'and'Monitor'

Page 33: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

SDLC&–&Requirements&for&success&Goal' Design' Develop' Deploy' Test' Run'and'

Monitor'

효과적 &&효율적&& 경제적&

Page 34: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

SDLC&–&ImplementaZons&Drivers&Goal' Design' Develop' Deploy' Test' Run'and'

Monitor'

수평적으로…&• 일관성:'“과학적인 실험”'• 간섭의 최소화:'자동화!'가능한 많이 수행&• 각 버젼별'• 다양한 환경에 걸쳐'

Page 35: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

SDLC&–&Conceptual&answers&Goal' Design' Develop' Deploy' Test' Run'and'

Monitor'

Con9nuous'Integra9on'

Con9nuous'Delivery'

Con9nuous'Deployment'

Con9nuous'Feedback'

Page 36: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Cloud&는 인프라를&Agile&은 제품 개발을&

AWS&환경에서 어떻게�Agile&하게?&

Page 37: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

ExisZng&Ecosystem&Con9nuous'Everything(

Page 38: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&Ecosystem&

Goal' Design' Develop' Deploy' Test' Run'and'Monitor'

AWS'CodePipeline'

AWS'CodeCommit'

AWS'CodeDeploy'

Page 39: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Services&–&Overview&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

Managed(Revision(Control(Service( Deploys(code(to(fleet(of(instances(

Models(and(automate(soJware(release(process(

Page 40: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeCommit&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

Page 41: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeCommit&–&Overview&!  AWS의 코드 리비전 제어 서비스'

!  완벽한 관리형 서비스'!  무한 확장'!  고가용성 및 신뢰성'

!  안전'!  개발자 및 관리자 액세스를 제어하는 IAM'롤 사용'!  내장 암호화'

!  Git'명령을 지원하는 기존 도구와의 호환'(Visual'Studio,'Jenkins,'Asana,'ZenDesk,'Jira,'Eclipse,'etc.)'

Page 42: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeCommit&–&Git&!  코드, 문서, 바이너리 및 메타데이타에 대한 분산 버전 관리'

!  중점'!  속도'!  데이터 무결성'!  분산, 비선형 워크플로우'

!  모두가 로컬에 코드의 전체 히스토리를 가짐'!  Git'and'SVN:'

!  Git'은 간단하고 분산된 SVN'환경'!  Git'은 오프라인 작업 허용'!  SVN 으로 부터 Git'으로의 전환이 용이'

Page 43: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeCommit&–&Git:&Repositories&

! 저장소는 문서, 소스코드 및 바이너리 파일과 같은 자산을 저장하는 데이터 구조'

!  AWS'CodeCommit은 Cloud&저장소를 관리하고, 개발자는 해당 파일을 변경할 수 있도록 그 저장소를 복제할 수 있음'

! 로컬 저장소는 개발자가 로컬 작업을 수행할 수 있도록 지원&

My&&Local&Repo&

Albert’s'Local'Repo'

Stephan’s'Local'Repo'

Suzi’s''Local'Repo'

Remote'Repository'

Page 44: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeCommit&–&Git:&Branching&!  Branching'is'the'duplica9on'of'an'object'so'that'modifica9ons'can'happen'in'parallel'along'both'branches'

!  Merging'reconciles'the'mul9ple'changes'into'a'common'branch'

'

Page 45: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeCommit&–&Git:&Basic&OperaZons&

1' Create'a'repository'

2' Clone'it'locally'

3' Commit'

4' Push'

Page 46: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

Page 47: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&–&Overview&

!  효율적으로 서버들에 코드를 배포'!  높은 확장성 및 신뢰성'!  유연성:'

!  애플리케이션/언어에 상관없이'!  Windows'or'Linux'!  EC2'or'onipremises'

!  헬스체크를 통한 “Smart”'배포'!  Amazon'S3,'AWS'CodeCommit,'Git,'AWS'CodePipeline,'ELB,'AutoiScaling 등과 통합'

Page 48: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&–&컴포넌트&

Applica9on'Revision'1'

Revision'2'

Revision'3'

.'

.'

Revision'n'

.'

Deployments'

Deployment'Configura9on'

Deployment'Group'Instance'1'

Instance'2'

Instance'3'

.'

.'

Instance'm'

.'Specifica9on'

File'

Page 49: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&–&ApplicaZon&&&Revision&

!  ApplicaZon:'언어의 종류에 상관없는 리비전 컨테이너'!  Revision:'아카이브에 포함됨 애플리케이션의 버전'

!  Archive'content:'

!  아래와 같은 곳에 저장:'!  S3'!  CodeCommit'!  GitHub'

Applica9on'Revision'1'

Revision'2'

Revision'3'

.'

.'

Revision'n'

.'

Deployments'

Deployment'Configura9on'

Deployment'Group'Instance'1'

Instance'2'

Instance'3'

.'

.'

Instance'm'

.'Specifica9on'

File'

+'Source,'Binaries,'Data' Deployment'instruc9on'

(AppSpec.yml)'

Page 50: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&–&배포 그룹&

!  리비전이 배포될 인스턴스의 그룹'!  AutoiScaling'과'Tag'에 통합'!  Dev/QA/Prod'환경에 대한 이상적인 구조'

Applica9on'Revision'1'

Revision'2'

Revision'3'

.'

.'

Revision'n'

.'

Deployments'

Deployment'Configura9on'

Deployment'Group'Instance'1'

Instance'2'

Instance'3'

.'

.'

Instance'm'

.'Specifica9on'

File'

Goal' Design' Develop' Deploy' Test' Run'and'Monitor'

Deploy' Test'

Deploy' Test'

Run'and'Monitor'Run'and'Monitor'

Dev'

QA'

Prod'

Page 51: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&–&Instances&

! Windows'or'Linux'!  EC2'or'onipremises'!  CodeDeploy'Agent가 실행되어야 함'

Applica9on'Revision'1'

Revision'2'

Revision'3'

.'

.'

Revision'n'

.'

Deployments'

Deployment'Configura9on'

Deployment'Group'Instance'1'

Instance'2'

Instance'3'

.'

.'

Instance'm'

.'Specifica9on'

File'

Page 52: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodeDeploy&–&Deployment&

!  배포 그룹에 리비전을 배포하는 행위'!  Tag'통합'!  AutoiScaling'통합'!  AutoiScaling'group에 포함된 모든 인스턴스에 배포'!  AutoiScaling에 의해 생성된 새로운 인스턴스에 배포'

!  Roll'Back'!  이전 버전을 배포'

Applica9on'Revision'1'

Revision'2'

Revision'3'

.'

.'

Revision'n'

.'

Deployments'

Deployment'Configura9on'

Deployment'Group'Instance'1'

Instance'2'

Instance'3'

.'

.'

Instance'm'

.'Specifica9on'

File'

Page 53: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Applica9on'Revision'1'

Revision'2'

Revision'3'

.'

.'

Revision'n'

.'

Deployments'

Deployment'Configura9on'

Deployment'Group'Instance'1'

Instance'2'

Instance'3'

.'

.'

Instance'm'

.'Specifica9on'

File'

Oneiatiai9me'

Halfiatiai9me'

Alliationce'

v2' v1' v1' v1' v1'v1' v1' v1'

v2' v2' v2' v2' v1'v1' v1' v1'

v2' v2' v2' v2' v2'v2' v2' v2'

Custom' v2' v2' v1' v1' v1'v1' v1' v1'

AWS&CodeDeploy&–&배포 설정&

Page 54: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

External&IntegraZon&!  Jenkins:'Upon'a'successful'build,'will'

zip'the'workspace,'upload'to'Amazon'S3,'and'start'a'new'deployment'

!  GitHub:'Deploy'applica9on'revisions'that'are'stored'in'GitHub'repositories'to'instances'

!  Chef:'!  Chef'cookbook'that'will'install'and'start'

the'Agent'!  Using'CodeDeploy'to'orchestrate'

running'cookbooks'and'recipes'with'chef'i'solo'on'each'node'

!  Others:'Travis'CI,'Solano'Labs,'CodeShip,'Saltstack,'Ansible,'Puppet'

AWS&CodeDeploy&–&IntegraZon&AWS&IntegraZon&!  S3:'Store'and'deploy'bundles'!  CodePipeline:'Trigger'your'

deployments'as'part'of'your'overall'orchestra9on'

!  Auto&Scaling:'Deploy'revisions'to'an'Auto'Scaling'Group'!  Exis9ng'Machine'!  New'Machines'(automa9cally)'

!  CloudTrail:'Captures'API'calls'made'by'or'on'behalf'of'CodeDeploy'

!  ElasZc&Load&Balancer&:'Coordinates'deployments'of'new'code'to'instances'that'are'registered'with'load'balancers'

!  Lambda:'Trigger'CodeDeploy'from'Lambda'

Page 55: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodePipeline&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

Page 56: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodePipeline&–&Overview&

!  Delivery'and'Release를 조율:'! 커스텀 릴리즈 워크플로우 모델링'! 자동화'! 파이프라인 상태를 시각적으로 모니터링'

! 그러므로…:'!  사이클을 가속화'(integra9on,'deployment,'delivery)'!  과정과 결과의 일관성을 보장'

!  AWS'및'3rd'party'tool 과의 통합'

Page 57: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodePipeline&–&Typical&workflow&

Page 58: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodePipeline&–&Typical&workflow&

Source' Build' Deploy'in'QA' Test' Deploy'

in'Prod'Trigger' Gate' Gate'

Page 59: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&CodePipeline&–&IntegraZon&

Source' Build' Deploy' Test'

S3'

CodeCommit'

TBD' CodeDeploy'

Beanstalk'

TBD'Code'Change'

Manual'

Trigger'

Custom' Custom' Custom' Custom'

Gate'

Partners' Partners' Partners' Partners'

Manual'

Page 60: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Goal' Design' Build' Ship'

Page 61: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

AWS&Code,&Deployment&&&Management&Services&

Monitor Provision Deploy Test Build Code

Elastic Beanstalk

OpsWorks

Cloud Watch

Cloud Formation

Code Deploy

Code Commit

Code Pipeline

Page 62: Gaming on AWS - 6. AWS 환경에서의 유연하고 신속한 코드 관리 및 배포

Goal' Design' Build' Ship'

Thank you

QuesZons?&