일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 실용주의 프로그래머
- amazon ecs
- AWS
- 논문 정리
- AWS 비용 절감
- 14일 공부
- 지표
- Go-lang
- 구조 패턴
- docker
- 도커 주의사항
- 경로 계획 알고리즘
- MAPF
- ssh
- 청첩장 모임
- Rust
- DevOps
- 생성 패턴
- 오블완
- Til
- Playwright
- 신혼 여행
- terraform
- 디자인 패턴
- github
- PostgreSQL
- 티스토리챌린지
- leetcode
- study
- Monthly Checklist
- Today
- Total
밤 늦게까지 여는 카페
[Amazon ECS] 혹시 컨테이너 이미지의 태그를 덮어 쓰시나요? 서비스들 재실행하십쇼... 본문
안녕하세요. 오늘은 Amazon ECS를 사용하면서 겪었던 실수를 공유드리고자 합니다.
드물지만 한번쯤 겪을 수도 있으니 재밌게 읽어주세요!
1. 문제 상황
일찍 출근해서 맑은 정신으로 업무를 처리하고 있던 어느 날, 깜짝 놀랄만한 슬랙 메시지가 보입니다.
서비스 접속이 안된다는 것입니다! 그나마 테스트 환경의 서비스에 접속이 안되는 것이 천만다행이었지요.
접속해서 직접 확인해보니 503 Service Unavailable 코드가 반환되고 있었습니다.
서비스가 죽을만한 버그는 없었는데 뭔가 싶어서 ECS 콘솔을 확인해보니
컨테이너 이미지를 pull 받지 못해서 태스크가 계속 죽고 있었던 것이었습니다.
컨테이너 이미지를 pull 받지 못하는 것은 대체로 ECS 서비스의 네트워크 설정에 문제가 있을 때라서 이해가 되질 않았습니다.
다행히도 차분히 에러 메시지를 더 읽어보니 원인을 파악할 수 있었습니다.
작업 정의에 명시되어 있는 컨테이너 이미지를 찾지 못하는 것이었습니다!
- 조금 더 정확히는 sha256 hash값이 달랐기 때문이었습니다.
2. 컨테이너 이미지의 sha256 hash값이 뭐에요?
원래 ECS에서 태스크가 실행될 때는 imageUri:tag를 이용해서 컨테이너 이미지를 찾았습니다.
그런데 2024년 6월 25일부터는 imageUri:digest(sha256)를 이용해서 컨테이너 이미지를 찾도록 변경되었습니다.
마침 저희는 컨테이너 이미지의 tag를 덮어씌웠었고(아주 작은 수정사항이라서 굳이 tag를 변경하지 않고 덮어 씌웠습니다)
이로 인해 기존에 정의된 digest를 가지고 있는 이미지가 사라져서 태스크가 실행되지 않았던 것이죠.
이미지의 tag가 덮어씌워지면 기존에 해당 tag를 사용하던 이미지의 tag가 사라집니다.
하필 저희는 ECR의 수명 주기 정책을 이용해서 tag가 없는 이미지를 1일 후에 제거하고 있었습니다.
우연에 우연이 겹쳤달까요?
참고: Amazon ECR에서 태그 없는 이미지들 제거하기 - 용량만 축내고 있는 이미지들 없애버리죠!
조치 방법은 간단합니다. ECS 서비스를 업데이트(재배포) 해주면 끝납니다!
3. 어떻게 하면 문제가 발생하지 않을까?
테스트 환경에서 서비스를 배포하는 과정을 최대한 단순하게 유지하고 싶었기에
형상이 달라질 때마다 무조건 버전을 올리고 ECS 서비스들을 전체 배포할까 고민했었는데
코드 1~2줄 달라졌어도 무조건 버전을 올려야 한다면 이로 인해 불필요한 공수가 늘어나게 되는 것이 우려되었습니다.
- ECR에서 레포지토리 별로 이미지들의 태그를 덮어쓰지 못하도록 설정할 수가 있습니다.
최종적으로는 형상이 달라지면 ECS 서비스들을 무조건 전체 배포하는 것으로 땅땅했습니다.
🎁다른 Amazon ECS 포스팅들 🎁
'aws' 카테고리의 다른 글
[AWS IoT Core] Cloudwatch 대비 60% 절감! Rule Engine+Athena로 데이터 수신 시각 추적하기 (0) | 2025.04.19 |
---|---|
[AWS IoT Core] Basic Ingest - 비싼 메시지 전송 비용 절약하는 방법 (0) | 2025.04.15 |
[AWS 비용 절감] crontab을 이용해서 주말에는 서버 자동으로 내리기 (4) | 2025.02.16 |
[2025.02.06] Amazon S3 Glacier Deep Archive 복구 경험 (1) | 2025.02.09 |
[Amazon ECS] 갑자기 137 종료 코드를 반환하면서 실행 중인 ECS Fargate Task가 종료된다;;; feat. Docker Container 종료 코드 (3) | 2024.11.07 |