Print
카테고리: [ Amazon Web Services ]
조회수: 37828

1. CodeDeploy - 배포 자동화

aws codedeploy에 대한 이미지 검색결과

 

1-1. AWS IAM(Identity and Access Management)

보통 회사당 하나의 계정을 가지고 AWS를 사용하게 되는데 모든 AWS 사용자들에게 같은 권한을 줄 수는 없습니다. 

따라서 대부분의 사용자 권한 관리 서비스와 마찬가지로 최고 관리자가 root 계정을 관리하고 그 밖의 다른사람들은 각자 계정을 발급받아 제한된 권한을 가지고 서비스를 사용하게 됩니다.

CodeDeploy를 언급하기 전에 IAM을 다시 살펴보는 이유는 CodeDeploy와 같이 사람 대신 어떤 역할을 하는 서비스들도 각자 권한과 역할을 할당받기 때문입니다.

* IAM 개념 구성도

-. 권한 : AWS의 서비스나 자원에 어떤 작업을 할 수 있는지 명시해두는 규칙.

-. 정책 : 권한들의 모음. 사용자나 그룹들에 권한을 집적 적용할 수는 없고, 권한들로 만든 정책을 적용해야 한다. 정책은 사용자,그룹,역할에 적용할 수 있다.

-. 사용자 : AWS의 기능과 자원을 이용하는 객체. 사용자는 AWS Console에 로그인할 수 있는 사람 혹은 자동화되어 실행되는 프로그램일 수도 있다.

        접속하는 사용자인 경우에는 비밀번호가, 프로그램인 경우에는 액세스 키 ID와 액세스 키가 제공.

-. 그룹 : 여러 사용자에게 공통으로 권한을 부여할 수 있게 만들어진 개념.

-. 역할 : 어떤 행위를 하는 객체에 여러 정책을 적용한다는 점에서 사용자와 비슷하지만, 객체가 사용자가 아닌 서비스나 다른 AWS 계정의 사용자라는 점에서 차이가 있다. 보통은 사용자가 아닌 특정 서비스에서 생성한 객체에 권한을 부여하는데 사용 됨.

        서비스에 지정되는 역할은 서비스 역할이라고 부름.

-. 인스턴스 프로파일 : 사용자가 사람을 구분하고 그 사람에 권한을 주기 위한 개념이었다면 인스턴스 프로파일은 EC2 인스턴스를 구분하고 그 인스턴스에 권한을 주기 위한 개념.

        역할을 위한 컨테이너로서 인스턴스 시작 시 EC2 인스턴스에 역할 정보를 전달하는 데 사용 됨. 인스턴스 프로파일은 AWS 콘솔에서 역할을 생성할 때 EC2용 역할로 생성할 경우 자동으로 함께 생성 됨.

 

참고문서 : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html

 

1-2. CodeDeploy 

CodeDeploy는 AWS에서 제공하는 배포 자동화 서비스입니다. 카피스트라노(Capistrano)나 젠킨스(Jenkins)같은 서드파티 배포 자동화 도구보다 좋은 점은 AWS에서 제공하는 서비스이다 보니 AWS 내 다양한 서비스와 쉽게 연동이 가능하다는 점입니다. CodeDeploy는 전장에서 다룬 무중단 배포 기법들인 현재 위치 배포와 Blue/Green 배포 방식을 모두 제공합니다.

* CodeDeploy 작동 절차

1-3. CodeDeploy 구성 요소

-. CodeDeploy Agent

자동으로 배포가 진행 될 EC2 인스턴스에 설치되어 CodeDeploy의 명령을 기다리고 있는 프로그램. Agent는 반드시 설치가 되어있어야 한다.

Agent는 CodeDeploy와 통신을 계속 하다가 배포를 진행하라는 명령을 받으면 AppSpec.yml파일에 있는 절차를 그대로 따라서 배포를 진행.

배포가 완료되거나 실패하면 CodeDeploy에 결과를 전송한다.

 

-. AppSpec.yml

CodeDeploy Agent가 배포 명령을 받았을 때  어떻게 배포를 진행해야 하는지 적어둔 명세서 파일. YAML양식으로 정의돼 있다.

예시)

version: 0.0

#어떤 os를 위한 배포파일인지 명시
os: linux

#Agent는 배포 명령을 받으면 코드 저장소에 있는 프로젝트 전체를 서버의 임시경로로 내려받는다
#내려받은 프로젝트를 서버내 어느 경로로 이동시킬지 명시할 수 있다. 다음과 같이 통째로 옮겨도 되고 파일들을 나눠서 옮길 수도 있다
files:
    - source: /
      destination: /code/deploy/

#배포 시 발생하는 다양한 생명주기 마다 원하는 스크립트를 실행할 수 있게 후크도 제공 된다
hooks:
    BeforeInstall:
        - location: /scripts/UntarResource.sh
        - location: /scripts/UntarDataSet.sh
    AfterInstall:
        - location: /sctipts/RunTest.sh
          #timeout옵션을 사용해 180초 이내에 스크립트가 완료되지 않으면 배포에 실패한 것으로 간주하도록 설정
          timeout: 180
    ApplicationStart:
        - location: /sctipts/RestartServer.sh
          #서버를 재시작하고 최대 240초 동안 기다리는 설정
          timeout: 240
    ValidateService:
        - location: /scripts/ValidateService.sh
          timeout: 30
          #runas옵션을 통해 기본 사용자인 ec2-user가 아닌 RunUserName이라는 다른 user로 실행하도록 한다
          runas: RunUserName

참고문서 : https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file-example.html