혼자서 git action과 codedeploy를 활용해 배포 자동화를 해보던 중 다 알맞게 설정해 git action에서는 build 및 deploy가 성공으로 떴지만, codedeploy에서는 error가 발생하였다.
<그림1. github action 성공 화면>
<그림2. aws codedeploy 실패 화면>
검색을 해보니 나와 동일한 오류를 발생하신 분을 발견하였다.
✒️ 참고
궁금하신 분들은 jojoldu님의 freelec-springboot2-webservice repo Issue #80을 참고하시면 될 것 같습니다.
위 글에 따르면 codedeploy를 이용하기 위해 EC2 서버에 codedeploy-agent를 설치하였기 때문에 codedeploy 배포 중 error가 발생하면 /var/log/aws/codedeploy-agent에 log가 찍힌다는 것이다.
✒️ 참고
기본적인 codedeploy 오류 내용은 AWS codedeploy 배포의 이벤트 로그를 확인하면 알 수 있다.
실제로 내 EC2 서버에 접속 후 해당 경로에 접근하니 아래와 같이 log 파일들이 존재했다.
<그림3. EC2 codedeploy log 파일>
log 파일 안을 보니 아래와 같이 NoSuchKey Exception이 발생한 것을 알 수 있었다.
<그림4. NoSuchKey Exception>
또한, 조금 더 아래 log를 보니 error message 까지 확인할 수 있었다.
{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"The specified key does not exist.\",\"log\":\"\"}"}
<그림5. log info error message>
이로 유추하면, Error의 원인은 specified key가 없다는 것을 알 수 있었다. 여기서 말하는 specified key는 codedeploy가 참고할 s3 안의 파일을 말한다 나는 .zip 파일로 설정해두었는데 s3와 github action의 배포를 설정 파일을 보니 이 이름이 잘못 적혀있었다. 이를 해결한 뒤 실행해보니 정상적으로 배포가 되어있었다.
✒️ 참고
github action의 설정 파일의 deploy 부분- name: Deploy env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: aws deploy create-deployment --application-name {{ name }} --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name {{ group name }} --s3-location bucket={{ bucket name }},bundleType=zip,key= {{ key name }}.zip
<그림5. log info error message>
<그림5. log info error message>
이 이유 말고도 여러 appspec.yml등의 에러 로그 역시 이 파일에서 확인 할 수 있으니 기억해두자!
📌 추가
deploy.sh의 log를 보고 싶은 경우 "/opt/codedeploy-agent/deployment-root"의 'codedeploy-agent-deployments.log' 파일을 보면 된다. 여기서 deploy.sh에 적어준 echo 내용들도 볼 수 있다.