해결된 질문
작성
·
2.5K
1
안녕하세요 계속 질문만남기는 것 같아 죄송합니다.
섹션 10. AWS Elastic Container Service (ECS) 자세히 알아보기!
에서
ECR private repository 이미지로 AWS ECS service 생성하기 강좌를 따라하고 있는데요
앞강좌에서 local 에서 도커 이미지 push 까지 완료하고
해당 강좌도
Task definition 까지 생성을 잘 완료 하였습니다.
하지만
서비스 생성중에
강좌대로 똑같이 서비스를 생성후 서비스 생성 클릭을 눌렀는데요
해당 에러가 나와서 CloundFormation 에서 보기 버튼을 눌러서 확인해보니깐
Resource handler returned message: "Error occurred during operation 'ECS Deployment Circuit Breaker was triggered'." (RequestToken: c1e2037e-83e2-33f1-1337-2b3ffd4347aa, HandlerErrorCode: GeneralServiceException)
검색을 해봐도 정확히 나오지가 않아서
다시 서비스 생성해도 동일한 에러가 나오네요
혹시 더 디테일한 로그를 보는방법이나
해결방법을 알 수 있을까요?
답변 2
1
AI가 답변을 해줬네요 ㅎㅎ
혹시 AI가 말해준 이 부분을 확인하셨을까요?
- AWS Management Console에 로그인한 후, ECS 서비스로 이동합니다.
- 문제가 발생한 클러스터와 서비스를 선택합니다.
- 로그 탭에서 해당 서비스에 대한 상세 로그를 확인할 수 있습니다.
- 또한 AWS CloudWatch에서 로그 그룹을 확인하여 서비스 로그를 살펴볼 수 있습니다.
만약 여기서 오류가 확인이 안된다면 해당 서비스에서 Deployments탭을 선택해주세요.
그러면 이런 Event가 있을거에요 [서비스 이름] has started 1 tasks: task 912db14ec1b74d139b9891d49da74f7c. 배포를 시도하면서 새로운 태스크를 만들려고 하는거죠. 이 태스크를 클릭하면 해당 테스크의 Logs탭에 들어갈 수 있습니다. 거기에 들어가면 컨테이너 안에서 발생된 로그를 확인할 수 있습니다. 컨테이너 자체가 문제였다면 여기서 원인을 확인하실 수 있을거애요
아..찾았습니다. ㅜㅜ
Dockerfile 에서
CMD ["npm" , "build/index.js"]
이부분을
CMD ["node" , "build/index.js"]
로 수정했습니다..........휴..
로그를 볼 수 있어서 그나마 찾았네요
답변감사합니다!!
아. ㅎㅎ 산넘어 산이네요
1:C 23 Nov 2023 09:42:35.682 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis 오버커밋을 처리해야할것 같은데
ECS 에서는 어디서 처리해야되는지 알 수 있을까요?
lightsail 에서는 콘솔창에서
/etc/sysctl.conf 파일을 열어서
vm.overcommit_memory = 1 추가해주니 됐었는데
ecs 에서는 콘솔? 을 어디서 열어서 수정해야할까요?
오 디버깅 제대로 해보셨네요!
마지막 redis memory문제 관련해서 혹시 동일한 Fargate 환경으로 돌리신걸까요?
방법이 있을 수는 있는데 확실하지는 않아요.
Task Definition -> 컨테이너 설정부분 -> Docker configuration 여기서 entry, command를 이용하면 가능할 수도 있습니다.
entryPoint: sh,-c
command: sysctl vm.overcommit_memory=1 && redis-server
그런데 이 버그는 사실 고치는것보다는 생략해도 되지 않을까 싶기도 해요. 레디스 관련 특수한 오류인데요. 강의에서도 언급했듯이 레디스, 디비 같은 stateful한 "외부" 서비스 (내가 짜지 않은 코드)는 메니지드를 쓰면 되니깐요. ECS를 잘 알아도 왜 이런 경우에는 메니지드를 써야하는지 알 수 있는 좋은 케이스가 아닐까 싶습니다. (레디스 devops 전문가가 아닌 이상!)
0
안녕하세요, 인프런 AI 인턴입니다.
AWS ECS(Elastic Container Service)에서 서비스 생성 중 ‘ECS Deployment Circuit Breaker’ 에러가 발생하여 문제를 겪고 계신 것으로 보입니다. Circuit Breaker는 배포 도중 실패가 반복적으로 일어날 경우, 자동으로 배포를 중단시키고 이전 상태로 롤백하는 기능인데, 이 기능이 작동한 것으로 추정됩니다.
해당 에러와 관련하여, 다음의 조치 사항들을 확인하시길 권장드립니다:
디테일한 로그 확인 방법:
- AWS Management Console에 로그인한 후, ECS 서비스로 이동합니다.
- 문제가 발생한 클러스터와 서비스를 선택합니다.
- 로그 탭에서 해당 서비스에 대한 상세 로그를 확인할 수 있습니다.
- 또한 AWS CloudWatch에서 로그 그룹을 확인하여 서비스 로그를 살펴볼 수 있습니다.
아래의 Spring Boot AWS Elastic Beanstalk 관련 블로그 포스트 링크와 Spring Boot 레퍼런스 문서 링크도 도움이 될 수 있으니 참고해보시기 바랍니다.
- Spring Boot AWS Elastic Beanstalk 예제 블로그 포스트
- Spring Boot AWS 문서
추가적으로, 인프런의 ‘AWS 배포 완벽가이드’ 강좌의 Q&A 섹션 또는 AWS에 대한 전문가 커뮤니티에 질문을 남기셔서 더 구체적인 답변을 얻는 것도 좋은 방법입니다.
인프런 서비스 관련 문의는 인프런 고객센터를 이용하시면 더 자세한 안내를 받으실 수 있습니다.
답변감사합니다.
말씀하신대로 현재 다시 서비스를 추가해서
로그를 보고 있는데요
build/index.js 경로를 못찾아서 에러가 나는것 같아서
혹시나 해서 소스를 살펴보았는데
tsconfig.json 에도 outDir 로 ./build 잘 설정이 되어있고
Dockerfile 에도
CMD 에 build/index.js 로
잘 설정이 되어있는데....
혹시 다른부분을 살펴봐야 될까요? ㅜㅜ