이번 월간 웨비나에서는 AWS 클라우드를 통해 어떻게 손쉽게 소프트웨어를 개발하고, 배포하는 과정을 자동화 할 수 있는지를 알아 봅니다. 이를 위해 Amazon.com의 소프트웨어 개발 과정 상의 경험과 이를 토대로 만들어진 AWS CodeDeploy와 CodePipeline 서비스를 소개해 드리고, 이를 통해 EC2 인스턴스 뿐만 아니라 기존 서버에 손쉽게 배포하는 방법을 알려드립니다. 본 세션을 통해 클라우드를 통한 민첩하고 빠른 개발 및 배포를 통해 진화된 데브옵스(DevOps) 프로세스를 정립할 수 있는 방법을 안내해 드립니다.
8. “아마존닷컴은 10년전 (1995년)
웹 서버와 데이터베이스 백엔드를
가지는 모놀리식(Monolithic)
애플리케이션이었습니다.”
A Conversation with Werner Vogels , 2006
http://queue.acm.org/detail.cfm?id=1142065
10. “5년전(2001년) 아마존은 주요한 아키텍쳐 변화가 있었는데
2 티어(tier)기반에서 서로 다른 애플리케이션 기능을
제공하는 분산 서비스 플랫폼으로 변화하였습니다…
여러분이 지금 Amazon.com의 첫화면에 들어온다면, 그
페이지를 생성하기 위해 100여개가 넘는 서비스를
호출하여 만들고 있습니다.”
A Conversation with Werner Vogels , 2006
11. Amazon.com - 서비스 지향 아키텍쳐 (SOA)
Primitives
Single-purpose
API Interfaced
Highly decoupled
“Microservices”
12. 애플리케이션을 완성하기 위한 원료 혹은 재료로서 이를 빌딩
블록으로 조립하여, 원하는 서비스를 만들 수 있는 구성
요소를 말한다. 마치 레고블럭을 조립하여 우리가 원하는
모양의 레고를 만들 수 있는 것과 같은 원리
primitives
14. “넷플릭스는 수백개의 마이크로서비스를 AWS 클라우드 기반으로
운영하고 있는 것으로 유명하다. 또한, 인터널 API를 기반으로
가벼운 REST 프로토콜을 활용하여 서비스 통신을 하고 있으며,
Netflix Internal Web Service Framework(NIWS) 그리고 이러한
다양한 서비스를 발견하기 위한 목록 관리를 위한 Eureka,
서비스간 유연한 소통을 위한 Ribbon 등 클라우드 내 서비스
운영을 위한 수십개의 오픈 소스 프로젝트를
http://netflix.github.io/ 에 공개하고 있다.”
http://techblog.netflix.com/2013/01/announcing-ribbon-tying-netflix-mid.html
16. How to DevTeam?
“제품 개발팀을 작게 유지하라 이렇게 하면
프로젝트를 실제로 실행가능하고 측정가능한 단위로
쪼개야만 하게 된다. 아마존의 대부분의 새로운
기능들과 서비스는 두 판의 라지 사이즈 피자로 먹일
수 있는 팀에 의하여 개발되었다.”
제프베조스의 2006년 11월 Business Week 인터뷰
17. 각 팀이 분산된
민첩하면서, 독립적인,
신뢰하고, 오너쉽을
가진 서비스 팀
“DevOps”
피자 두판의 팀이란?
18. 작은 팀과 서비스에게 필요한 개발 도구?
developers delivery pipelineservices
???
19. • 셀프 서비스 지향
• 기술 독립적
• 베스트 프랙티스 장려
• 단일 목적의 서비스
DevOps 도구의 특징
20. Amazon 내부 시스템
아폴로- 배포 서비스
파이프라인 – 출시 자동화
• Deployment service
• No downtime deployments
• Health tracking
• Versioned artifacts and rollbacks
• Continuous delivery
• Automated release process
• Faster and more reliable releases
• >90% of teams
22. 단지 기다리고 있음
WaitWrite
Code WaitBuild
Code WaitDeploy
to Test
Deploy
to
Prod
Mins Days Mins Days Mins Days Mins
23. 단지 기다리고 있음
WaitWrite
Code WaitBuild
Code WaitDeploy
to Test
Deploy
to
Prod
Weeks
Mins Days Mins Days Mins Days Mins
24. 단지 기다리고 있음
WaitWrite
Code WaitBuild
Code WaitDeploy
to Test
Deploy
to
Prod
Weeks
Mins Days Mins Days Mins Days Mins
25. 마이크로서비스 개발 사이클
developers delivery pipelinesservices
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
releasetestbuild
26. Amazon 내부 시스템
“수천명의 아마존 개발자들은 매일 Apollo를
사용하여, Java, Python, Ruby 앱을 웹
서비스로 네이티브 코드 서비스로 배포하고
있습니다. 지난 12개월 동안 Apollo는
5천만번이 넘는 개발, 테스트 및 정식
서버로 배포가 진행되었습니다. 이는 초당
한번 평균 한번 이상의 배포횟수입니다. “
Werner Vogels, The Story of Apollo - Amazon’s Deployment Engine, 2014
http://www.allthingsdistributed.com/2014/11/apollo-amazon-deployment-engine.html
30. AWS CodeDeploy – 서울 리전 사용 가능
• 손쉽고 믿을 수 있는 배포 방법
• 다양한 배포 옵션 제공
• AWS 외부 서버 배포도 가능
Test
CodeDeployv1, v2, v3
Production
Dev
application
revisions
deployment groups
34. 단계 2. 배포 인스턴스 선택
Agent Agent Agent
Staging
Agent Agent
Agent Agent
Agent
Agent
Production
Deployment groupDeployment group
인스턴스 모음:
• Auto Scaling group
• Amazon EC2 tag
• On-premises tag
35. 단계 3. 배포 하기
aws deploy create-deployment
--application-name MyApp
--deployment-group-name TargetGroup
--s3-location bucket=MyBucket,key=MyApp.zip
AWS CLI & SDKs
AWS Console
CI / CD Partners
GitHub
36. 배포 설정 방법
v2 v2 v2 v2 v2 v2 v2 v2All-at-once
Min. healthy hosts = 0
v2 v2 v2 v2 v1 v1 v1 v1Half-at-a-time
Min. healthy hosts = 50%
v2 v2 v1 v1 v1 v1 v1 v1[Custom]
Min. healthy hosts = 75%
v2 v1 v1 v1 v1 v1 v1 v1One-at-a-time
Min. healthy hosts = 99%
37. 다운타임 없는 롤링 업데이트(Rolling Update)
v1v1 v1
Load Balancer
38. 다운타임 없는 롤링 업데이트(Rolling Update)
v1v2 v1
Load Balancer
39. 다운타임 없는 롤링 업데이트(Rolling Update)
v2v2 v1
Load Balancer
40. 다운타임 없는 롤링 업데이트(Rolling Update)
v2v2v2
Load Balancer
41. 다운타임 없는 롤링 업데이트(Rolling Update)
v2v2 v2
Load Balancer
47. AWS CodePipeline
• 각자의 배포 단계에 맞게 파이프라인 시각적 구성 가능
• 빠르고 신뢰성 있는 배포 및 제품 테스트 시간 감소
• 코드 변경에 민감하게 자동 파이프라인 실행
• 서드 파티 도구와 연계 가능
Build
1) Build
2) Unit test
1) Deploy
2) UI test
Source Beta Production
1) Deploy
2) Perf test
Gamma
1) Deploy canary
2) Deploy region 1
3) Deploy region 2
1) Pull
53. AWS CodeCommit
• Git 코드 저장소 제공
• Amazon S3의 확장성, 가용성 및 내구성 제공
• 고객의 요구에 맞는 암호화 기능 제공
git pull/push CodeCommit
Git objects in
Amazon S3
Git index in
Amazon
DynamoDB
Encryption key
in AWS KMS
SSH or HTTPS
54. AWS 코드 서비스 기반 DevOps 프로세스
1. Github에서 EC2 인스턴스로 코드 배포하기
2. CodeCommit에서 ElasticBeanstalk으로 코드 배포하기
3. 서드 파티 Test 단계 추가 및 파이프라인 변경하기
https://youtu.be/v-o3UafL1hU
57. ChatOps란?
• “Putting tools right in the middle of the conversation”
• Jesse Newland, GitHub
• Source: https://speakerdeck.com/jnewland/chatops-at-github
• “ChatOps is a collaboration model that connects people,
tools, process, and automation into a transparent workflow.”
• Sean Regan, Atlassian
• Source: http://blogs.atlassian.com/2016/01/what-is-chatops-adoption-guide/
• “To move fast and maintain stability it’s important to have a
culture of automation, measurement and sharing.”
• Jason Hand, Victorops Author of ChatOps For Dummies
• Source: http://www.slideshare.net/VictorOps/chatops
66. AWS Lambda와 Slack을 이용한 Chat 구현
https://aws.amazon.com/ko/blogs/korea/slack-devops-with-aws-lambda-and-eb/
67. What’s AWS Lambda?
높은 확장성 및
빠른 서비스 연동
서버 필요 없이
코드만 배포
함수 실행 시
100ms 단위 과금
서버 없는, 이벤트 처리 방식의 컴퓨팅 서비스
AWS Lambda = 클라우드 함수 기반 마이크로서비스
68. AWS Lambda : 동작 원리
Bring your own code
• Node.js, Java, Python
• Java = Scala Clojure 등의
어떠한 JVM기반 언어.
• Bring your own libraries
유연한 호출 경로
• Event 기반 호출 옵션 (여러
AWS 서비스들과 통합)
• REST API 호출 가능 (Amazon
API Gateway와 연동)
단순한 자원 모델
• 128MB부터 1.5GB까지 64MB
단위로 메모리 설정
• 할당된 메모리에 비례하여
CPU 및 네트웍 자원 할당
• 실제 사용량 내역 보고
효과적인 권한 통제
• AWS IAM (Identity and
Access Management) Role을
사용한 실행 권한 설정
• AWS 이벤트 소스에 대한
자원 정책