[AWS] EC2-CodeDeploy Appspec.yml에 대하여

주형(Jureamer)·2022년 6월 11일
1

개요


EC2에서 CodeDeploy를 이용했을 때 appspec.yml에 대해 자세히 알아보지 않고 사용하다가
해당 글과 같이 나중에 에러 처리하는 데 애를 먹어 다시 한 번 정리 해보려고 합니다.


Appspec.yml이란?


  • appspec.yml파일은 CodeDeploy에서 배포를 관리하는 데 사용하는 YAML 형식 또는 JSON 형식의 파일입니다.
  • appspec.yml파일은 파일에 정의된 일련의 수명 주기 이벤트 후크로 각 배포를 관리하는 데 사용됩니다.
# appspec.yml 예제
version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/example

permissions:
  - object: /home/ubuntu/example
    owner: example
    group: ubuntu

hooks:
  ApplicationStop:
    - location: scripts/stop.sh
      runas: root
  AfterInstall:
    - location: scripts/initialize.sh
      runas: root
  ApplicationStart:
    - location: scripts/start.sh
      runas: root

EC2/온프레미스 기준으로 files, permissions, hooks영역으로 나뉘는데 이를 섹션이라 부릅니다.


(EC2/온프레미스) 수명 주기 이벤트 후크


CodeDeploy를 이용한 배포에는 인 플레이스(in-place) 배포와 로드 밸런서를 활용하는블루-그린 배포로 나뉘어지는데 이번 작업은 인 플레이스(in-place) 배포 기준으로 설명하고자 합니다.

이벤트 후크를 통해 배포 수명 주기에 따라 실행할 하나 이상의 스크립트를 지정해 줄 수 있으며

배포 주기에 따른 실행 순서는 아래와 같습니다.

위 그림에서의 Start, DownloadBundle, Install, End는 스크립트 실행되는 구간에서 제외 되기에 회색으로 처리 되었습니다.

이벤트 목록

  • ApplicationStop: 이 배포 수명 주기 이벤트는 애플리케이션 수정이 다운로드되기 전에도 발생합니다. 이 이벤트에 대해서는 애플리케이션을 안전하게 종료하거나 배포 준비 중에 현재 설치된 패키지를 제거하도록 스크립트를 지정할 수 있습니다. 이 배포 수명 주기 이벤트에 사용되는 AppSpec 파일 및 스크립트는 이전에 성공적으로 배포된 애플리케이션 수정에서 가져옵니다.

참고: AppSpec 파일은 인스턴스에 배포하기 전에는 인스턴스에 존재하지 않습니다. 이러한 이유로, 인스턴스에 처음으로 배포할 때는 ApplicationStop 후크가 실행되지 않습니다. 인스턴스에 두 번째로 배포할 때는 ApplicationStop 후크를 사용할 수 있습니다.

  • DownloadBundle – 이 배포 수명 주기 이벤트 중 에이전트는 애플리케이션 수정 파일을 다음 임시 위치로 복사합니다.

  • BeforeInstall - 파일 암호화 해제 및 현재 버전의 백업 만들기와 같은 사전 설치 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

  • Install - 이 배포 수명 주기 이벤트 중에 CodeDeploy 에이전트는 수정 파일을 임시 위치에서 최종 대상 폴더로 복사합니다.

  • AfterInstall - 애플리케이션 구성 또는 파일 권한 변경과 같은 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

  • ApplicationStart - 해당 이벤트 실행 중에 중지된 서비스를 다시 시작하려면 일반적으로 ApplicationStop 이벤트를 사용합니다.

  • ValidateService – 마지막 배포 수명 주기 이벤트입니다. 배포가 성공적으로 완료되었는지 확인하는 데 사용됩니다.

이 외에 생략된 로드 밸런서 관련한 이벤트 후크 등은 공식 문서에 자세히 나와있으니 참조하시기 바랍니다.


appspec.yml 각 섹션 설명


> ### files
# files 예시
files:
  - source: /
    destination: /home/ubuntu/
    overwrite: yes
  • source: 인스턴스에 복사할 수정된 파일 또는 디렉터리를 시겹ㄹ합니다.
    - 해당 경로는 appspec.yml 파일 기준 상대경로입니다.

  • destination: 인스턴스에서 파일이 복사되어야 하는 위치를 식별합니다.

  • overwrite: 선택 값으로, 동일한 파일이 있을 경우 덮어쓰기 여부를 작성합니다.


permissions

permissions 섹션은 files 섹션에서 정의한 파일이 인스턴스에 복사된 후 해당 파일에 권한이 어떻게 적용되어야 하는 지를 지정합니다.

permissions는 EC2/온프레미스에만 사용되므로 AWS Lamda/ECS 배포는 resources 섹션 을 참조할 수 있습니다.

permissions:
  - object: /home/ubuntu/
    owner: bvoat
    group: ubuntu
    ...
  • object(필수)
    - 문자열을 사용하여 대상을 지정합니다.

  • pattern(선택)
    - 권한을 적용할 패턴을 지정합니다.
    - 따옴표("")가 있는 문자열을 사용하여 pattern을 지정합니다.
    - 지정하지 않거나 특수 문자"**"를 사용하여 지정하면 권한이 type에 따라 일치하는 모든 파일에 적용됩니다.

  • owner(선택)
    - object의 소유자 이름입니다.
    - 문자열을 사용하여 owner를 지정합니다.
    - 지정하지 않으면 원본 파일에 적용된 기존의 모든 소유자가 복사 작업 후에도 아무것도 변경되지 않습니다.

  • group(선택)
    - object의 그룹 이름입니다.
    - 문자열을 사용하여 group을 지정합니다.
    - 지정하지 않으면 원본 파일에 적용된 기존의 모든 소유자가 복사 작업 후에도 아무것도 변경되지 않습니다.


hooks

hooks:
   deployment-lifecycle-event-name:
     - location: script-location
       timeout: timeout-in-seconds
       runas: user-name
  • deployment-lifecycle-event-name(필수):
    - 배포 수명주기에 따른 이벤트 이름을 작성합니다.
    - ApplicationStop, BeforeInstall, ApplicationStart 등

  • location(필수)
    - 스크립트 위치를 의미하며, Application root를 기준으로 합니다.
    - (예제 기준) /home/ubuntu 디렉토리에 해당합니다.

  • timeout(선택)
    - 각 배포 수명 주기 이벤트에 대한 스크립트 실행에 허용되는 최대 시간입니다.
    - 설정 시간을 초과하면 이벤트는 실패 처리가 됩니다.
    - 기본값은 3,600초(1시간)입니다.

  • runas(선택)
    - 기본적으로 인스턴스에서 실행 중인 CodeDeploy 에이전트입니다.
    - 에이전트 확인은 sudo service codedeploy-agent status로 확인 가능하며
    변경하지 않는다면 기본 설정은 root입니다.

참고


profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글