Terraform 이미지 태그 충돌로 발생한 ECS Task 오류

이재영·2025년 12월 8일

ECS Anywhere

목록 보기
3/6

최근 프로젝트를 진행하며 겪었던 Terraform 에서의 인프라 구성과 어플리케이션의 배포 파이프라인 간에 발생한 문제와 해결과정을 작성해보고자 합니다.


🦠 문제 상황

문제는 제가 RDS 모듈관련 Terraform 코드를 수정하고 배포 후 발생하였습니다.
apply 한 뒤, 헬스체크가 실패하여 각 요소들을 확인해보니 태스크가 계속해서 중지되고 배포 시도를 하고있었습니다.

  • ECS: 태스크 개수가 0개로 표시됨.
  • ECS Anywhere(온프레미스 VM 내부): 실행 중인 컨테이너가 없음.

Terraform 코드에 대해선 CI 도 돌렸고 문제 없어서 클라우드 레벨의 문제라고 판단했습니다.



🦠 문제 원인

로그에 찍힌 CannotPullContainerError 에러를 자세히 보니 :latest 태그의 이미지를 불러오는 것을 발견했습니다.

저는 이전에 배포 안정성을 위해 GitHub Actions 파이프라인을 수정하였는데, 기존에 사용하던 latest 태그 푸시를 완전히 제거하고 커밋 SHA 기반 태그만 생성하도록 변경했습니다.
→ 따라서 ECR에는 더 이상 latest 이미지가 존재하지 않는 상태였습니다.

BUT!! Terraform의 ECS Task Definition에는 이미지 태그가 기본값으로 :latest로 정의되어 있었습니다.

그래서 terraform apply후 Terraform은 아래와 같이 서로 일치하지 않는 이미지 태그를 발견한 것 입니다.

  • 실제 AWS 상태: 파이프라인으로 배포된 :sha-xxxx 이미지
  • Terraform 코드: :latest 이미지

Terraform은 “AWS 상태가 코드와 다르다”고 판단하였던 것 입니다 . . .
이에 따라 Task Definition을 :latest로 재생성 -> ECS 새 리비전을 배포하려고 시도 -> :latest 존재 안하는데 계속 이미지를 가져오려다 에러를 반복한 것 입니다.



🦠 해결 과정

🦠 우선 조치

저는 Task가 배포되지않는 문제를 우선적으로 해결 하기 위해 Terraform이 덮어쓴 잘못된 Task Definition을 올바른 버전으로 되돌렸습니다.

최근의 배포 파이프라인을 다시 실행 하여, 유효한 SHA 태그가 적용된 Task Definition이 다시 생성되도록 하였고, 배포가 완료되고나서 해당 문제와 다시 마주치지 않게 아래와 같이 조치하였습니다.

🦠 Terraform Lifecycle 설정

앞으로 terraform apply를 실행할 때마다 배포된 이미지가 초기화되는 현상을 막기위해 Terraform이 ECS 서비스의 특정 속성 변경을 무시하도록 설정했습니다.

ECS 모듈의 aws_ecs_service 리소스에 lifecycle 블록을 추가하여, task_definition 변경 사항을 추적하지 않도록 추가해주었습니다.

🦠 결과

profile
how to define. how to solve.

0개의 댓글