지난 글에서는 git tag 푸시로 GitHub Actions => ECR push => ECS 롤링 배포가 되는 CI/CD 파이프라인을 구성했다.
이번 글에서는 구축 과정에서 실제로 마주쳤던 오류들을 증상 => 원인 => 확인 => 해결 순서로 정리했다.
같은 에러를 다시 만났을 때 해결 방법을 바로 떠올릴 수 있도록, 내가 확인했던 포인트까지 함께 정리했다.
git tag v0.0.1 && git push --tags나는 에러가 났을때 아래 정보들을 확인했다.
클러스터 생성 중 아래 오류가 발생했다.
CreateCluster Invalid Request: Unable to assume the service linked role. Please verify that the ECS service linked role exists.
에러 로그
클러스터 service-cluster 생성 중 오류가 발생했습니다.
Resource handler returned message: "Invalid request provided: CreateCluster Invalid Request: Unable to assume the service linked role.
Please verify that the ECS service linked role exists. (Service: AmazonECS; Status Code: 400; Error Code: InvalidParameterException;
Request ID: c2aa1ff6-cda9-4955-84ae-ad63fb144861; Proxy: null)" (RequestToken: 3747083a-bed9-1901-3746-7539ec34229c, HandlerErrorCode: InvalidRequest)
ECS가 내부적으로 사용하는 Service linked role이 계정에 없거나(삭제), ECS가 그 Role을 Assume 할 수 없는 상태다.
원인
확인 방법
IAM 콘솔 => Roles(역할)에서 아래 이름을 검색한다. AWSServiceRoleForECS
가 있는지 찾아본다.
해결 방법
Service linked role을 생성한다.
생성후에 클러스터 생성을 다시 시도하면 해결된다.
GitHub Actions의 amazon-ecs-deploy-task-definition 단계에서 아래 에러가 났다.
Error: Service is INACTIVE

의미
워크플로우가 가리키는 ECS 서비스가 존재는 하되 INACTIVE 상태라는 뜻이다.
원인
확인 방법
나는 github variables에 이름 설정이 동일하지 않아 오류가 났었다.
해결
ECS 쪽 이벤트에서 아래 메시지가 보였다.
ECS Deployment Circuit Breaker was triggered
이 메시지는 ECS가 배포를 포기했다는 뜻이다. 원인은 task에 있다.

의미
배포된 새 태스크들이 정상 상태에 도달하지 못해서 ECS가 자동으로 배포를 중단한 것이다.
원인
해결
1. ECS → Service → Tasks 탭에서 STOPPED가 있는지 확인
2. STOPPED 태스크 클릭 → Stopped reason / Container exit code 확인
3. Container → CloudWatch logs 열기
4. 로그에서 원인을 확인하고 수정하기
Tasks 목록에서 반복적으로 아래 상태가 쌓였다.
Essential container in task exited

그리고 Task 상세에서 컨테이너가:
Stopped | 종료 코드: 1

의미
스프링 부트 컨테이너가 실행 직후 에러로 종료된 것이다.
서비스는 태스크를 유지해야 하므로 재기동을 반복하다가 배포가 실패한다.
원인
확인 방법
CloudWatch Logs에서 스프링이 왜 죽었는지를 보거나 태스크가 중단되었을때 태스크 로그에서 스프링 로그를 확인해보면 된다.
나의 경우에는 secret manager에서 ARN 키 지정을 잘못 사용해서 DB 연결이 실패해 저 오류가 났었다.
해결
Tasks 목록에 아래처럼 뜨고 바로 STOPPED 됐다.
ResourceInitializationError: failed to validate ...

원인
확인 방법
STOPPED task를 클릭해 상세 메시지에서 secrets, logs, pull 키워드를 확인한다.
나의 경우는 task-definition에 awslog-group이름과 실제 log group 이름이 달라서 오류가 났었다.
해결 방향
특히 권한이나 리소스 이름(서비스/클러스터/로그 그룹) 같은 기초 설정이 아주 조금만 달라도 배포가 전혀 안됬다.
나의 경우 문제가 생겼을 때는 바로 STOPPED task와 CloudWatch logs를 먼저 확인하는 것이 가장 빠르게 해결이 됬다.