본문 바로가기
CICD

[CodeDeploy/Error] 'ApplicationStop' hook error (ignore application stop failures로 해결)

by 삼콩 2022. 4. 3.

AWS의 배포 서비스 CodeDeploy로 배포를 하기위해서는 배포 애플리케이션 정의 문서(appspec.yaml or appspec.json)를 작성하게되며, 배포 대상 (컴퓨팅 플랫폼) 에따라 hook을 추가하여 해당 단계에 지정 스크립트를 구동시키는 경우가 존재한다.

예를들어 배포 대상 (컴퓨팅 플랫폼)이 EC2인 경우, appspec에 ApplicationStop을 두어 배포 전 기존 애플리케이션을 안전하게 종료하거나 배포 준비 중에 현재 설치된 패키지를 제거하는 스크립트를 실행시킬 수 있다. 

 

ApplicationStop hook이 사용하는 스크립트의 수정-배포를 반복하다보면 ApplicationStop에서 오류가 발생할 수 있다. 분명 직전 배포 ApplicstionStop 용 스크립트에서 문제를 발견하여 수정후 배포하였지만 다음 배포된 오류 로그에서 수정사항이 반영되지 않았음이 확인된다.

예를들어, "10 번째 배포: ApplicationStop 스크립트(appStop.sh)에서 구문 오류가 발생됨을 CodeDeploy에서 확인 -> 배포 스크립트 수정, 반영 -> 11 번째 배포 시도 -> 동일한 구문 오류 발생" 과 같은 단계이다.

이 상황의 원인과 해결 방법은 아래와 같다.

 

원인: ApplicationStop 이벤트에서 사용되는 AppSpec과 스크립트는 가장 최근에 성공된 배포에서 수행됨 (BeforeBlockTraffic, AfterBlockTraffic 동일)

ApplicationStop hook 단계에서 CodeDeploy는 가장 최근에 성공한 배포의 AppSpec 파일 (appspec.yaml, scripts)를 사용하여 수행된다. 즉 appspec.yaml 파일에서 ApplicationStop 내용을 수정하거나, 사용될 스크립트를 수정, 반영하여도 CodeDeploy는 이전 (최근에 성공한 배포) 내용을 실행하므로 내 수정사항이 반영되지 않는 것이다.

 

해결 방법: application stop 실패 무시 (--ignore-application-stop-failures)

수정 후 새 배포 생성시 application stop failure 무시 설정 후 배포를 수행하면 ApplicationStop, BeforeBlockTraffic, AfterBlockTraffic 중 배포가 실패되어도 무시된 채 다음 단계로 진행된다.

 

[콘솔]

배포 생성 단계에서 ApplicationStop 수명 주기 이벤트 실패 선택

 

[AWS CLI]

AWS CLI를 사용하는 경우 아래 명령어에 --ignore-application-stop-failures 옵션을 주어 실행한다.

다음 명령어는 MY-APPLICATION 배포 애플리케이션의 MY-DEPLOYMENT-GROUP 의 배포 그룹에서 배포를 수행하는 내용이다. 이때 배포 개정 내용은 MY-S3-BUCKET/cicd/files.zip 에 위치한다.

aws deploy create-deployment \
--application-name MY-APPLICATION \
--deployment-group-name MY-DEPLOYMENT-GROUP \
--ignore-application-stop-failures \
--s3-location "bucket=MY-S3-BUCKET,bundleType=zip,key=cicd/files.zip"

 

즉, ApplicationStop, BeforeBlockTraffic, AfterBlockTraffic hook 단계에서 사용되는 각 파일 명을 변경하였거나, 오류가 발생하여 이를 수정/반영 하고자 할 때에는 ignore application stop failures 를 사용하여 정상 배포할 수 있다.

 

 

[참고]

https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/troubleshooting-deployments.html

댓글