본문 바로가기

CodeDeploy ApplicationStop 훅이 직전 성공 리비전에서 실행되는 이유

조회 1 · 댓글 0
매큠작성자2026년 8월 17일

CodeDeploy EC2/온프레미스 in-place 배포에서 ApplicationStop 스크립트를 고쳤는데 이번 배포에 반영이 안 되는 경우가 있습니다. 정상 동작입니다. ApplicationStop은 리비전 다운로드(DownloadBundle) 이전에 실행되고, 이때 쓰는 AppSpec 파일과 스크립트는 이번 리비전이 아니라 직전에 성공적으로 배포된 리비전의 것을 씁니다. 따라서 방금 수정한 ApplicationStop은 이번이 아니라 다음 배포부터 적용됩니다. 또 인스턴스에 AppSpec이 아직 없는 첫 배포에서는 ApplicationStop 자체가 실행되지 않고, 두 번째 배포부터 실행됩니다.

in-place 배포의 훅 실행 순서와 hooks 구조는 다음과 같습니다.

# in-place 훅 순서 (LB 미사용 기준)
ApplicationStop -> DownloadBundle -> BeforeInstall -> Install
-> AfterInstall -> ApplicationStart -> ValidateService
# DownloadBundle, Install은 에이전트 전용이라 스크립트 지정 불가

hooks:
  ApplicationStop:
    - location: scripts/stop.sh
      timeout: 180        # 기본 3600초, 최대 3600초
      runas: ec2-user     # Amazon Linux/Ubuntu만 적용

직전 성공 리비전 위치는 에이전트가 아래 파일에서 찾습니다. ApplicationStop 실패로 배포가 막힐 때 이 경로부터 확인합니다.

# Amazon Linux/Ubuntu/RHEL
/opt/codedeploy-agent/deployment-root/deployment-instructions/{{deployment-group-id}}_last_successful_install

주의로, ApplicationStop이 옛 스크립트를 실행하다 실패하면 새 리비전 배포가 그 단계에서 멈춥니다. 안 쓰는 훅이면 이전 리비전에서 비워두거나, 문제 시 문제 인스턴스에서 위 파일을 점검합니다.

🔗 https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

로그인 후 답글을 남길 수 있습니다.