해결된 질문
작성
·
212
1
강사님의 강의를 들으면서 모든 과정 에러없이 다 따라서 진행하였습니다. 완강을 하고 기존에 제가 따로 운영하던 프로젝트를 EC2에서 ECS 배포로 변경하는 작업을 진행하였습니다.
제 프로젝트에 ECS 배포와 Github Action 등이 정상적으로 적용된것을 확인하고 강의에서 진행하셨던 리소스들(express-ecs.com)에 대한 cluster, loadbalancer, task definition 등을 삭제하였습니다. 또한, IAM 롤에 대해서도 삭제를 하였는데 해당 리소스들을 삭제한 직후에 발생한 에러인지는 정확히 파악을 못 하였으나 그 이후로 갑자기 제가 자체적으로 만든(newdok) 로드밸런서의 Listener, Security Group에 대해서 접근 에러가 발생하였습니다.
여기까지가 현재 발생한 문제점이고 해당 내용들에 대한 2가지 질문이 있습니다.
질문 1
위 사진들을 보시면 AuthFail 에러가 발생하는데 여러 해결법들을 검색해보고 액세스 키도 새로 발급해보고 IAM 권한도 admin으로 설정해보고 여러 시도를 하였으나 해결을 하지 못하였습니다. 문제는 아무 서버와도 연결되지 않은 깡통 로드밸런서(test-lb)을 생성하여 리스너와 보안그룹을 지정해주면 해당 로드밸런서에 대해서는 AuthFail에러가 발생하지 않습니다. 만약, AWS 인증 문제라면 제가 관리하고 있는 모든 자원에 대해서 Security Group 접근 에러가 발생해야 하는데 해당 로드밸런서(newdok-lb)에 대해서만 에러가 발생하는 이유를 잘 모르겠습니다.
질문 2
두 번째 질문은 ECS Task Container의 Health Check에 대해서입니다. 첫 번째 질문에서 언급했던 에러가 발생함에도 로드 밸런서 접속(HTTP만), 연결한 도메인에 대한 접속(HTTP, HTTPS)은 정상적으로 되고 있는 상황입니다. 실제로도 ECS Cluster에 들어가보면 cluster, service, 심지어 task까지 정상적으로 작동 및 Health 상태를 반환합니다.
하지만, 마지막 사진을 보시면 Task을 들어갔을때, Container에서 Healthy가 아니라 Unknown 상태를 반환합니다. Unhealthy가 아니라 Unknown 반환의 경우 어떤 문제일까요?
답변 1
0
안녕하세요 :)
수강후 바로 적용을 해보셨군요! 갑자기 장애가 나서 답답하시겠네요.
질문 1. 이 오류는 load balancer와는 무관합니다. 지금 AWS로 로그인한 계정에 문제가 있습니다. Root 계정으로 들어가지 않고 User를 생성해서 로그인 하신건가요? 아마 해당 user의 role/permission 쪽에 문제가 있을걸로 추정됩니다. 잘못 삭제된 role/permission을 다시 추가해주셔야 할 듯 해요. 그리고 추가 한 다음에 로그아웃 하고 다시 로그인을 해주세요. session이 만료되지 않아서 추가한 권한이 바로 반영되지 않을 수도 있습니다.
질문 2. 컨테이너 health status가 Unknown인 경우 아직 health check를 진행중이거나 health check을 설정하지 않았을 경우입니다. 그리고 해당 container가 essential container인거죠? Essential(필수) container의 health status에 따라 task의 health status가 결정되거든요.
아 되다가 안되다가 하는건가요? aws에 로그인 하시면 access token이 발급 되거든요. 근데 일정 시간 지나면 보안상 토큰을 만료시켜버립니다. 페북이나 다른 서비스처럼 한번 로그인하면 쭉 로그인 상태를 유지하지 않는거죠. aws는 보안이 워낙 중요한 서비스니깐요. 근데 이상한건 원래 토큰이 만료되면서 자동으로 로그아웃 처리가 되거든요. 그래서 다시 로그인 하라고 합니다. 다시 로그인 할 경우에는 문제가 없는건가요? 만약 그렇다면 브라우저의 문제일 수도 있지 않을까 의십해봅니다. 일단 저는 저 오류를 본적이 없어요! CLI에서는 로그아웃 화면이 따로 없어서 만료되면 저 오류가 나오는거롤 알고 있어요. 브라우저에서는 로그아웃 화면으로 넘어가는게 정상인걸로 알고 있습니다.
아 혹시 GET "/"으로 요청을 받을 수 있도록 하셨을까요? load balancer에 연결된 컨테이너였죠? 그러면 별도 health check을 컨테이너 레벨에서 하지 않았기 때문에 컨테이너 자체는 healthy로 전환됩니다. 하지만 load balancer의 health check가 fail하면서 unknown(load balancer가 health test 진행중)이었다가 지속적으로 heach check 실패하면 해당 태스크를 죽입니다. 문제가 있는 테스크로 생각하기 때문이죠. 별도 설정을 하지 않았다면 로드밸런서의 디폴트 헬스 체크는 GET "/" 으로 요청을 보냈을 때 status code가 200으로 넘어오는지 확인하는거일겁니다. 콘솔에서 ec2 -> load balancer -> 해당 로드밸런서 선택 -> health checks 탭에 들어가시면 어떤 health check가 설정되어 있는지 확인할 수 있습니다!
질문 1. 아닙니다! Root 계정으로 접속하였고 제가 2개의 로드밸런서를 생성해서 동일하게 80, 443 포트에 대해 리스너 규칙을 설정하고 각각 Target group과 Security group을 설정하였는데 제가 운영하던 프로젝트에 연결한 로드밸런서에서만 AuthFail 에러가 발생하였습니다. 강사님의 강의를 따라서 만들었던 로드밸런서(express-ecs.com)에서는 해당 에러가 발생한적이 없어서 해결법을 못 찾고 있는 상황이였습니다... IAM User로 로그인을 하지는 않았지만 말씀해주신 role/permission에 대해 한 번 재설정을 해보겠습니다. 혹시 어떤 role/permission이 해당 에러를 유발시킬 수 있는지 알 수 있을까요??
추가로 AuthFail 에러가 발생 안 했다가 좀 지나서 접속해보면 에러가 발생한상태로 뜨기도 하는데하는게 AWS쪽에서 연결 요청?같은걸 주기적으로 보내서 검사를 하는것일까요?
질문 2. 해당 service - task에는 1개의 container만 존재하는 상황이라 해당 컨테이너가 Essential container가 맞습니다! 제가 별도로 health check을 설정 해제하거나 그런적이 없었어서 한 번 설정을 다시 찾아보겠습니다. 그런데, Essentail container의 상태에 따라 task의 상태가 결정된다고 하셨는데 현재 container의 health status은 Unknown이지만 이를 감싸고 있는(?) task와 service의 health status은 모두 Healthy입니다. 말씀해주신대로 container의 상태에 따라 task도 결정되는게 맞을거같은데 어떻게 container가 unknown상태인데 task와 service은 healthy 상태로 정상적으로 돌아가는지가 의문입니다...