ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS Elastic Beanstalk를 이용한 무중단 배포 및 custom container 설정
    amazon web service 2014. 3. 5. 09:00

    AWS Elastic Beanstalk란?
    AWS 상에 애플리케이션을 배포하기만 하면 용량 프로비저닝, 로드 밸런싱, Auto Scaling, 애플리케이션 상태 모니터링에 대한 배포 정보를 자동으로 처리해주는 서비스입니다. 해당 애플리케이션 운영에 필요한 AWS 리소스 정보를 통합해서 볼 수 있으며 각 개별 리소스에 자유롭게 접근이 가능합니다. .NET, JAVA, Node.js, PHP, Python, Ruby 등 다양한 애플리케이션의 운영이 가능합니다.


    AWS Elastic BeansTalk의 장점
    한 번의 명령으로 모든 Amazon EC2 인스턴스에 있는 애플리케이션 서버를 빠르게 재시작 
    새로운 애플리케이션 버전을 쉽게 배포 가능
    서버에 로그인하지 않고도 각 서버 로그파일의 내용 확인이 가능
    추가 비용 없음. 애플리케이션 운영에 사용된 AWS 리소스에 대한 비용만 발생하고 BeansTalk 자체에 대한 사용요금은 없음.


    AWS Elastic BeansTalk 사용방법.
    Elastic Beanstalk 에서의 environment의 개념 및 설정.
    Application : 빈스토크에서 사용되는 컴포넌트들, environment, 배포할 프로그램 버전 등을 포함하는 논리적인 개념의 컬렉션.
    Application version : 각 어플리케이션 버전이 참조하는 배포가능한 코드
    environment : AWS 자원에 배포된 어플리케이션 버전. 하나의 environment은 하나의 application version만 실행할 수 있음. 같은 application version 을 실행하는 동일한 environment를 여러개 실행하는건 가능.


    배포도구인 eb의 사용방법
    개발중인 git 저장소에서 배포도구인 eb를 이용하여 직접 배포할 수 있음.
    git 저장소로 이동해서 eb 도구 초기화
    eb init 를 실행.
    AWS Access Key ID, AWS Secret Access Key를 입력하고나서
    생성할 application 이름을 입력
    선택한 application에서 사용할 environment 이름 입력

    설정한 environment정보를 이용해 application을 실행하기위해서 
    eb start 실행.

    설정한 environment 종료
    eb stop

    beanstalk의 application을 삭제
    eb delete 

    하나의 application에 여러개의 environment가 있을 경우 작업에 사용하는 environment를 선택하는 명령
    하나의 git 저장소에서 environment 사이를 왔다갔다 하면서 작업이 가능함.
    eb branch environment이름

    application의 로그 정보
    eb logs

    application의 이벤트 정보
    eb events

    개발한 소스를 현재 environment에 배포. 현재 commit된 코드를 기준으로 배포가 진행됨.
    git aws.push


    배포한 environment의 소스를 업데이트하거나 재배포할때 사용하지만 여러 environemnt를 사용할 경우 environment설정이 초기화되는 문제가 있음.
    eb update
    eb push



    Elastic BeansTalk의 컨테이너 환경설정 변경
    어플리케이션을 실행하는 컨테이너의 환경설정을 사용자가 원하는 설정으로 변경할 수 있음.
    EC2 인스턴스에 사용하는 컨테이너의 환경설정 파일을 직접 복사한 후 컨테이너를 재시작함으로써 컨테이너 환경설정이 가능함.

    git 저장소에 .ebextensions 라는 폴더를 만듬.
    mkdir .ebextensions
    cd .ebextensions

    application 배포 후 어떤 명령을 수행할지 정하는 
    .config 파일을 생성함. 여러개의 config 파일을 만들수 있고 config 파일이름의 알파벳 순서대로 명령이 실행됨.
    vi myapp.config

    myapp.config 파일 내용(Ruby의 경우)

    container_commands:
      01copyconfig_command:
        command: cp .ebextensions/config.erb /usr/share/ruby/1.9/gems/1.9.1/gems/passenger-4.0.20/resources/templates/standalone/config.erb
        ignoreErrors: true
      02stopapp_command:
        command: ps -ax | grep  nginx | awk '{print $1}' | xargs kill 
        ignoreErrors: true
      03restartapp_command:
        command: /etc/init.d/passenger start
        ignoreErroes: true 

    config파일에 명시된 명령은 알파벳 순서대로 실행되므로 01, 02, 03의 순서대로 실행됨.
    01copyconfig_command 에서 환경설정 파일을 복사하고(배포할 파일은 .ebextensions 폴더 하위에 들어 있어야 함.)
    02stopapp_command 에서 실행중인 서버를 중지한 다음 
    03restartapp_command 에서 서버를 재시작함.


    Elastic BeansTalk의 무중단 배포
    1. URL swap를 이용한 배포
    새로운 어플리케이션 버전을 이용해서 environment를 실행한 다음.
    Beanstalk의 application 메뉴에서 URL swap 기능을 사용해서 2개의 environment간의 url을 변경할 수 있음.
    이렇게 되면 기존에 접속해 있던 사용자는 이전 environment를 이용해서 서비스를 이용하게 되고
    새로 접속하는 사용자는 새로운 environment를 이용한 서비스를 이용하게 되면서 시스템 중단 없이 새로운 버전의 어플리케이션을 배포할 수 있음.

    2. Rolling update를 이용한 배포.
    하나의 environment에 여러개의 ec2 인스턴스가 있을 경우 rolling update를 이용해서 새로운 프로그램 배포
    environment - configuration - Rolling Updates 설정에서 설정가능함.
    사용하게되면 application을 업데이트할때 environment의 모든 EC2 서버들을 한꺼번에 업데이트하지 않고, 일부 EC2 서버들은 운영중인 상태로 유지하면서 새로운 버전의 어플리케이션으로 업데이트 함.

    댓글

Designed by Tistory.