일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- VGW
- CrossSiteScript
- SessionManager 터널링
- DNS Resolver
- AWS Resolver
- ec2
- s3 sync
- 마운트
- S3 Gateway Endpoint
- S3 Interface Endpoint
- x lock s lock
- Terraform
- 다이렉트 커넥트
- push-gateway
- BastianHost
- DXGW
- bWAPP install
- sessionManager
- S3 private통신
- bWAPP M1
- bWAPP arm
- ix is lock
- s3
- Route53 Endpoint
- node pod 분리
- S3 PrivateLink
- Route53 Resolver
- 푸시게이트웨이
- 도커
- 리눅스
- Today
- Total
이것이 점프 투 공작소
CodeDeploy에서 ApplicationStop 에러날때 본문
Gitlab에서 CodeDeploy를 이용해 EC2 개발서버에 배포하던중 최초 성공 이후,
그 다음 배포에서 계속 CodeDeploy의 ApplicationStop에서 에러가 지속적으로 발생하였습니다..
Appspec.yml에 ApplicationStop에 해당하는 kill_process.sh 스크립트 내용를 바꾸었는데
계속 최초 성공하였을때 스크립트가 실행되고 있었습니다.
혹시 캐시로 스크립트를 실행시키나..? 라는 생각이들어 CodeDeploy의 파이프라인을 찾아보았습니다.
CodeDeploy LifeCycleHook
LifeCycleHook에 대한 공식문서를 살펴보면
(아래 글은 LifeCycleHook에 대한 AWS 공식문서를 가져왔습니다.)
1. ApplicationStop
이 배포 수명 주기 이벤트는 애플리케이션 수정이 다운로드되기 전에도 발생합니다. 이 이벤트에 대해서는 애플리케이션을 안전하게 종료하거나 배포 준비 중에 현재 설치된 패키지를 제거하도록 스크립트를 지정할 수 있습니다. 이 배포 수명 주기 이벤트에 사용되는 AppSpec 파일 및 스크립트는 이전에 성공적으로 배포된 애플리케이션 수정에서 가져옵니다.가장 마지막으로 배포가 완료된 애플리케이션 수정의 위치를 확인하기 위해 CodeDeploy 에이전트는 deployment-group-id_last_successful_install 파일에 나와 있는 위치를 찾습니다. 이 파일의 위치는 다음과 같습니다.
Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2의 /opt/codedeploy-agent/deployment-root/deployment-instructions 폴더 ~~~
공식문서에 답이 나와있었습니다. CodeDeploy는 최초 성공시 ApplicationStop hook에서는
/opt/codedeploy-agent/deployment-root/deployment-instructions /deployment-group-id_last_successful_install
폴더에 존재하던 기존 ApplicationStop 스크립트를 계속 실행하도록 되어 있었습니다.
2. DownloadBundle
이 배포 수명 주기 이벤트 중 에이전트는 애플리케이션 수정 파일을 다음 임시 위치로 복사합니다.Windows Server Amazon EC2 인스턴스에 대한 C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive 폴더.DownloadBundle 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 실패하고 UnknownError: not opened for reading이 표시되는 DownloadBundle 배포 수명 주기 이벤트 문제 해결 단원을 참조하세요.
이 이벤트는 CodeDeploy 에이전트에 예약되어 있으므로 스크립트 실행에 사용할 수 없습니다.
Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2의 /opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive 폴더
3. BeforeInstall
파일 암호화 해제 및 현재 버전의 백업 만들기와 같은 사전 설치 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.
4. install
이 배포 수명 주기 이벤트 중에 CodeDeploy 에이전트는 수정 파일을 임시 위치에서 최종 대상 폴더로 복사합니다. 이 이벤트는 CodeDeploy 에이전트에 예약되어 있으므로 스크립트 실행에 사용할 수 없습니다.
5. AfterInstall
애플리케이션 구성 또는 파일 권한 변경과 같은 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.
6. ApplicationStart
ApplicationStop 중에 중지된 서비스를 다시 시작하려면 일반적으로 이 배포 수명 주기 이벤트를 사용합니다.
7. ValidateService
마지막 배포 수명 주기 이벤트입니다. 배포가 성공적으로 완료되었는지 확인하는 데 사용됩니다.
최근 성공한 배포파일 삭제
/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-id_last_successful_install 파일에 최근 성공한 deploy 폴더가 적혀져있고, 이 파일과 파일에 존재하던 파일을 삭제하였습니다.
deployment-group-id_last_successful_install 에 적혀있던 파일에는 최초 배포성공시의 ApplicationStop 시 실행되던 스크립트가 존재하였구 삭제 후 정상적으로 배포되었습니다.
'aws' 카테고리의 다른 글
AWS Transit Gateway란? AWS계정간 VPC 통신하기 (2) | 2023.06.24 |
---|---|
Route53 Private Host존을 이용한 VPC간 Private Endpoint 공유 (0) | 2023.06.16 |
AWS CloudMap 과 Route53 PrivateNameSpace를 이용한 ECS Fargate 디스커버리 구현하기, EC2를 CloudMap에 등록하기 (0) | 2023.05.14 |
VPC의 리소스들에 대해 알아보자 (0) | 2023.04.16 |
CI/CD Pipeline - AWS CodePipeline을 통한 CICD 해보기 with Terraform (0) | 2023.03.05 |