애플리케이션 구성과 배포를 자동화하는 OpsWorks

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

OpsWorks는 모든 형태의 애플리케이션 구성과 배포를 자동화해주는 서비스입니다. 실제로 서비스를 제공하는 AWS 리소스가 아니라서 사용 요금이 없습니다.

OpsWorks는 Elastic Beanstalk보다 좀더 자유도가 높습니다. Elastic Beanstalk은 미리 제공되는 애플리케이션 플랫폼만 사용할 수 있지만 OpsWorks는 Chef를 이용하여 어떤 애플리케이션이든 구성과 배포를 자유롭게 할 수 있습니다. CloudFormation으로 모든 부분을 구현하기는 부담스럽고, Elastic Beanstalk보다는 좀더 세세한 설정을 하고 싶은 사용자에게 적합합니다.


그림 24-1 Elastic Beanstalk, OpsWorks, CloudFormation, EC2 비교

DevOps
DevOps(Dev + Ops)는 Chef의 개발사인 Opscode에서 만든 용어입니다. 보통 개발(Development)과 운영(Operation)은 조직이 분리되어 있고, 업무도 따로 진행됩니다. 이렇게 되면 업무 효율이 떨어지고, 커뮤니케이션 비용이 발생합니다. DevOps는 개발과 운영을 하나의 프로세스로 통합하여 자동화된 시스템을 구축하는 것을 뜻합니다. http://www.getchef.com/solutions/devops/

OpsWorks에서 제공하는 Chef 레시피는 다음과 같습니다.

  • Ruby on Rails
  • PHP
  • Node.js
  • Java, Tomcat
  • Nginx
  • MySQL
  • Memcached
  • HAProxy: 오픈소스 TCP/HTTP 로드 밸런서입니다.
  • Ganglia: 클러스터 모니터링 시스템입니다.

기본으로 제공되는 Chef 레시피 이외에도 인터넷에 공개된 Chef 레시피를 이용하면 PostgreSQL, Varnish, CouchDB, Cassandra, MongoDB, Solr, Django와 같은 다양한 데이터베이스, 검색 엔진, 개발 플랫폼 등을 구성할 수 있습니다.


그림 24-2 OpsWorks 구성도

다음은 OpsWorks 기본 개념입니다.

  • 스택(Stack): 스택은 OpsWorks에서 최상위 단위입니다. 스택 안에 여러 개의 레이어가 들어갑니다. 또한, MySQL 데이터베이스, 로드벨런서 등도 포함됩니다.
  • 레이어(Layer): EC2 인스턴스 생성, Elastic IP 할당, 애플리케이션을 구성하는 템플릿입니다. Chef 레시피를 이용하여 설치, 업데이트, 배포 작업을 정의합니다. 그리고 로드 기반, 시간 기반 Auto Scaling 설정도 포함됩니다.
  • 인스턴스(Instance): 레이어에 포함된 EC2 인스턴스입니다. 레이어에 정의한 Chef 레시피대로 애플리케이션이 설치됩니다.
  • App: 사용자가 작성한 소스의 배포 단위입니다. S3 버킷, HTTP 및 Subversion, Git 저장소를 사용하여 배포할 수 있습니다.
  • 시간 기반(Time-based): EC2 인스턴스가 생성, 시작, 정지되는 날짜와 시간을 정의할 수 있습니다.
  • 로드 기반(Load-based): CPU 사용률, 메모리 사용량 등에 따라 EC2 인스턴스를 생성하거나 삭제합니다.
  • Chef 쿡북(Cookbook): 레시피, 속성, 템플릿, 라이브러리 등의 묶음입니다. 쿡북은 애플리케이션 단위로 구성합니다. 쿡북 저장소로 S3 버킷, HTTP, Subversion, Git을 사용할 수 있습니다.
  • Chef 레시피(Recipe): 애플리케이션 설치 및 업데이트, 소스 배포 방법이 정의된 파일입니다.
  • 운영체제: Amazon Linux, Ubuntu 12.04 LTS, 사용자가 만든 AMI를 지원합니다. 단 Windows는 아직 지원하지 않습니다.


그림 24-3 OpsWorks와 Chef


그림 24-4 OpsWorks 작업 흐름


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.