Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ansible과 CloudFormation을 이용한 배포 자동화

5,027 views

Published on

AWSKRUG Winter Meetup
이정행 / VCNC

Published in: Technology

Ansible과 CloudFormation을 이용한 배포 자동화

  1. 1. Ansible과 CloudFormation을 이용한 배포 자동화 VCNC 개발팀 이정행 AWS 한국 유저 그룹 (#awskrug) 2014.12.20
  2. 2. 발표자 소개 • 이정행 (@eincs) • VCNC에서 비트윈을 개발하고 있는 개발자 • 서버팀에서 잡다한 것을 개발 중 • http://eincs.com
  3. 3. 비트윈 • 커플들을 위한 모바일 서비스 • 아이폰, 안드로이드 어플리케이션 제공 • 채팅, 기념일, 사진, 메모, 캘린더 기능 제공 • 전 세계에서 1000만+ 다운로드 (as of 2014.12) • http://between.us • http://engineering.vcnc.co.kr
  4. 4. 비트윈 서버 구조 • Java로 작성되어 있음 • 데이터 저장소로 HBase를 사용함 • Haeinsa를 통해 HBase에 접근시 ACID 트랜잭션 이용 • Thrift 서비스를 Netty위에 올려서 서비스함 • 채팅의 경우, Thrift를 이용해 클라이언트와 통신함 • AWS Tokyo리전에서 운영되고 있음
  5. 5. EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 Master Master Backup EC2 채팅서버 API서버 SNS SES SQS S3 CloudFront CloudWatch IAM
  6. 6. 누구나 다 아는 AWS에 웹서비스를 구축하는 이야기
  7. 7. EC2 웹서비스를 띄우기 위해 EC2 인스턴스를 만들어보았습니다. 설정해야 하는 값들: InstanceType, AMI, AvailabilityZone,
 SecurityGruop, Volumes, KeyName Tags…
  8. 8. EC2 데이터를 저장하기 위해서 RDS를 이용하기로 하였습니다. 설정해야 하는 값들: DBName, DBSecurityGroup, Engine, EngineVersion, MultiAZ, MaintenanceWindow, AllocatedStorage, AllowMajorVersonUpgrade… RDS
  9. 9. RDS EC2 EC2 트래픽이 많아져서 EC2를 더 띄웠습니다. ELB를 통해 로드밸런싱을 합니다. 설정해야 하는 값들: ELB Name, AvailabilityZone, LIsteners,CrossZone, ConnectionDrainingPolicy, LBCookieStickinessPolicy, Tags…
  10. 10. RDS EC2 EC2 트래픽이 많아져서 EC2를 더 띄웠습니다. ELB를 통해 로드밸런싱을 합니다. 설정해야 하는 값들: ELB Name, AvailabilityZone, LIsteners,CrossZone, ConnectionDrainingPolicy, LBCookieStickinessPolicy, Tags… 손토스케일링™ (hand)
  11. 11. RDS EC2 EC2 트래픽이 많아져서 EC2를 더 띄웠습니다. ELB를 통해 로드밸런싱을 합니다. 설정해야 하는 값들: ELB Name, AvailabilityZone, LIsteners,CrossZone, ConnectionDrainingPolicy, LBCookieStickinessPolicy, Tags… 손토스케일링™ = 서버 개발자가 잠을 잘 수 없다.
  12. 12. RDS EC2 EC2 트래픽에 따라 유연하게 대응하기 위해 AutoScalingGroup을 이용하기로 하였습니다. 설정해야 하는 값들: AvailabilityZone, Cooldown,
 Max/Min/DesiredCapacity, LoadBalancerName, ScalingPolicy…
  13. 13. RDS EC2 EC2 어떤 매트릭에 대해 알람을 걸 것인지 결정하고
 알람을 하나하나 등록해야합니다. 혹시 있을 장애 상황에 빠르게 대응하기 위해 CloudWatch를 이용하여 알림을 받기로 하였습니다.
  14. 14. RDS EC2 EC2 VPC에서만 사용 가능한 인스턴스 타입이 있을 수 있습니다. VPC안에 배포하기로 결정했습니다.
  15. 15. RDS EC2 EC2 VPC에서만 사용 가능한 인스턴스 타입이 있을 수 있습니다. VPC안에 배포하기로 결정했습니다. 전부 새로 만들면서 VPC 관련 설정도 해줘야…
  16. 16. RDS EC2 EC2 VPC에서만 사용 가능한 인스턴스 타입이 있을 수 있습니다. VPC안에 배포하기로 결정했습니다. 함정 카드 발동: 생각보다 설정해야할 게 많다!
  17. 17. 비트윈 서버 로그 수집 서버 비트윈 채팅 서버 이벤트박스 서버 공지사항 서버 더보기탭 서버 광고 배너 서버 광고 알림 서버스티커 스토어 모바일쿠폰샵 OAuth 서버 리딤 서버 Kharon 서버 비트윈 Worker 각종 프리젠터 …… 운영하는 서버의 종류가 많아진다면?
  18. 18. 비트윈 서버 로그 수집 서버 비트윈 채팅 서버 이벤트박스 서버 공지사항 서버 더보기탭 서버 광고 배너 서버 광고 알림 서버스티커 스토어 모바일쿠폰샵 OAuth 서버 리딤 서버 Kharon 서버 비트윈 Worker 각종 프리젠터 …… 운영하는 서버의 종류가 많아진다면? 함정 카드 발동: 만들고 설정해야 할게 몇 개인지 세기도 어렵다
  19. 19. RDS EC2 EC2 인스턴스의 타입을 새로 나온 타입으로 바꾸고 싶어요. 원래 m1.small(paravirtual)로 이용하고 있다가 t2.micro(hvm)을 쓰고 싶어요.
  20. 20. RDS EC2 EC2 인스턴스의 타입을 새로 나온 타입으로 바꾸고 싶어요. 원래 m1.small(paravirtual)로 이용하고 있다가 t2.micro(hvm)을 쓰고 싶어요. m1.small을 쓰고 있었는데 t2.micro로 바꾸고 싶다.
  21. 21. RDS EC2 EC2 인스턴스의 타입을 새로 나온 타입으로 바꾸고 싶어요. 원래 m1.small(paravirtual)로 이용하고 있다가 t2.micro(hvm)을 쓰고 싶어요. 함정 카드 발동: paravitual AMI는 hvm인스턴스에서 쓸 수 없다!
  22. 22. 함정 카드 리스트 • 생각보다 설정 할 것들이 많다. • 비슷한 것들을 반복해서 만들어야 할때도 있다. • 만들다가 실수로 설정을 빼먹는다면? • 여러 사람에게 지식을 알려주기가 힘들다. • AMI를 새로 만들어야할 때도 있다.
  23. 23. 이것들로 해결 할 수 있다! 서버 구성 관리 소프트웨어AWS 구성 관리 서비스
  24. 24. CloudFormation
  25. 25. CloudFormation • 인프라 형상 관리 • JSON을 이용해 AWS 인프라를 소스코드처럼 관리 • 각종 AWS 컴포넌트를 설정에 따라 자동으로 생성할 수 있음 • 인프라 설정을 명시적 지식으로 만들기
 
 
 

  26. 26. sticker-store.json aws console EC2 RDS SQS S3 CloudWatch Launch Config 입력 리소스 생성
  27. 27. sticker-store.json aws console EC2 RDS SQS S3 CloudWatch Launch Config 입력 리소스 생성 사람이 관여하는 부분 적음 = 실수 방지
  28. 28. sticker-store.json Launch Config sticker-admin.json Launch Config notice-server.json Launch Config sticker-store stack sticker-admin stack notice-server stack
  29. 29. sticker-store.json Launch Config sticker-admin.json Launch Config notice-server.json Launch Config sticker-store stack sticker-admin stack notice-server stack 만들어진 리소스들은 스택이라는 단위로 관리된다.
  30. 30. sticker-store.json Launch Config sticker-admin.json Launch Config notice-server.json Launch Config sticker-store stack sticker-admin stack notice-server stack 스택을 수정하거나 삭제가 가능하다.
  31. 31. CloudFormation Console
  32. 32. CloudFormation 템플릿의 구조 sticker-store.json
  33. 33. 템플릿으로 스택을 만들 때 입력받을 파라메터들을 정의 이 파라메터의 값들을 이용해 리소스들의 설정들을 조정할 수 있다.
  34. 34. 스택을 만들때 생성할 AWS리소스들과 설정 값들을 정의 (AutoScalingGroup, ELB …)
  35. 35. 스택을 만든 후 AWS콘솔 상에서 결 과로 보여줄 값들을 정의
  36. 36. Parameters
  37. 37. Resources
  38. 38. CloudFormation Console
  39. 39. CloudFormation의 추가 기능 • Mapping을 이용하여 조건에 따라 다른 값 설정 가능 • Condition를 이용하여 조건에 따라 리소스의 생성 여부나 리소스의 설정값을 경우에 따라 다르게 할 수 있음 • 여러 연산자(Fn::Join, Fn::Equals…)를 이용하여 데이터를 조합하여 새로운 데이터를 만들어 낼 수 있음 • 뭔가 업데이트 되는 경우 Notification로 알려주는 기능 • StackPolicy를 이용해 특정 리소스의 변경을 막는 기능
  40. 40. 스택을 업데이트 하는 경우 • 템플릿을 변경하거나 원래 있던 템플릿은 그대로 사용하면 서 파라메터만 변경하는 식으로 업데이트가 가능 • 스택이 관리하던 리소스들의 상태가 업데이트되거나 지워졌 다가 새로 만들어 질 수 있음 • 리소스가 중단없이 업데이트 될지, 지웠다가 새로 만들어질 지는 변경되는 값에 따라 다르며 문서에 명시되어 있음 • AutoScalingGroup의 경우 UpdatePolicy를 지정하여 자동 으로 롤링 업데이트를 시킬 수 있음
  41. 41. CloudFormation 노하우 • 처음에는 만들 수 있는 Stack 갯수가 20개로 제한되어 있지 만 늘릴 수 있음 • 하나의 템플릿에 너무 많이 담으려고 할 필요가 없음
 (여러 Stack을 조합하여 전체 시스템을 구성하기) • Output을 잘 정의하면 다른 스택을 만들때 들어가는 Parameter값을 쉽게 작성 할 수 있음
  42. 42. CloudFormation의 불편한 점 • JSON형태로 되어 있어서 주석을 쓸 수가 없음 • 비슷한 구성의 스택을 만드는 경우 반복되는 코드가 많아짐 • 최신 기능들을 제공하지 않는 경우가 있음 • 기존에 만들었던 인프라를 CloudFormation으로 관리하려 면 전부 다시 만들어야함
  43. 43. 참고할만한 링크 • AWS CloudFormation Template
 http://aws.amazon.com/ko/cloudformation/aws- cloudformation-templates/ • CloudFormation Template Snippets
 http://docs.aws.amazon.com/AWSCloudFormation/ latest/UserGuide/CHAP_TemplateQuickRef.html • CloudFormation Template Reference
 http://docs.aws.amazon.com/AWSCloudFormation/ latest/UserGuide/template-reference.html
  44. 44. 정리하기 • CloudFormation은 좋으며 시작하기도 어렵지 않음 • 인프라 구성을 소스코드 처럼 관리 가능함 (리뷰도 가능) • 다른 사람에게 말로 구성에 대해 설명할 필요 없음 • 사람이 관여하는 부분이 적어 실수 방지 가능 • CloudFormation 꼭 쓰세요. 두 번 쓰세요.
  45. 45. Ansible
  46. 46. Ansible • 서버 형상 관리 • yaml을 이용해 서버 설정을 소스코드 처럼 관리 • 설정을 이용해 서버 프로비저닝을 자동으로 할 수 있음 • 서버 설정을 명시적 지식으로 만들기 • Python으로 작성, Agent가 필요 없음
 

  47. 47. playbook.yml Ansible 설정을 만들고 특정 서버에 대해 ansible-playbook을 실행시키면 서버 구성을 자동으로 할 수 있다
  48. 48. playbook.yml
  49. 49. 제품 DSL Agent 개발언어 Ansible yml 없음 (SSH) Python Chef DSL (Ruby기반) 필요 Ruby Puppet DSL 필요 Ruby 유명한 서버 구성 소프트웨어와의 비교
  50. 50. 제품 DSL Agent 개발언어 Ansible yml 없음 (SSH) Python Chef DSL (Ruby기반) 필요 Ruby Puppet DSL 필요 Ruby 비교적 간단한 형태의 yml을 이용해 정의를 하므로 쉽게 배울 수 있다.
  51. 51. 제품 DSL Agent 개발언어 Ansible yml 없음 (SSH) Python Chef DSL (Ruby기반) 필요 Ruby Puppet DSL 필요 Ruby Agent를 미리 프로비저닝 할 필요 없어서 편리하다.
  52. 52. 제품 DSL Agent 개발언어 Ansible yml 없음 (SSH) Python Chef DSL (Ruby기반) 필요 Ruby Puppet DSL 필요 Ruby 개발 언어에 따라 배포하는 방식도 달라질 수 있다.
  53. 53. 제품 DSL Agent 개발언어 Ansible yml 없음 (SSH) Python Chef DSL (Ruby기반) 필요 Ruby Puppet DSL 필요 Ruby 함정 카드 발동: 그 날 따라 gem이 엄청 느렸습니다… 개발 언어에 따라 배포하는 방식도 달라질 수 있다.
  54. 54. playbook.yml SSH로 붙어 playbook에 설정된 값에 따라 Python 실행 파일을 만들어 서버에 업로드 한뒤 실행함
  55. 55. playbook.yml SSH로 붙어 playbook에 설정된 값에 따라 Python 실행 파일을 만들어 서버에 업로드 한뒤 실행함 따로 Agent 설치과정 없이 EC2인스턴스 프로비저닝 가능
  56. 56. Ansible에 대한 지식 없이 서버 설정할 수 있게 할 수 있음
  57. 57. 정리하기 • Ansible은 좋음 • 서버 구성을 소스코드 처럼 관리 가능함 (리뷰도 가능) • Agent를 따로 설치할 필요가 없어 시작이 비교적 간단함 • 잘 활용하면 Ansible을 잘 몰라도 서버 구성을 할 수 있음 • Puppet, Chef에 대한 좋은 대안이 될 수 있음
  58. 58. Ansible과 CloudFormation을 이용해 AWS에 웹서비스를 구축하는 이야기
  59. 59. 배포 서버 바스티온 Ansible Playboook들은 git으로 관리되며 배포 서버에 clone되어 있음
  60. 60. 배포 서버 바스티온 EC2 (SNAPSHOT) 새로운 AMI를 만들기 위해 EC2인스턴스를 띄움
  61. 61. 배포 서버 바스티온 EC2 (SNAPSHOT) 배포서버에서 Ansible을 실행시켜 EC2를 프로비저닝
  62. 62. 배포 서버 바스티온 EC2 (SNAPSHOT) 프로비저닝된 EC2로 AMI 생성AMI
  63. 63. 배포 서버 바스티온 EC2 (SNAPSHOT) 프로비저닝된 EC2로 AMI 생성AMI
  64. 64. 배포 서버 바스티온 EC2 (SNAPSHOT) 미리 준비한 템플릿으로 CloudFormation 스택 생성 AMI webservice.json
  65. 65. 배포 서버 바스티온 EC2 (SNAPSHOT) 필요한 모든 구성이 알아서 만들어짐AMI webservice.jsonLaunch Config
  66. 66. 배포 서버 바스티온 EC2 (SNAPSHOT) 필요한 모든 구성이 알아서 만들어짐AMI webservice.jsonLaunch Config 끝.
  67. 67. 배포 서버 바스티온 EC2 (SNAPSHOT) 필요한 모든 구성이 알아서 만들어짐AMI webservice.jsonLaunch Config 리소스 설정에 대해 사람이 관여하는 부분이 적음
  68. 68. 함정 카드 리스트 • 생각보다 설정 할 것들이 많다. • 비슷한 것들을 반복해서 만들어야 할때도 있다. • 만들다가 실수로 설정을 빼먹는다면? • 여러 사람에게 지식을 알려주기가 힘들다. • AMI를 새로 만들어야할 때도 있다.
  69. 69. 함정 카드 리스트 • 생각보다 설정 할 것들이 많다. • 비슷한 것들을 반복해서 만들어야 할때도 있다. • 만들다가 실수로 설정을 빼먹는다면? • 여러 사람에게 지식을 알려주기가 힘들다. • AMI를 새로 만들어야할 때도 있다. 모두 CloudFormation, Ansible로 해결 가능!
  70. 70. 결론
  71. 71. • CloudFormation과 Ansible은 정말 좋습니다. • 서버와 인프라 구성에 대한 지식을 명시적으로 만듭니다. • 서버 및 인프라 프로비저닝할 때 실수를 줄여줍니다. • 문서화가 잘되어 있어서 시작하기에도 어렵지 않습니다.
  72. 72. Thank You

×