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

Post on 15-Apr-2017

2.309 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

�����sdyang@amazon.com'Solu9ons'Architect'

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

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

Why?&

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

What’s&your&goal?&

Goal'

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

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

Goal' Design' Build'

Feedback&

Goal' Design' Build' Ship'

왜 유연해야 하는가?&

개발자들에게 배포란?

“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

개발자들에게 배포란?

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

Mitch'Garnaat,'Scopely'

Scopely?

•  4'consecu9ve'#1'games'

•  35'million'users'

•  Billions'requests/day'

•  100%'on'AWS'

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

Blue/Green&Deployment&

produc=on(traffic(

Blue/Green&Deployment&

Install'new's/w'

produc=on(traffic(

Blue/Green&Deployment&

Acceptance'Test'

produc=on(traffic(

Blue/Green&Deployment&

produc=on(traffic(

Blue/Green&Deployment&

produc=on(traffic(

Install'new's/w'Test'

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

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

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

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

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

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

준비&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

확장&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

롤백&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

전환&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

배포 완료&

produc=on(traffic(

Auto'Scaling'group'Load'Balancer'

New(Launch(Configura=on(

신속한 배포&

1970s&S&Waterfall&모델&

Goal'Design'

Build'

Ship'Time'

1990s&–&VS모델&Goal'

Design' Build' Ship'

Time'

Goal'

Design'

Design' Ship'

Ship'

Ship'

Ship'Feedback'

Feedback'

Feedback'

Feedback'

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

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

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

2000s&–&Lean&&&Agile&

Goal' Design' Build' Ship'

Time'

Goal' Design' Build' Ship'

Goal' Design' Build' Ship'

SoHware&Development&LifeCycle&

Goal' Design' Build' Ship'

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

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

Monitor'

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

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

Monitor'

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

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

Monitor'

Con9nuous'Integra9on'

Con9nuous'Delivery'

Con9nuous'Deployment'

Con9nuous'Feedback'

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

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

ExisZng&Ecosystem&Con9nuous'Everything(

AWS&Ecosystem&

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

AWS'CodePipeline'

AWS'CodeCommit'

AWS'CodeDeploy'

Services&–&Overview&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

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

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

AWS&CodeCommit&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

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

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

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

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

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

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

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

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

AWS&CodeCommit&–&Git:&Repositories&

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

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

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

My&&Local&Repo&

Albert’s'Local'Repo'

Stephan’s'Local'Repo'

Suzi’s''Local'Repo'

Remote'Repository'

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'

'

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

1' Create'a'repository'

2' Clone'it'locally'

3' Commit'

4' Push'

AWS&CodeDeploy&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

AWS&CodeDeploy&–&Overview&

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

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

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

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'

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)'

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'

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'

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'

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&–&배포 설정&

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'

AWS&CodePipeline&

AWS'CodeDeploy'AWS'CodeCommit'

AWS'CodePipeline'

AWS&CodePipeline&–&Overview&

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

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

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

AWS&CodePipeline&–&Typical&workflow&

AWS&CodePipeline&–&Typical&workflow&

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

in'Prod'Trigger' Gate' Gate'

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'

Goal' Design' Build' Ship'

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

Monitor Provision Deploy Test Build Code

Elastic Beanstalk

OpsWorks

Cloud Watch

Cloud Formation

Code Deploy

Code Commit

Code Pipeline

Goal' Design' Build' Ship'

Thank you

QuesZons?&

top related